From cf07026e1685bebe7a7e8545ea603146e7408a28 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Sun, 2 Oct 2016 19:04:29 +0200 Subject: [PATCH 001/175] fix issue #4585 - fix search in discover home page --- .../discover-search-bar/discover-search-bar.directive.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/modules/discover/components/discover-search-bar/discover-search-bar.directive.coffee b/app/modules/discover/components/discover-search-bar/discover-search-bar.directive.coffee index 9dab0fbc..ee588926 100644 --- a/app/modules/discover/components/discover-search-bar/discover-search-bar.directive.coffee +++ b/app/modules/discover/components/discover-search-bar/discover-search-bar.directive.coffee @@ -26,10 +26,13 @@ DiscoverSearchBarDirective = () -> templateUrl: 'discover/components/discover-search-bar/discover-search-bar.html', bindToController: true, scope: { - q: "=" + q: "=", filter: "=", onChange: "&" }, + compile: (element, attrs) -> + if !attrs.q + attrs.q = '' link: link } From 741f5edf1ca69457344c73cb034168505479f12a Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 3 Oct 2016 07:29:08 +0200 Subject: [PATCH 002/175] Issue 4590: Untranslated strings --- app/coffee/modules/admin/roles.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index 11fb5f4c..e60daa13 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -392,7 +392,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) -> { 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: "comment_task", name: "COMMON.PERMISIONS_CATEGORIES.USER_STORIES.COMMENT_TASKS"} + { key: "comment_task", name: "COMMON.PERMISIONS_CATEGORIES.TASKS.COMMENT_TASKS"} { key: "delete_task", name: "COMMON.PERMISIONS_CATEGORIES.TASKS.DELETE_TASKS"} ] categories.push({ @@ -404,7 +404,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) -> { 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: "comment_issue", name: "COMMON.PERMISIONS_CATEGORIES.USER_STORIES.COMMENT_ISSUES"} + { key: "comment_issue", name: "COMMON.PERMISIONS_CATEGORIES.ISSUES.COMMENT_ISSUES"} { key: "delete_issue", name: "COMMON.PERMISIONS_CATEGORIES.ISSUES.DELETE_ISSUES"} ] categories.push({ From 9f3ee17836e3efab70aeec706667871f7d6445ec Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 3 Oct 2016 07:53:52 +0200 Subject: [PATCH 003/175] Issue 4587: Wrong external reference link --- app/modules/components/detail/header/detail-header.jade | 2 +- app/modules/components/detail/header/detail-header.scss | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/modules/components/detail/header/detail-header.jade b/app/modules/components/detail/header/detail-header.jade index 317065c0..842a09d7 100644 --- a/app/modules/components/detail/header/detail-header.jade +++ b/app/modules/components/detail/header/detail-header.jade @@ -75,7 +75,7 @@ span(translate="ISSUES.EXTERNAL_REFERENCE") a( target="_blank" - ng-href="::vm.item.external_reference[1]" + ng-href="{{::vm.item.external_reference[1]}}" ng-title="{{'ISSUES.GO_TO_EXTERNAL_REFERENCE' | translate}}" ) span {{ ::vm.item.external_reference[1] }} diff --git a/app/modules/components/detail/header/detail-header.scss b/app/modules/components/detail/header/detail-header.scss index 122e1cd3..09aa4e7c 100644 --- a/app/modules/components/detail/header/detail-header.scss +++ b/app/modules/components/detail/header/detail-header.scss @@ -25,13 +25,15 @@ .item-origin-issue, .task-belongs-to, .belong-to-epics-wrapper, - .block-desc-container { + .block-desc-container, + .issue-external-reference { @include font-size(small); margin-top: .5rem; } .item-generated-us, .task-belongs-to, - .item-origin-issue { + .item-origin-issue, + .issue-external-reference { a { cursor: pointer; padding: 0 .2rem; From 9b553583d90745e6a7999f236ddff671dceb4493 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 3 Oct 2016 08:22:31 +0200 Subject: [PATCH 004/175] fix issue #4592 - change status in issues list --- app/coffee/modules/issues/list.coffee | 12 +----------- e2e/helpers/issues-helper.js | 10 ++++++++++ e2e/suites/issues/issues.e2e.js | 12 ++++++++++++ 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 81b577a5..5da0f9d8 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -69,7 +69,6 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi bindMethods(@) @scope.sectionName = "Issues" - @scope.filters = {} @.voting = false return if @.applyStoredFilters(@params.pslug, @.filtersHashSuffix) @@ -560,10 +559,6 @@ IssueStatusInlineEditionDirective = ($repo, $template, $rootscope) -> event.stopPropagation() target = angular.element(event.currentTarget) - for filter in $scope.filters.status - if filter.id == issue.status - filter.count-- - issue.status = target.data("status-id") $el.find(".pop-status").popover().close() updateIssueStatus($el, issue, $scope.issueStatusById) @@ -571,12 +566,7 @@ IssueStatusInlineEditionDirective = ($repo, $template, $rootscope) -> $scope.$apply () -> $repo.save(issue).then -> $ctrl.loadIssues() - - for filter in $scope.filters.status - if filter.id == issue.status - filter.count++ - - $rootscope.$broadcast("filters:issueupdate", $scope.filters) + $ctrl.generateFilters() taiga.bindOnce $scope, "project", (project) -> $el.append(selectionTemplate({ 'statuses': project.issue_statuses })) diff --git a/e2e/helpers/issues-helper.js b/e2e/helpers/issues-helper.js index 85022ebe..3e73c952 100644 --- a/e2e/helpers/issues-helper.js +++ b/e2e/helpers/issues-helper.js @@ -69,6 +69,16 @@ helper.openAssignTo = function(index) { $$('.issue-assignedto').get(index).click(); }; +helper.changeStatus = function(index, statusIndex) { + let status = $$('.issue-status').get(index); + + return utils.popover.open(status, statusIndex); +}; + +helper.getStatus = function() { + return $$('.issue-status').getText(); +}; + helper.getAssignTo = function(index) { return $$('.assigned-field figcaption').get(index).getText(); }; diff --git a/e2e/suites/issues/issues.e2e.js b/e2e/suites/issues/issues.e2e.js index 264b4300..1ead1c3a 100644 --- a/e2e/suites/issues/issues.e2e.js +++ b/e2e/suites/issues/issues.e2e.js @@ -123,6 +123,18 @@ describe('issues list', function() { expect(issueUserName).to.be.equal(newUserName); }); + it('change status', async function() { + await issuesHelper.changeStatus(0, 1); + + let oldStatus = issuesHelper.getStatus(0); + + await issuesHelper.changeStatus(1, 1); + + let newStatus = issuesHelper.getStatus(0); + + expect(oldStatus).not.to.be.equal(newStatus); + }); + describe('issues filters', sharedFilters.bind(this, 'issues', () => { return issuesHelper.getIssues().count(); })); From cd9f693f81ba22eb282c21e8078be6ac7700e11e Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 3 Oct 2016 09:32:32 +0200 Subject: [PATCH 005/175] fix live announcement --- app/coffee/modules/events.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/events.coffee b/app/coffee/modules/events.coffee index d43eb12f..e492fb36 100644 --- a/app/coffee/modules/events.coffee +++ b/app/coffee/modules/events.coffee @@ -204,7 +204,6 @@ class EventsService onOpen: -> @.connected = true @.startHeartBeatMessages() - @.notifications() @log.debug("WebSocket connection opened") token = @auth.getToken() @@ -215,6 +214,7 @@ class EventsService } @.sendMessage(message) + @.notifications() onMessage: (event) -> @.log.debug "WebSocket message received: #{event.data}" From dc31a883d03f01a0e94a6daaf0d75be10dd333a7 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 3 Oct 2016 10:07:59 +0200 Subject: [PATCH 006/175] align left issues popovers --- app/styles/dependencies/mixins/popover.scss | 5 +++-- app/styles/modules/common/ticket-data.scss | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/styles/dependencies/mixins/popover.scss b/app/styles/dependencies/mixins/popover.scss index 595896a7..175d1bb1 100644 --- a/app/styles/dependencies/mixins/popover.scss +++ b/app/styles/dependencies/mixins/popover.scss @@ -8,7 +8,8 @@ $arrow-top: '', $arrow-left: '', $arrow-bottom: '', - $arrow-height: 15px + $arrow-height: 15px, + $align: 'center' ) { @include font-type(light); @include font-size(small); @@ -25,7 +26,7 @@ top: #{$top}; width: $width; z-index: 99; - text-align: center; + text-align: $align; a { @include font-size(small); border-bottom: 1px solid $grayer; diff --git a/app/styles/modules/common/ticket-data.scss b/app/styles/modules/common/ticket-data.scss index edcdeea1..e1564075 100644 --- a/app/styles/modules/common/ticket-data.scss +++ b/app/styles/modules/common/ticket-data.scss @@ -84,7 +84,7 @@ position: relative; transition: background .2s ease-in; .pop-type { - @include popover(150px, '', 30px, '', ''); + @include popover(150px, 30px, 30px, '', '', 0, '', '', '', 15px, 'left'); } } .severity-data { @@ -95,7 +95,7 @@ position: relative; transition: background .2s ease-in; .pop-severity { - @include popover(150px, '', 30px, '', ''); + @include popover(150px, 30px, 30px, '', '', 0, '', '', '', 15px, 'left'); } } .priority-data { @@ -106,7 +106,7 @@ position: relative; transition: background .2s ease-in; .pop-priority { - @include popover(150px, '', 30px, '', ''); + @include popover(150px, 30px, 30px, '', '', 0, '', '', '', 15px, 'left'); } } } From 557c079c1164a032a9914fb6f4803444a8f1134f Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 3 Oct 2016 10:50:19 +0200 Subject: [PATCH 007/175] fix #4584 - hide filter warning with less than 5 users in assign to --- app/coffee/modules/common/lightboxes.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index a012d064..2b42ce89 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -601,7 +601,7 @@ AssignedToLightboxDirective = (lightboxService, lightboxKeyboardNavigationServic ctx = { selected: selected users: _.slice(users, 0, 5) - showMore: visibleUsers + showMore: users.length > 5 } html = usersTemplate(ctx) From d3265dcb34bf90c4c6480f599780063992a07adc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Mon, 3 Oct 2016 11:04:02 +0200 Subject: [PATCH 008/175] Add breakpoint for small screens in US statuses --- app/locales/taiga/locale-en.json | 3 ++- .../modules/admin/project-us-status.jade | 2 +- app/styles/dependencies/responsive.scss | 2 +- app/styles/modules/common/colors-table.scss | 16 ++++++++++++++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 99a17c12..cd470d0d 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -755,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Add new status", - "IS_ARCHIVED_COLUMN": "Is archived?", + "IS_ARCHIVED_COLUMN": "Archived", + "IS_CLOSED_COLUMN": "Closed", "WIP_LIMIT_COLUMN": "WIP Limit", "PLACEHOLDER_WRITE_NAME": "Write a name for the new status" }, diff --git a/app/partials/includes/modules/admin/project-us-status.jade b/app/partials/includes/modules/admin/project-us-status.jade index 684e817d..62445f7a 100644 --- a/app/partials/includes/modules/admin/project-us-status.jade +++ b/app/partials/includes/modules/admin/project-us-status.jade @@ -11,7 +11,7 @@ section.project-us-status div.color-column(translate="COMMON.FIELDS.COLOR") div.status-name(translate="COMMON.FIELDS.NAME") div.status-slug(translate="COMMON.FIELDS.SLUG") - div.is-closed-column(translate="COMMON.FIELDS.IS_CLOSED") + div.is-closed-column(translate="ADMIN.US_STATUS.IS_CLOSED_COLUMN") div.is-archived-column(translate="ADMIN.US_STATUS.IS_ARCHIVED_COLUMN") div.status-wip-limit(translate="ADMIN.US_STATUS.WIP_LIMIT_COLUMN") div.options-column diff --git a/app/styles/dependencies/responsive.scss b/app/styles/dependencies/responsive.scss index 3d4f8457..b88606cb 100644 --- a/app/styles/dependencies/responsive.scss +++ b/app/styles/dependencies/responsive.scss @@ -1,6 +1,6 @@ @mixin breakpoint($point) { @if $point == desktop { - @media (min-width: 1200px) { @content ; } + @media (min-width: 1400px) { @content ; } } @else if $point == laptop { @media (max-width: 1280px) { @content ; } diff --git a/app/styles/modules/common/colors-table.scss b/app/styles/modules/common/colors-table.scss index fabf7df4..902fa371 100644 --- a/app/styles/modules/common/colors-table.scss +++ b/app/styles/modules/common/colors-table.scss @@ -79,9 +79,16 @@ flex-basis: 100px; } .status-slug { + display: none; flex-basis: 150px; flex-grow: 6; padding: 0 10px; + @include breakpoint(desktop) { + display: block; + } + span { + @include ellipsis(100%); + } } .options-column { max-width: 100px; @@ -94,13 +101,17 @@ text-align: center; } .is-closed-column { - max-width: 130px; + max-width: 100px; text-align: center; } .status-wip-limit { - max-width: 130px; + display: none; + max-width: 100px; padding: 0 0 0 10px; text-align: center; + @include breakpoint(desktop) { + display: block; + } } } @@ -163,4 +174,5 @@ visibility: hidden; } } + } From b92d64ffe9432ecdec2d1e40175911243582bc55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Mon, 3 Oct 2016 11:51:36 +0200 Subject: [PATCH 009/175] Align taskboard options --- app/styles/layout/kanban.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/styles/layout/kanban.scss b/app/styles/layout/kanban.scss index 11a7ea77..dca0852f 100644 --- a/app/styles/layout/kanban.scss +++ b/app/styles/layout/kanban.scss @@ -24,3 +24,8 @@ display: flex; } } + +.taskboard-actions { + align-items: center; + display: flex; +} From 603c81a981c1ff4f8417902585f5c3eafa78b845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 3 Oct 2016 12:52:01 +0200 Subject: [PATCH 010/175] Fix mentions in coments --- app/coffee/modules/common/wisiwyg.coffee | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/coffee/modules/common/wisiwyg.coffee b/app/coffee/modules/common/wisiwyg.coffee index ee143b59..a889042b 100644 --- a/app/coffee/modules/common/wisiwyg.coffee +++ b/app/coffee/modules/common/wisiwyg.coffee @@ -58,10 +58,14 @@ module = angular.module("taigaCommon") ############################################################################# ## WYSIWYG markitup editor directive ############################################################################# -MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $translate) -> +MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $translate, projectService) -> previewTemplate = $template.get("common/wysiwyg/wysiwyg-markitup-preview.html", true) link = ($scope, $el, $attrs, $model) -> + if not $scope.project + # for backward compatibility + $scope.project = projectService.project.toJS() + element = angular.element($el) previewDomNode = $("
", {class: "preview"}) @@ -83,7 +87,7 @@ MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $trans markdownDomNode = element.parents(".markdown") markItUpDomNode = element.parents(".markItUp") - $rs.mdrender.render($scope.projectId || $scope.vm.projectId, $model.$modelValue).then (data) -> + $rs.mdrender.render($scope.project.id, $model.$modelValue).then (data) -> html = previewTemplate({data: data.data}) html = $compile(html)($scope) @@ -384,7 +388,7 @@ MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $trans return false cancelablePromise.abort() if cancelablePromise - cancelablePromise = $rs.search.do($scope.projectId || $scope.vm.projectId, term) + cancelablePromise = $rs.search.do($scope.project.id, term) cancelablePromise.then (res) => # ignore wikipages if they're the only results. can't exclude them in search @@ -440,7 +444,7 @@ MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $trans search: (term, callback) -> term = taiga.slugify(term) - $rs.search.do($scope.projectId || $scope.vm.projectId, term).then (res) => + $rs.search.do($scope.project.id, term).then (res) => if res.count < 1 callback([]) @@ -482,4 +486,4 @@ MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $trans return {link:link, require:"ngModel"} module.directive("tgMarkitup", ["$rootScope", "$tgResources", "$selectedText", "$tgTemplate", "$compile", - "$translate", MarkitupDirective]) + "$translate", "tgProjectService", MarkitupDirective]) From 435a001363d8b1570332f3cec678b1beea88e376 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 4 Oct 2016 08:21:17 +0200 Subject: [PATCH 011/175] sort tags list by lowercase name --- app/coffee/modules/admin/project-values.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index a00d4710..9d0413aa 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -730,8 +730,10 @@ class ProjectTagsController extends taiga.Controller @.loading = false filterAndSortTags: => + @scope.projectTags = _.sortBy @scope.projectTagsAll, (it) -> it.name.toLowerCase() + @scope.projectTags = _.filter( - _.sortBy(@scope.projectTagsAll, "name"), + @scope.projectTags, (tag) => tag.name.indexOf(@scope.tagsFilter.name) != -1 ) From 2f645a7b1d3d85785f32bb33e934e897a6d982a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 4 Oct 2016 10:48:54 +0200 Subject: [PATCH 012/175] Change Delete to Unlink --- app/locales/taiga/locale-ca.json | 4 +- app/locales/taiga/locale-de.json | 4 +- app/locales/taiga/locale-en.json | 1 + app/locales/taiga/locale-es.json | 66 ++++---- app/locales/taiga/locale-fi.json | 2 + app/locales/taiga/locale-fr.json | 44 ++--- app/locales/taiga/locale-it.json | 4 +- app/locales/taiga/locale-nb.json | 4 +- app/locales/taiga/locale-nl.json | 4 +- app/locales/taiga/locale-pl.json | 82 ++++----- app/locales/taiga/locale-pt-br.json | 4 +- app/locales/taiga/locale-ru.json | 4 +- app/locales/taiga/locale-sv.json | 156 +++++++++--------- app/locales/taiga/locale-tr.json | 4 +- app/locales/taiga/locale-zh-hant.json | 4 +- .../related-userstory-row.jade | 2 +- 16 files changed, 209 insertions(+), 180 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index faa9bfb7..029d9984 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -11,6 +11,7 @@ "CANCEL": "Següent", "ACCEPT": "Acceptar", "DELETE": "Esborrar", + "UNLINK": "Unlink", "CREATE": "Crear", "ADD": "Afegir", "COPY_TO_CLIPBOARD": "Copia al portapapers: Ctrl + C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Afegeix un estat nou", - "IS_ARCHIVED_COLUMN": "Es arxivat?", + "IS_ARCHIVED_COLUMN": "Archived", + "IS_CLOSED_COLUMN": "Tancat", "WIP_LIMIT_COLUMN": "Limit WIP", "PLACEHOLDER_WRITE_NAME": "Escriviu un nom per al nou estat" }, diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index aef79320..00606711 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -11,6 +11,7 @@ "CANCEL": "Abbrechen", "ACCEPT": "Akzeptieren", "DELETE": "Löschen", + "UNLINK": "Unlink", "CREATE": "Erzeugen", "ADD": "Hinzufügen", "COPY_TO_CLIPBOARD": "Ins Clipboard übernehmen: Strg+C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Neuen Status hinzufügen", - "IS_ARCHIVED_COLUMN": "Wurde es archiviert?", + "IS_ARCHIVED_COLUMN": "Archiviert", + "IS_CLOSED_COLUMN": "Geschlossen", "WIP_LIMIT_COLUMN": "WIP Limit", "PLACEHOLDER_WRITE_NAME": "Benennen Sie den neuen Status" }, diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index cd470d0d..21802fc4 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -11,6 +11,7 @@ "CANCEL": "Cancel", "ACCEPT": "Accept", "DELETE": "Delete", + "UNLINK": "Unlink", "CREATE": "Create", "ADD": "Add", "COPY_TO_CLIPBOARD": "Copy to clipboard: Ctrl+C", diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index b142068e..aa3b7e19 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -11,6 +11,7 @@ "CANCEL": "Cancelar", "ACCEPT": "Aceptar", "DELETE": "Borrar", + "UNLINK": "Unlink", "CREATE": "Crear", "ADD": "Añadir", "COPY_TO_CLIPBOARD": "Copiar en el portapapeles: Ctrl+C", @@ -49,8 +50,8 @@ "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Recuerde que si cierra el modo de edicion sin guardar todos los cambios se perderán", "RELATED_USERSTORIES": "Related user stories", "CARD": { - "ASSIGN_TO": "Assign To", - "EDIT": "Edit card" + "ASSIGN_TO": "Asignado a", + "EDIT": "Editar tarjeta" }, "FORM_ERRORS": { "DEFAULT_MESSAGE": "Este valor parece inválido.", @@ -122,9 +123,9 @@ "USER_STORY": "Historia de usuario", "TASK": "Tarea", "ISSUE": "Petición", - "EPIC": "Epic", + "EPIC": "Épica", "TAGS": { - "PLACEHOLDER": "Enter tag", + "PLACEHOLDER": "Introducir etiqueta", "DELETE": "Borrar etiqueta", "ADD": "Añadir etiqueta" }, @@ -208,7 +209,7 @@ "TITLE_ACTION_SEARCH": "Buscar", "ACTION_SAVE_CUSTOM_FILTER": "guardar como filtro personalizado", "PLACEHOLDER_FILTER_NAME": "Escribe un nombre para el filtro y pulsa enter", - "APPLIED_FILTERS_NUM": "filters applied", + "APPLIED_FILTERS_NUM": "filtros usados", "CATEGORIES": { "TYPE": "Tipo", "STATUS": "Estado", @@ -218,7 +219,7 @@ "ASSIGNED_TO": "Asignado a", "CREATED_BY": "Creada por", "CUSTOM_FILTERS": "Filtros personalizados", - "EPIC": "Epic" + "EPIC": "Épica" }, "CONFIRM_DELETE": { "TITLE": "Eliminar filtros personalizados", @@ -259,11 +260,11 @@ "PERMISIONS_CATEGORIES": { "EPICS": { "NAME": "Épicas", - "VIEW_EPICS": "View epics", - "ADD_EPICS": "Add epics", - "MODIFY_EPICS": "Modify epics", - "COMMENT_EPICS": "Comment epics", - "DELETE_EPICS": "Delete epics" + "VIEW_EPICS": "Ver épica", + "ADD_EPICS": "Añadir épica", + "MODIFY_EPICS": "Modificar épica", + "COMMENT_EPICS": "Comentar épica", + "DELETE_EPICS": "Borrar épica" }, "SPRINTS": { "NAME": "Sprints", @@ -423,19 +424,19 @@ "NAME": "Nombre", "PROJECT": "Proyecto", "SPRINT": "Sprint", - "ASSIGNED_TO": "Assigned", + "ASSIGNED_TO": "Asignado", "STATUS": "Estado", - "PROGRESS": "Progress", - "VIEW_OPTIONS": "View options" + "PROGRESS": "En curso", + "VIEW_OPTIONS": "Ver opciones" }, "CREATE": { "TITLE": "Nueva Épica", - "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", - "TEAM_REQUIREMENT": "Team requirement", - "CLIENT_REQUIREMENT": "Client requirement", + "PLACEHOLDER_DESCRIPTION": "Por favor añade un texto descriptivo para ayudar a otros usuarios a entender mejor esta historia.", + "TEAM_REQUIREMENT": "Requerido por el equipo", + "CLIENT_REQUIREMENT": "Requerido por el Cliente", "BLOCKED": "Bloqueada", "BLOCKED_NOTE_PLACEHOLDER": "Why is this epic blocked?", - "CREATE_EPIC": "Create epic" + "CREATE_EPIC": "Crear épica" } }, "PROJECTS": { @@ -585,8 +586,8 @@ "CUSTOM_FIELDS": { "TITLE": "Atributos personalizados", "SUBTITLE": "Especifica los atributos personalizados para las historias de usuario, tareas y peticiones", - "EPIC_DESCRIPTION": "Epics custom fields", - "EPIC_ADD": "Add a custom field in epics", + "EPIC_DESCRIPTION": "Campos personalizados para épicas", + "EPIC_ADD": "Añadir campos personalizados en épicas", "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", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Añadir nuevo estado", - "IS_ARCHIVED_COLUMN": "¿Archivar?", + "IS_ARCHIVED_COLUMN": "Archivada", + "IS_CLOSED_COLUMN": "Cerrada", "WIP_LIMIT_COLUMN": "Límite WIP", "PLACEHOLDER_WRITE_NAME": "Escribe un nombre para el nuevo estado" }, @@ -848,7 +850,7 @@ "FILTER_TYPE_PROJECTS": "Proyectos", "FILTER_TYPE_PROJECT_TITLES": "Mostrar sólo proyectos", "FILTER_TYPE_EPICS": "Épicas", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPIC_TITLES": "Mostrar sólo épicas", "FILTER_TYPE_USER_STORIES": "Historias", "FILTER_TYPE_USER_STORIES_TITLES": "Mostrar sólo historias de usuario", "FILTER_TYPE_TASKS": "Tareas", @@ -1070,18 +1072,18 @@ }, "EPIC": { "PAGE_TITLE": "{{epicSubject}} - Épica {{epicRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", - "SECTION_NAME": "Epic", + "PAGE_DESCRIPTION": "Estado: {{taskStatus}}. Descripción: {{taskDescription}}", + "SECTION_NAME": "Épica", "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", - "CREATE_RELATED_USERSTORIES": "Create a relationship with", + "CREATE_RELATED_USERSTORIES": "Crear relación con", "NEW_USERSTORY": "Nueva historia de usuario", - "EXISTING_USERSTORY": "Existing user story", - "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", + "EXISTING_USERSTORY": "Historia de usuario existente", + "CHOOSE_PROJECT_FOR_CREATION": "¿Qué es el proyecto?", "SUBJECT": "Asunto", "SUBJECT_BULK_MODE": "Subject (bulk insert)", - "CHOOSE_PROJECT_FROM": "What's the project?", + "CHOOSE_PROJECT_FROM": "¿Qué es el proyecto?", "CHOOSE_USERSTORY": "What's the user story?", "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", "FILTER_USERSTORIES": "Filter user stories", @@ -1258,7 +1260,7 @@ "IOCAINE_DOSES": "dosis de
iocaína", "SHOW_STATISTICS_TITLE": "Ver estadísticas", "TOGGLE_BAKLOG_GRAPH": "Ver/Ocultar gráfica de burndown", - "POINTS_PER_ROLE": "Points per role" + "POINTS_PER_ROLE": "Puntos por rol" }, "SUMMARY": { "PROJECT_POINTS": "puntos
proyecto", @@ -1539,9 +1541,9 @@ "DELETE_LINK_TITLE": "Eliminar enlace de la Wiki", "NAVIGATION": { "HOME": "Principal", - "SECTION_NAME": "BOOKMARKS", - "ACTION_ADD_LINK": "Add bookmark", - "ALL_PAGES": "All wiki pages" + "SECTION_NAME": "MARCADORES", + "ACTION_ADD_LINK": "Añadir marcador", + "ALL_PAGES": "Todas las páginas de la wiki" }, "SUMMARY": { "TIMES_EDITED": "veces
editada", diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index a933a9b0..0934d020 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -11,6 +11,7 @@ "CANCEL": "Peru", "ACCEPT": "Hyväksy", "DELETE": "Poista", + "UNLINK": "Unlink", "CREATE": "Luo uusi", "ADD": "Lisää", "COPY_TO_CLIPBOARD": "Kopio leikekirjalle: Ctrl+C", @@ -755,6 +756,7 @@ "US_STATUS": { "ACTION_ADD_STATUS": "Lisää uusi tila", "IS_ARCHIVED_COLUMN": "Arkistoitu", + "IS_CLOSED_COLUMN": "Suljettu", "WIP_LIMIT_COLUMN": "WIP raja", "PLACEHOLDER_WRITE_NAME": "Anna uuden tilan nimi" }, diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 175404bd..9faec574 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -11,6 +11,7 @@ "CANCEL": "Annuler", "ACCEPT": "Accepter", "DELETE": "Supprimer", + "UNLINK": "Unlink", "CREATE": "Créer", "ADD": "Ajouter", "COPY_TO_CLIPBOARD": "Copier dans le presse-papier : Ctrl+C", @@ -41,8 +42,8 @@ "EXTERNAL_USER": "un utilisateur externe", "GENERIC_ERROR": "L'un de nos Oompa Loompas dit {{error}}.", "IOCAINE_TEXT": "Vous vous sentez un peu submergé(e) par une tâche ? Soyez certains d'en informer les autres en cliquant sur 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 !", - "CLIENT_REQUIREMENT": "Un besoin client est un nouveau besoin qui n'était pas prévu et qu'il est nécessaire d'intégrer au projet", - "TEAM_REQUIREMENT": "Un besoin projet est un besoin qui est nécessaire au projet mais qui ne doit avoir aucun impact pour le client", + "CLIENT_REQUIREMENT": "Une exigence client est une nouvelle exigence exprimée par le client, qui n'était pas prévue dans le projet initial, et qu'il est nécessaire d'intégrer", + "TEAM_REQUIREMENT": "Une exigence équipe est une exigence exprimée par l'équipe qui doit être rajoutée au projet, sans que cela n'ait d'impact pour le client", "OWNER": "Propriétaire du Projet", "CAPSLOCK_WARNING": "Attention ! Vous utilisez des majuscules dans un champ qui est sensible à la casse.", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Êtes-vous sûr de vouloir fermer le mode Édition ?", @@ -407,14 +408,14 @@ "TITLE": "ÉPOPÉES", "SECTION_NAME": "Épopées", "EPIC": "ÉPOPÉE", - "PAGE_TITLE": "Epics - {{projectName}}", - "PAGE_DESCRIPTION": "The epics list of the project {{projectName}}: {{projectDescription}}", + "PAGE_TITLE": "Épopées - {{projectName}}", + "PAGE_DESCRIPTION": "Liste des épopées du projet {{projectName}}: {{projectDescription}}", "DASHBOARD": { "ADD": "+ AJOUTER ÉPOPÉE", "UNASSIGNED": "Non affecté" }, "EMPTY": { - "TITLE": "It looks like there aren't any epics yet", + "TITLE": "Il semble n'y avoir aucune épopée pour l'instant", "EXPLANATION": "Epics are items at a higher level that encompass user stories.
Epics are at the top of the hierarchy and can be used to group user stories together.", "HELP": "En savoir plus sur les épopées" }, @@ -431,8 +432,8 @@ "CREATE": { "TITLE": "Nouvelle épopée", "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", - "TEAM_REQUIREMENT": "Besoin projet", - "CLIENT_REQUIREMENT": "Besoin client", + "TEAM_REQUIREMENT": "Exigence équipe", + "CLIENT_REQUIREMENT": "Exigence client", "BLOCKED": "Bloqué", "BLOCKED_NOTE_PLACEHOLDER": "Pourquoi cette épopée est-elle bloquée ?", "CREATE_EPIC": "Créer une épopée" @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Ajouter un nouveau status", - "IS_ARCHIVED_COLUMN": "Est archivé ?", + "IS_ARCHIVED_COLUMN": "Archivé", + "IS_CLOSED_COLUMN": "Fermé", "WIP_LIMIT_COLUMN": "Limite de Work In Progress", "PLACEHOLDER_WRITE_NAME": "Donnez un nom au nouvel état" }, @@ -1069,7 +1071,7 @@ } }, "EPIC": { - "PAGE_TITLE": "{{epicSubject}} - Epic {{epicRef}} - {{projectName}}", + "PAGE_TITLE": "{{epicSubject}} - Épopée {{epicRef}} - {{projectName}}", "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", "SECTION_NAME": "Épopée", "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", @@ -1120,8 +1122,8 @@ "PUBLISH_MORE_INFO_TEXT": "

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

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

" }, "FIELDS": { - "TEAM_REQUIREMENT": "Besoin projet", - "CLIENT_REQUIREMENT": "Besoin client", + "TEAM_REQUIREMENT": "Exigence équipe", + "CLIENT_REQUIREMENT": "Exigence client", "FINISH_DATE": "Date de fin" } }, @@ -1164,8 +1166,8 @@ "SIZE_CHANGE": "A fait {size, plural, one{une modification} other{# modifications}}", "BECAME_DEPRECATED": "devenu obsolète", "BECAME_UNDEPRECATED": "n'est plus obsolète", - "TEAM_REQUIREMENT": "Besoin projet", - "CLIENT_REQUIREMENT": "Besoin client", + "TEAM_REQUIREMENT": "Exigence équipe", + "CLIENT_REQUIREMENT": "Exigence client", "BLOCKED": "Bloqué", "VALUES": { "YES": "oui", @@ -1192,8 +1194,8 @@ "IS_BLOCKED": "est bloqué", "BLOCKED_NOTE": "note bloquée", "POINTS": "points", - "CLIENT_REQUIREMENT": "besoin client", - "TEAM_REQUIREMENT": "besoin projet", + "CLIENT_REQUIREMENT": "exigence client", + "TEAM_REQUIREMENT": "exigence équipe", "IS_IOCAINE": "est sous iocaine", "TAGS": "mots-clés", "ATTACHMENTS": "pièces jointes", @@ -1238,8 +1240,8 @@ "YAXIS_LABEL": "Points", "OPTIMAL": "Le nombre optimal de points pour le sprint \"{{sprintName}}\" devrait être {{value}}", "REAL": "Le nombre réel de points pour le sprint \"{{sprintName}}\" est {{value}}", - "INCREMENT_TEAM": "Le nombre de points ajoutés par les besoins projet pour le sprint \"{{sprintName}}\" est {{value}}", - "INCREMENT_CLIENT": "Le nombre de points ajoutés par les besoins client pour le sprint \"{{sprintName}}\" est {{value}}" + "INCREMENT_TEAM": "Le nombre de points ajoutés par les exigences équipe pour le sprint \"{{sprintName}}\" est {{value}}", + "INCREMENT_CLIENT": "Le nombre de points ajoutés par les exigences client pour le sprint \"{{sprintName}}\" est {{value}}" }, "TAGS": { "TOGGLE": "Afficher/Cacher les mots-clés", @@ -1431,7 +1433,7 @@ "ARCHIVED": "Vous avez archivé", "UNDO_ARCHIVED": "Refaites glisser pour annuler", "PLACEHOLDER_CARD_TITLE": "Ce sont vos récits utilisateurs", - "PLACEHOLDER_CARD_TEXT": "Les récits peuvent avoir des sous-tâches pour séparer les besoins" + "PLACEHOLDER_CARD_TEXT": "Les récits peuvent avoir des sous-tâches pour séparer les exigences" }, "SEARCH": { "PAGE_TITLE": "Chercher - {{projectName}}", @@ -1654,7 +1656,7 @@ }, "STEP2": { "TITLE": "Backlog du produit", - "TEXT": "Le backlog est la liste des besoins (récits utilisateur) pour le projet. C'est ici que vous préparerez vos sprints." + "TEXT": "Le backlog est la liste des exigences (récits utilisateur) pour le projet. C'est ici que vous préparerez vos sprints." }, "STEP3": { "TITLE": "Sprints", @@ -1662,7 +1664,7 @@ }, "STEP4": { "TITLE": "Récits utilisateur", - "TEXT": "Ce sont les besoins de niveau élevé. Vous pouvez les ajouter au backlog et les glisser dans le sprint pour lequel elle devront être livrées." + "TEXT": "Ce sont les exigences du projet de niveau élevé. Vous pouvez les ajouter au backlog et les glisser dans le sprint pour lequel elles devront être livrées." } }, "KANBAN": { @@ -1672,7 +1674,7 @@ }, "STEP2": { "TITLE": "Récits utilisateur & Tâches", - "TEXT": "Les récits utilisateur sont les besoins de niveau élevé. Vous pouvez les déplacer dans différentes colonnes." + "TEXT": "Les récits utilisateur sont les exigences du projet de niveau élevé. Vous pouvez les déplacer dans différentes colonnes." }, "STEP3": { "TITLE": "Ajout de récits utilisateur", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index f8d9b1d1..34eb2d2e 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -11,6 +11,7 @@ "CANCEL": "Annulla", "ACCEPT": "Accetta", "DELETE": "Elimina", + "UNLINK": "Unlink", "CREATE": "Crea", "ADD": "Aggiungi", "COPY_TO_CLIPBOARD": "Copia nella clipboard: Ctrl+C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Aggiungi un nuovo status", - "IS_ARCHIVED_COLUMN": "È archiviato?", + "IS_ARCHIVED_COLUMN": "Archiviato", + "IS_CLOSED_COLUMN": "Concluso", "WIP_LIMIT_COLUMN": "Limite WIP", "PLACEHOLDER_WRITE_NAME": "Scrivi un nome per il nuovo status" }, diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 4e9bad0e..c87cd24b 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -11,6 +11,7 @@ "CANCEL": "Avbryt", "ACCEPT": "Aksepter", "DELETE": "Slett", + "UNLINK": "Unlink", "CREATE": "Opprett", "ADD": "Legg til", "COPY_TO_CLIPBOARD": "Kopier til utklippstavlen: Ctrl+C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Legg til ny status", - "IS_ARCHIVED_COLUMN": "Er arkivert?", + "IS_ARCHIVED_COLUMN": "Arkivert", + "IS_CLOSED_COLUMN": "Lukket", "WIP_LIMIT_COLUMN": "WIP Grense", "PLACEHOLDER_WRITE_NAME": "Skriv et navn til den nye statusen" }, diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index b6484a18..69990405 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -11,6 +11,7 @@ "CANCEL": "Annuleren", "ACCEPT": "Accepteren", "DELETE": "Verwijder", + "UNLINK": "Unlink", "CREATE": "Aanmaken", "ADD": "Toevoegen", "COPY_TO_CLIPBOARD": "Kopieër naar klembord: Ctrl+C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Nieuwe status toevoegen", - "IS_ARCHIVED_COLUMN": "Is gearchiveerd?", + "IS_ARCHIVED_COLUMN": "Gearchiveerd", + "IS_CLOSED_COLUMN": "Gesloten", "WIP_LIMIT_COLUMN": "WIP limiet", "PLACEHOLDER_WRITE_NAME": "Schrijf een naam voor de nieuwe status" }, diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index a4f7c8d9..46de1f6e 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -11,6 +11,7 @@ "CANCEL": "Anuluj", "ACCEPT": "Akceptuj", "DELETE": "Usuń", + "UNLINK": "Unlink", "CREATE": "Stwórz", "ADD": "Dodaj", "COPY_TO_CLIPBOARD": "Skopiuj do schowka: Ctrl+C", @@ -47,9 +48,9 @@ "CAPSLOCK_WARNING": "Be careful! You are using capital letters in an input field that is case sensitive.", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Are you sure you want to close the edit mode?", "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Remember that if you close the edit mode without saving all the changes will be lost", - "RELATED_USERSTORIES": "Related user stories", + "RELATED_USERSTORIES": "Powiązane historyjki użytkownika", "CARD": { - "ASSIGN_TO": "Assign To", + "ASSIGN_TO": "Przypisz Do", "EDIT": "Edit card" }, "FORM_ERRORS": { @@ -258,7 +259,7 @@ }, "PERMISIONS_CATEGORIES": { "EPICS": { - "NAME": "Epics", + "NAME": "Epiki", "VIEW_EPICS": "View epics", "ADD_EPICS": "Add epics", "MODIFY_EPICS": "Modify epics", @@ -405,7 +406,7 @@ }, "EPICS": { "TITLE": "EPIKI", - "SECTION_NAME": "Epics", + "SECTION_NAME": "Epiki", "EPIC": "EPIK", "PAGE_TITLE": "Epics - {{projectName}}", "PAGE_DESCRIPTION": "The epics list of the project {{projectName}}: {{projectDescription}}", @@ -423,16 +424,16 @@ "NAME": "Nazwa", "PROJECT": "Projekt", "SPRINT": "Sprint", - "ASSIGNED_TO": "Assigned", + "ASSIGNED_TO": "Przydzielone", "STATUS": "Statusy", - "PROGRESS": "Progress", + "PROGRESS": "Postęp", "VIEW_OPTIONS": "View options" }, "CREATE": { "TITLE": "Nowy epik", "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", "TEAM_REQUIREMENT": "Wymaganie zespołu", - "CLIENT_REQUIREMENT": "Client requirement", + "CLIENT_REQUIREMENT": "Wymaganie klienta", "BLOCKED": "Zablokowane", "BLOCKED_NOTE_PLACEHOLDER": "Why is this epic blocked?", "CREATE_EPIC": "Create epic" @@ -508,7 +509,7 @@ "TITLE": "Moduły", "ENABLE": "Włącz", "DISABLE": "Wyłącz", - "EPICS": "Epics", + "EPICS": "Epiki", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Dziennik", "BACKLOG_DESCRIPTION": "Zarządzaj swoimi historyjkami użytkownika aby utrzymać zorganizowany widok i priorytety zadań", @@ -558,8 +559,8 @@ "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "Do you want to become the new project owner?", "REQUEST_OWNERSHIP_DESC": "Request that current project owner {{name}} transfer ownership of this project to you.", "REQUEST_OWNERSHIP_BUTTON": "Żądanie", - "REQUEST_OWNERSHIP_SUCCESS": "We'll notify the project owner", - "CHANGE_OWNER": "Change owner", + "REQUEST_OWNERSHIP_SUCCESS": "Powiadomimy właściciela projektu", + "CHANGE_OWNER": "Zmień właściciela", "CHANGE_OWNER_SUCCESS_TITLE": "Ok, your request has been sent!", "CHANGE_OWNER_SUCCESS_DESC": "We will notify you by email if the project ownership request is accepted or declined" }, @@ -729,7 +730,7 @@ "STATUS_ACTIVE": "Aktywny", "STATUS_PENDING": "Nieaktywny", "DELETE_MEMBER": "Usuń członka", - "RESEND": "Resend", + "RESEND": "Wyślij ponownie", "SUCCESS_SEND_INVITATION": "Ponownie wysłano zaproszenie do '{{e-mail}}'.", "ERROR_SEND_INVITATION": "Zaproszenie nie zostało wysłane.", "SUCCESS_DELETE": "Usunięto {{message}}.", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Dodaj nowy status", - "IS_ARCHIVED_COLUMN": "Zarchiwizowana?", + "IS_ARCHIVED_COLUMN": "Zarchiwizowane", + "IS_CLOSED_COLUMN": "Zamknięte", "WIP_LIMIT_COLUMN": "WIP Limit", "PLACEHOLDER_WRITE_NAME": "Wpisz nazwę nowego statusu" }, @@ -847,7 +849,7 @@ "FILTER_TYPE_ALL_TITLE": "Show all", "FILTER_TYPE_PROJECTS": "Projekty", "FILTER_TYPE_PROJECT_TITLES": "Show only projects", - "FILTER_TYPE_EPICS": "Epics", + "FILTER_TYPE_EPICS": "Epiki", "FILTER_TYPE_EPIC_TITLES": "Show only epics", "FILTER_TYPE_USER_STORIES": "Stories", "FILTER_TYPE_USER_STORIES_TITLES": "Show only user stories", @@ -1075,7 +1077,7 @@ "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", - "CREATE_RELATED_USERSTORIES": "Create a relationship with", + "CREATE_RELATED_USERSTORIES": "Stwórz relację z", "NEW_USERSTORY": "Nowa historyjka użytkownika", "EXISTING_USERSTORY": "Existing user story", "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", @@ -1114,9 +1116,9 @@ "PUBLISH_TITLE": "More info on publishing in Taiga Tribe", "PUBLISHED_AS_GIG": "Story published as Gig in Taiga Tribe", "EDIT_LINK": "Edit link", - "CLOSE": "Close", - "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", - "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", + "CLOSE": "Zamknij", + "SYNCHRONIZE_LINK": "synchronizuj z Taiga Tribe", + "PUBLISH_MORE_INFO_TITLE": "Potrzebujesz kogoś do tego zadania?", "PUBLISH_MORE_INFO_TEXT": "

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

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

" }, "FIELDS": { @@ -1130,7 +1132,7 @@ "TITLE": "Komentarze", "COMMENTS_COUNT": "{{comments}} Comments", "ORDER": "Order", - "OLDER_FIRST": "Older first", + "OLDER_FIRST": "Starsze najpierw", "RECENT_FIRST": "Ostatnie najpierw", "COMMENT": "Komentarz", "EDIT_COMMENT": "Edytuj komentarz", @@ -1150,7 +1152,7 @@ "DATETIME": "DD MMM YYYY HH:mm", "SHOW_MORE": "+ Pokaż poprzednie wpisy ({{showMore}} więcej)", "TITLE": "Aktywność", - "ACTIVITIES_COUNT": "{{activities}} Activities", + "ACTIVITIES_COUNT": "{{activities}} Aktywności", "REMOVED": "usunięty", "ADDED": "dodany", "TAGS_ADDED": "dodano klucz", @@ -1430,13 +1432,13 @@ "HIDDEN_USER_STORIES": "Historyjki użytkownika o tym statusie są domyślnie ukryte", "ARCHIVED": "Zarchiwizowano", "UNDO_ARCHIVED": "Przeciągnij i upuść ponownie aby cofnąć", - "PLACEHOLDER_CARD_TITLE": "These are your User Stories", + "PLACEHOLDER_CARD_TITLE": "To są Twoje Historyjki Użytkownika", "PLACEHOLDER_CARD_TEXT": "Stories might also have subtasks to separate requirements" }, "SEARCH": { "PAGE_TITLE": "Szukaj - {{projectName}}", "PAGE_DESCRIPTION": "Możesz przeszukiwać wszystko, historyjki użytkownika, zgłoszenia, zadania oraz strony Wiki w projekcie {{projectName}}: {{projectDescription}}", - "FILTER_EPICS": "Epics", + "FILTER_EPICS": "Epiki", "FILTER_USER_STORIES": "Historyjki użytkownika", "FILTER_ISSUES": "Zgłoszenia", "FILTER_TASKS": "Zadania", @@ -1525,8 +1527,8 @@ "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", "CREATE_PROJECT": "Utwórz projekt", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "MAX_PRIVATE_PROJECTS": "Osiągnąłeś maksymalną liczbę prywatnych projektów", + "MAX_PUBLIC_PROJECTS": "Niestety osiągnąłeś maksymalną liczbę publicznych projektów", "CHANGE_PLANS": "change plans" }, "WIKI": { @@ -1536,11 +1538,11 @@ "PLACEHOLDER_PAGE": "Napisz swoje Wiki", "REMOVE": "Usuń tą stronę Wiki", "DELETE_LIGHTBOX_TITLE": "Usuń tą stronę Wiki", - "DELETE_LINK_TITLE": "Delete Wiki link", + "DELETE_LINK_TITLE": "Usuń link Wiki", "NAVIGATION": { - "HOME": "Main Page", - "SECTION_NAME": "BOOKMARKS", - "ACTION_ADD_LINK": "Add bookmark", + "HOME": "Strona Główna", + "SECTION_NAME": "ZAKŁADKI", + "ACTION_ADD_LINK": "Dodaj zakładkę", "ALL_PAGES": "All wiki pages" }, "SUMMARY": { @@ -1568,7 +1570,7 @@ "HINT2_TEXT": "Teams can now create custom fields as a flexible means to enter specific data useful for their particular workflow.", "HINT3_TITLE": "Reorder your projects to feature those most relevant to you.", "HINT3_TEXT": "The 10 projects are listed in the direct access bar at the top.", - "HINT4_TITLE": "Did you forget what were you working on?", + "HINT4_TITLE": "Zapomniałeś nad czym pracowałeś?", "HINT4_TEXT": "Nie martw się, na Twojej tablicy znajdziesz otwarte zadania, zgłoszenia i historyjki użytkownika w takiej kolejności, w jakiej nad nimi pracowałeś." }, "TIMELINE": { @@ -1623,7 +1625,7 @@ "NAV": { "NEXT": "Następny", "BACK": "Back", - "SKIP": "Skip", + "SKIP": "Pomiń", "DONE": "Gotowe!" }, "DASHBOARD": { @@ -1633,23 +1635,23 @@ }, "STEP2": { "TITLE": "Pracujesz nad", - "TEXT": "Here you will find the User Stories, Tasks and Issues in which you are working on." + "TEXT": "Tutaj znajdziesz Historyjki Użytkownika, Zadania i Problemy nad którymi pracujesz." }, "STEP3": { "TITLE": "Obserwujesz", "TEXT1": "And right here you will find the ones in your projects that you want to know about.", - "TEXT2": "You are already working with Taiga ;)" + "TEXT2": "Już korzystasz z Taiga ;)" }, "STEP4": { - "TITLE": "Let’s start", - "TEXT1": "You can start by creating your first Taiga project.", + "TITLE": "Zaczynajmy", + "TEXT1": "Możesz zacząć od stworzenia swojego pierwszego projektu w Taiga.", "TEXT2": "Good luck!" } }, "BACKLOG": { "STEP1": { - "TITLE": "Project summary", - "TEXT1": "Here you will see the state of your project.", + "TITLE": "Podsumowanie projektu", + "TEXT1": "Tutaj zobaczysz status Twojego projektu.", "TEXT2": "You can change every kind of project settings through the admin." }, "STEP2": { @@ -1658,7 +1660,7 @@ }, "STEP3": { "TITLE": "Sprinty", - "TEXT": "Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered." + "TEXT": "Sprinty to krótkie odcinki czasu (z reguły trwające 2 tygodnie) podczas których określona praca musi zostać wykonana i dostarczona." }, "STEP4": { "TITLE": "Historyjki użytkownika", @@ -1671,11 +1673,11 @@ "TEXT": "Set up the columns you need to map your workflow statuses through the admin." }, "STEP2": { - "TITLE": "User Stories & Tasks", - "TEXT": "User Stories are the requirements at high level. You can drag them to different columns." + "TITLE": "Historyjki Użytkownika i Zadania", + "TEXT": "Historyjki Użytkownika to wymagania wysokiego poziomu. Możesz przeciągnąć je do różnych kolumn." }, "STEP3": { - "TITLE": "Adding User Stories", + "TITLE": "Dodawanie Historyjek Użytkownika", "TEXT1": "You may want to add a single User Story (add US icon) or a group of them (bulk icon)", "TEXT2": "Good luck!" } @@ -1684,7 +1686,7 @@ "DISCOVER": { "PAGE_TITLE": "Discover projects - Taiga", "PAGE_DESCRIPTION": "Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.", - "DISCOVER_TITLE": "Discover projects", + "DISCOVER_TITLE": "Odkryj projekty", "DISCOVER_SUBTITLE": "{projects, plural, one{One public project to discover} other{# public projects to discover}}", "MOST_ACTIVE": "Most active", "MOST_ACTIVE_EMPTY": "There are no ACTIVE projects yet", diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index 992f5e69..20f236ce 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -11,6 +11,7 @@ "CANCEL": "Cancelar", "ACCEPT": "Aceitar", "DELETE": "Apagar", + "UNLINK": "Unlink", "CREATE": "Criar", "ADD": "Adicionar", "COPY_TO_CLIPBOARD": "Copiar para a área de transferência: Ctrl+C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Adicionar novo status", - "IS_ARCHIVED_COLUMN": "Está arquivado?", + "IS_ARCHIVED_COLUMN": "Arquivado", + "IS_CLOSED_COLUMN": "Fechado", "WIP_LIMIT_COLUMN": "Limite WIP", "PLACEHOLDER_WRITE_NAME": "Digite um nome para o novo status" }, diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index 0f41251b..fa49835a 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -11,6 +11,7 @@ "CANCEL": "Отмена", "ACCEPT": "Принимаю", "DELETE": "Удалить", + "UNLINK": "Unlink", "CREATE": "Создать", "ADD": "Добавить", "COPY_TO_CLIPBOARD": "Копировать: Ctrl+C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Добавить новый статус", - "IS_ARCHIVED_COLUMN": "В архиве?", + "IS_ARCHIVED_COLUMN": "Архивирована", + "IS_CLOSED_COLUMN": "Закрыта", "WIP_LIMIT_COLUMN": "Лимит текущей работы", "PLACEHOLDER_WRITE_NAME": "Укажите название для нового статуса" }, diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 33aae0c2..4d149f40 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -3,7 +3,7 @@ "YES": "Ja", "NO": "Nej", "OR": "eller", - "LOADING": "Laddar ...", + "LOADING": "Laddar...", "LOADING_PROJECT": "Laddar projekt...", "DATE": "YYYY-MM-DD", "DATETIME": "YYYY-MM-DD HH:mm", @@ -11,6 +11,7 @@ "CANCEL": "Avbryt", "ACCEPT": "Acceptera", "DELETE": "Radera", + "UNLINK": "Unlink", "CREATE": "Skapa", "ADD": "Lägg till", "COPY_TO_CLIPBOARD": "Kopiera till urklipp: Ctrl+C", @@ -19,11 +20,11 @@ "TAG_LINE": "Ditt agila, gratis och öppen-källkod projekthanteringsverktyg", "TAG_LINE_2": "Älska ditt projekt", "BLOCK": "Blockera", - "BLOCK_TITLE": "Block this item for example if it has a dependency that can not be satisfied", + "BLOCK_TITLE": "Blockera denna post, till exempel om den har ett beroende som inte kan tillgodoses", "BLOCKED": "Blockerad", "UNBLOCK": "Avblockera", - "UNBLOCK_TITLE": "Unblock this item", - "BLOCKED_NOTE": "Why is this blocked?", + "UNBLOCK_TITLE": "Avblockera denna post", + "BLOCKED_NOTE": "Varför är denna blockerad?", "BLOCKED_REASON": "Vänligen förklara orsaken", "CREATED_BY": "Skapad av {{fullDisplayName}}", "FROM": "från", @@ -122,7 +123,7 @@ "USER_STORY": "Användarhistorie", "TASK": "Uppgift", "ISSUE": "ärende", - "EPIC": "Epic", + "EPIC": "Epost", "TAGS": { "PLACEHOLDER": "Enter tag", "DELETE": "Ta bort etikett", @@ -218,7 +219,7 @@ "ASSIGNED_TO": "Tilldelad till", "CREATED_BY": "Skapad av", "CUSTOM_FILTERS": "Anpassad filter", - "EPIC": "Epic" + "EPIC": "Epost" }, "CONFIRM_DELETE": { "TITLE": "Ta bort anpassad filter.", @@ -258,7 +259,7 @@ }, "PERMISIONS_CATEGORIES": { "EPICS": { - "NAME": "Epics", + "NAME": "Epos", "VIEW_EPICS": "View epics", "ADD_EPICS": "Add epics", "MODIFY_EPICS": "Modify epics", @@ -277,7 +278,7 @@ "VIEW_USER_STORIES": "Visa användarhistorier", "ADD_USER_STORIES": "Lägg till användarhistorier", "MODIFY_USER_STORIES": "Modifiera användarhistorier", - "COMMENT_USER_STORIES": "Comment user stories", + "COMMENT_USER_STORIES": "Kommentera användningsfall", "DELETE_USER_STORIES": "Ta bort användarhistorier" }, "TASKS": { @@ -359,8 +360,8 @@ "PLACEHOLDER_FIELD": "Användarnamn eller e-postadress", "ACTION_RESET_PASSWORD": "Återställ lösenord", "LINK_CANCEL": "Nej, ta mig tillbaka. Jag tror att jag minns det.", - "SUCCESS_TITLE": "Check your inbox!", - "SUCCESS_TEXT": "We sent you an email with the instructions to set a new password", + "SUCCESS_TITLE": "Kolla din inkorg!", + "SUCCESS_TEXT": "Vi skickade dig ett e-postmeddelande med anvisningar hur du byter lösenord", "ERROR": "Enligt våra Oompaloompier är du inte registrerad ännu." }, "CHANGE_PASSWORD": { @@ -396,46 +397,46 @@ "HOME": { "PAGE_TITLE": "Hem - Taiga", "PAGE_DESCRIPTION": "Taiga hemsida med dina viktigaste projekt, alla dina tilldelade användaruppgifter, uppdrag och frågor", - "EMPTY_WORKING_ON": "It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.", - "EMPTY_WATCHING": "Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)", + "EMPTY_WORKING_ON": "Känns det inte lite tomt? Börja arbeta med Taiga så kommer se användningsfall, uppgifter och frågor du arbetar på.", + "EMPTY_WATCHING": "Följ Användningsfall, Uppgifter och Frågor i dina projekt och få meddelanden om förändringar i dem :)", "EMPTY_PROJECT_LIST": "Du har inte än några projekt", "WORKING_ON_SECTION": "Arbetar med", "WATCHING_SECTION": "Bevakar", - "DASHBOARD": "Projects Dashboard" + "DASHBOARD": "Instrumentpanel för projekt" }, "EPICS": { - "TITLE": "EPICS", - "SECTION_NAME": "Epics", - "EPIC": "EPIC", - "PAGE_TITLE": "Epics - {{projectName}}", - "PAGE_DESCRIPTION": "The epics list of the project {{projectName}}: {{projectDescription}}", + "TITLE": "EPOS", + "SECTION_NAME": "Epos", + "EPIC": "EPOS", + "PAGE_TITLE": "Epos - {{projectName}}", + "PAGE_DESCRIPTION": "Listan med epost för projektet {{projectName}}: {{projectDescription}}", "DASHBOARD": { - "ADD": "+ ADD EPIC", + "ADD": "+ LÄGG TILL EPOS", "UNASSIGNED": "Ej tilldelad" }, "EMPTY": { - "TITLE": "It looks like there aren't any epics yet", - "EXPLANATION": "Epics are items at a higher level that encompass user stories.
Epics are at the top of the hierarchy and can be used to group user stories together.", - "HELP": "Learn more about epics" + "TITLE": "Det ser ut som att det inte finns några epos än", + "EXPLANATION": "Epost är poster på en högre nivå som omfattar användningsfall.
Epost är på toppen av hierarkin och kan användas för att grupper användningsfall.", + "HELP": "Lär dig med om epos" }, "TABLE": { "VOTES": "Röster", "NAME": "Namn", "PROJECT": "Projekt", "SPRINT": "Sprint", - "ASSIGNED_TO": "Assigned", + "ASSIGNED_TO": "Tilldelad", "STATUS": "Status", - "PROGRESS": "Progress", - "VIEW_OPTIONS": "View options" + "PROGRESS": "Framsteg", + "VIEW_OPTIONS": "Visningsalternativ" }, "CREATE": { - "TITLE": "New Epic", - "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", - "TEAM_REQUIREMENT": "Team requirement", - "CLIENT_REQUIREMENT": "Client requirement", + "TITLE": "Nytt epos", + "PLACEHOLDER_DESCRIPTION": "Lägg till beskrivande text för att hjälpa andra bättre förstå detta epos", + "TEAM_REQUIREMENT": "Teamets krav", + "CLIENT_REQUIREMENT": "Klientkrav", "BLOCKED": "Blockerad", - "BLOCKED_NOTE_PLACEHOLDER": "Why is this epic blocked?", - "CREATE_EPIC": "Create epic" + "BLOCKED_NOTE_PLACEHOLDER": "Varför är detta epos blockerat? ", + "CREATE_EPIC": "Skapa epos" } }, "PROJECTS": { @@ -446,8 +447,8 @@ "ATTACHMENT": { "SECTION_NAME": "bilagor", "TITLE": "{{ fileName }} laddat upp {{ date }}", - "LIST_VIEW_MODE": "List view mode", - "GALLERY_VIEW_MODE": "Gallery view mode", + "LIST_VIEW_MODE": "Visningsläge listvy", + "GALLERY_VIEW_MODE": "Visningsläge galleri", "DESCRIPTION": "Skriv en kort beskrivning", "DEPRECATED": "(borttagen)", "DEPRECATED_FILE": "Borttagen?", @@ -487,8 +488,8 @@ "PAGE_TITLE": "Medlemskap - {{projectName}}", "ADD_BUTTON": "+ Ny medlem", "ADD_BUTTON_TITLE": "Lägg till ny medlem", - "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "Unfortunately, this project has reached its limit of ({{members}}) allowed members.", - "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator." + "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "Dessvärre har detta projekt nått sin gräns för ({{members}}) tillåtna medlemmar.", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "Detta projektet har nått sin gräns för ({{members}}) tillåtna medlemmar. Kontakta administratören om du vill utöka gränsen." }, "PROJECT_EXPORT": { "TITLE": "Exportera", @@ -508,14 +509,14 @@ "TITLE": "Moduler", "ENABLE": "Aktivera", "DISABLE": "Avvaktivera", - "EPICS": "Epics", - "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", + "EPICS": "Epos", + "EPICS_DESCRIPTION": "Visualisera och hantera den mest strategiska delen av ditt projekt", "BACKLOG": "Inkorg", "BACKLOG_DESCRIPTION": "Hantera dina användarhistorier för att organisera visningar av kommande och prioriterade jobb. ", - "NUMBER_SPRINTS": "Expected number of sprints", - "NUMBER_SPRINTS_HELP": "0 for an undetermined number", - "NUMBER_US_POINTS": "Expected total of story points", - "NUMBER_US_POINTS_HELP": "0 for an undetermined number", + "NUMBER_SPRINTS": "Förväntat antal sprintar", + "NUMBER_SPRINTS_HELP": "0 för ett obestämt antal", + "NUMBER_US_POINTS": "Förväntat antal totala användningsfallspoäng", + "NUMBER_US_POINTS_HELP": "0 för ett obestämt nummer", "KANBAN": "Kanban", "KANBAN_DESCRIPTION": "Organisera dina projekt med Lean med den här tavlan. ", "ISSUES": "Frågor", @@ -539,9 +540,9 @@ "PROJECT_SLUG": "Projektslugg", "TAGS": "Etiketter", "DESCRIPTION": "Beskrivning", - "RECRUITING": "Is this project looking for people?", + "RECRUITING": "Letar detta projekt efter personer? ", "RECRUITING_MESSAGE": "Vem letar du efter?", - "RECRUITING_PLACEHOLDER": "Define the profiles you are looking for", + "RECRUITING_PLACEHOLDER": "Definiera profilerna du letar efter", "PUBLIC_PROJECT": "Publika projekt", "PRIVATE_PROJECT": "Privata projekt", "PRIVATE_OR_PUBLIC": "Vad är skillnaden mellan publika och privata projekt?", @@ -572,7 +573,7 @@ "REGENERATE_SUBTITLE": "Du kan ändra CSV för datalänken. Den tidigare länken tas bort. Är du säker på det? " }, "CSV": { - "SECTION_TITLE_EPIC": "epics reports", + "SECTION_TITLE_EPIC": "eposrapporter", "SECTION_TITLE_US": "rapporter för användarhistorier", "SECTION_TITLE_TASK": "Rapport för uppgifter", "SECTION_TITLE_ISSUE": "Rapporter för ärenden", @@ -585,8 +586,8 @@ "CUSTOM_FIELDS": { "TITLE": "Anpassade fält", "SUBTITLE": "Specificera anpassade fält för användarhistorier, uppgifter och ärenden. ", - "EPIC_DESCRIPTION": "Epics custom fields", - "EPIC_ADD": "Add a custom field in epics", + "EPIC_DESCRIPTION": "Epos anpassade fält", + "EPIC_ADD": "Lägg till ett anpassat fält i epos", "US_DESCRIPTION": "Användarhistorier för anpassade fält", "US_ADD": "Lägg till ett anpassad fält i användarhistorien", "TASK_DESCRIPTION": "Anpassade fält för uppgifter", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Lägg till ny status", - "IS_ARCHIVED_COLUMN": "Är det arkiverad?", + "IS_ARCHIVED_COLUMN": "Arkiverad", + "IS_CLOSED_COLUMN": "Stängd", "WIP_LIMIT_COLUMN": "WIP-begränsning", "PLACEHOLDER_WRITE_NAME": "Skriv ett namn för den nya statusen" }, @@ -847,8 +849,8 @@ "FILTER_TYPE_ALL_TITLE": "Visa alla", "FILTER_TYPE_PROJECTS": "Projekt", "FILTER_TYPE_PROJECT_TITLES": "Visa bara projekt", - "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS": "Epos", + "FILTER_TYPE_EPIC_TITLES": "Visa endast epos", "FILTER_TYPE_USER_STORIES": "Berättelser", "FILTER_TYPE_USER_STORIES_TITLES": "Visa endast användarhistorier", "FILTER_TYPE_TASKS": "Uppgift", @@ -864,14 +866,14 @@ "SECTION_PROJECTS": "Projekt", "HELP": "Organisera dina projekt och sätt in de mest använda här.
De första 10 toppprojekten vill visas i toppnavigeringens projektlista. ", "PRIVATE": "Privata projekt", - "LOOKING_FOR_PEOPLE": "This project is looking for people", + "LOOKING_FOR_PEOPLE": "Detta projekt söker efter fler personer", "FANS_COUNTER_TITLE": "{total, plural, one{one fan} other{# fans}}", "WATCHERS_COUNTER_TITLE": "{total, plural, en{one watcher} other{# watchers}}", "MEMBERS_COUNTER_TITLE": "{total, plural, one{one member} other{# members}}", "BLOCKED_PROJECT": { - "BLOCKED": "Blocked project", - "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", - "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." + "BLOCKED": "Blockerat projekt", + "THIS_PROJECT_IS_BLOCKED": "Detta projekt är tillfälligt blockerat", + "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Kontakta administratören för att avblockera dina projekt." }, "STATS": { "PROJECT": "projekt
poäng", @@ -988,10 +990,10 @@ "SECTION_NAME": "Ta bort konto", "CONFIRM": "Är du säker på att du vill radera kontot?", "NEWSLETTER_LABEL_TEXT": "Jag vill inte motta flera nyhetsbrev", - "CANCEL": "Back to settings", + "CANCEL": "Tillbaka till inställningar", "ACCEPT": "Ta bort konto", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Notera att alla projekt du äger kommer bli blockerade efter att du raderar ditt konto. Om du vill blockera ett projekt, överför ägandet till en annan medlem för respektive projekt innan du raderar ditt konto. ", + "SUBTITLE": "Vad tråkigt att du lämnar. Vi kommer finnas här om du någonsin skulle överväga oss igen! :(" }, "DELETE_PROJECT": { "TITLE": "Ta bort projekt", @@ -1069,22 +1071,22 @@ } }, "EPIC": { - "PAGE_TITLE": "{{epicSubject}} - Epic {{epicRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", - "SECTION_NAME": "Epic", - "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", - "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", + "PAGE_TITLE": "{{epicSubject}} - Epost {{epicRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Beskrivning: {{epicDescription}}", + "SECTION_NAME": "Epost", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Ta bort länkning till relaterade användningsfall ", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Det kommer radera länken till det relaterade användningsfallet '{{subject}}'", "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", - "CREATE_RELATED_USERSTORIES": "Create a relationship with", + "CREATE_RELATED_USERSTORIES": "Skapa en relation med", "NEW_USERSTORY": "Ny användarhistorie", - "EXISTING_USERSTORY": "Existing user story", - "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", + "EXISTING_USERSTORY": "Befintligt användningsfal", + "CHOOSE_PROJECT_FOR_CREATION": "Vilket är projektet?", "SUBJECT": "Titel", "SUBJECT_BULK_MODE": "Subject (bulk insert)", - "CHOOSE_PROJECT_FROM": "What's the project?", + "CHOOSE_PROJECT_FROM": "Vilket är projektet?", "CHOOSE_USERSTORY": "What's the user story?", "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", - "FILTER_USERSTORIES": "Filter user stories", + "FILTER_USERSTORIES": "Filtrera användningsfall", "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", "ACTION_DELETE": "Delete epic" }, @@ -1126,15 +1128,15 @@ } }, "COMMENTS": { - "DELETED_INFO": "Comment deleted by {{user}}", + "DELETED_INFO": "Kommentar raderad av {{user}}", "TITLE": "Kommentarer", - "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", - "OLDER_FIRST": "Older first", - "RECENT_FIRST": "Recent first", + "COMMENTS_COUNT": "{{comments}} Kommentarer", + "ORDER": "Sortera", + "OLDER_FIRST": "Äldre först", + "RECENT_FIRST": "Senast först", "COMMENT": "Kommentarer", - "EDIT_COMMENT": "Edit comment", - "EDITED_COMMENT": "Edited:", + "EDIT_COMMENT": "Redigera kommentar", + "EDITED_COMMENT": "Redigerad:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Skriv en ny kommentar här", "SHOW_DELETED": "Visa raderade kommentarer", @@ -1150,10 +1152,10 @@ "DATETIME": "YYYY-MM-DD HH:mm", "SHOW_MORE": "+ Visa tidigare poster ({{showMore}} more)", "TITLE": "Aktiviteter", - "ACTIVITIES_COUNT": "{{activities}} Activities", + "ACTIVITIES_COUNT": "{{activities}} Aktiviteter", "REMOVED": "borttaget", "ADDED": "lagt till", - "TAGS_ADDED": "tags added:", + "TAGS_ADDED": "taggar tillagda", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", "NEW_ATTACHMENT": "new attachment:", @@ -1436,7 +1438,7 @@ "SEARCH": { "PAGE_TITLE": "Sök - {{projectName}}", "PAGE_DESCRIPTION": "Sök på vad som helst, användarhistorier, uppgifter, ärenden och wiki-innehåll i projektet {{projectName}}: {{projectDescription}}", - "FILTER_EPICS": "Epics", + "FILTER_EPICS": "Epos", "FILTER_USER_STORIES": "Användarhistorier", "FILTER_ISSUES": "Ärenden", "FILTER_TASKS": "Uppgift", @@ -1691,7 +1693,7 @@ "MOST_LIKED": "Most liked", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", - "RECRUITING": "This project is looking for people", + "RECRUITING": "Detta projekt söker efter personer", "FEATURED": "Featured Projects", "EMPTY": "There are no projects to show with this search criteria.
Try again!", "FILTERS": { diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 029bd85e..0d981ca4 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -11,6 +11,7 @@ "CANCEL": "İptal", "ACCEPT": "Kabul et", "DELETE": "Sil", + "UNLINK": "Unlink", "CREATE": "Oluştur", "ADD": "Ekle", "COPY_TO_CLIPBOARD": "Panoya kopyala: Ctrl+C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Yeni durum ekle", - "IS_ARCHIVED_COLUMN": "Arşivlensin?", + "IS_ARCHIVED_COLUMN": "Arşivlenmiş", + "IS_CLOSED_COLUMN": "Kapatılmış", "WIP_LIMIT_COLUMN": "WIP Sınır", "PLACEHOLDER_WRITE_NAME": "Yeni durum için bir isim yaz" }, diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 6af41fbe..7312dc86 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -11,6 +11,7 @@ "CANCEL": "取消", "ACCEPT": "接受", "DELETE": "刪除", + "UNLINK": "Unlink", "CREATE": "創建", "ADD": "新增", "COPY_TO_CLIPBOARD": "複製到剪貼簿:Ctrl+C", @@ -754,7 +755,8 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "增加新狀態", - "IS_ARCHIVED_COLUMN": "是否歸檔", + "IS_ARCHIVED_COLUMN": "歸檔", + "IS_CLOSED_COLUMN": "關閉", "WIP_LIMIT_COLUMN": "WIP限制", "PLACEHOLDER_WRITE_NAME": "為此新狀態命名" }, diff --git a/app/modules/epics/related-userstories/related-userstory-row/related-userstory-row.jade b/app/modules/epics/related-userstories/related-userstory-row/related-userstory-row.jade index c54e09af..9b6fd6f0 100644 --- a/app/modules/epics/related-userstories/related-userstory-row/related-userstory-row.jade +++ b/app/modules/epics/related-userstories/related-userstory-row/related-userstory-row.jade @@ -19,7 +19,7 @@ tg-svg.icon-drag( .userstory-settings a.delete-userstory.e2e-delete-userstory( tg-check-permission="modify_epic" - title="{{'COMMON.DELETE' | translate}}" + title="{{'COMMON.UNLINK' | translate}}" href="" ng-click="vm.onDeleteRelatedUserstory()" ) From 025ac0e77d7a1cfbc1b496b59208d7c0ea08893d Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 6 Oct 2016 12:59:27 +0200 Subject: [PATCH 013/175] prevent closing twice create task --- app/coffee/modules/taskboard/lightboxes.coffee | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/coffee/modules/taskboard/lightboxes.coffee b/app/coffee/modules/taskboard/lightboxes.coffee index 276cadc9..801a6235 100644 --- a/app/coffee/modules/taskboard/lightboxes.coffee +++ b/app/coffee/modules/taskboard/lightboxes.coffee @@ -171,9 +171,6 @@ CreateEditTaskDirective = ($repo, $model, $rs, $rootscope, $loading, lightboxSer deleteAttachments(data) .then () => createAttachments(data) .then () => - currentLoading.finish() - lightboxService.close($el) - $rs.tasks.getByRef(data.project, data.ref, params).then (task) -> $rootscope.$broadcast(broadcastEvent, task) From a1f83ea964c57fe1a7665eeaa1febed6c7b7a2a4 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 6 Oct 2016 13:11:02 +0200 Subject: [PATCH 014/175] tg-autofocus in tags --- app/modules/components/tags/components/add-tag-input.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/modules/components/tags/components/add-tag-input.jade b/app/modules/components/tags/components/add-tag-input.jade index 62b8cf1c..86c81b28 100644 --- a/app/modules/components/tags/components/add-tag-input.jade +++ b/app/modules/components/tags/components/add-tag-input.jade @@ -6,7 +6,7 @@ input.tag-input.e2e-add-tag-input( type="text" placeholder="{{'COMMON.TAGS.PLACEHOLDER' | translate}}" - autofocus + tg-autofocus ng-model="vm.newTag.name" ng-model-options="{debounce: 200}" ) From 9aaf6e5504425cd0a8bdc0ded0fabb53282528a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 6 Oct 2016 13:18:25 +0200 Subject: [PATCH 015/175] Remove some console.logs --- app/coffee/modules/issues/list.coffee | 3 --- app/coffee/modules/team/main.coffee | 2 -- 2 files changed, 5 deletions(-) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 5da0f9d8..433c8543 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -121,11 +121,8 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @.generateFilters() removeCustomFilter: (customFilter) -> - console.log "oooo" @filterRemoteStorageService.getFilters(@scope.projectId, @.myFiltersHashSuffix).then (userFilters) => - console.log userFilters[customFilter.id] delete userFilters[customFilter.id] - @filterRemoteStorageService.storeFilters(@scope.projectId, userFilters, @.myFiltersHashSuffix).then(@.generateFilters) saveCustomFilter: (name) -> diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index 283e69e9..e11a4769 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -81,8 +81,6 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) for member in @scope.activeUsers @scope.totals[member.id] = 0 - console.log @scope.activeUsers - # Get current user @scope.currentUser = _.find(@scope.activeUsers, {id: user?.id}) From d97a356fe37386718881caca6beb7975b9acc4a5 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 7 Oct 2016 07:27:45 +0200 Subject: [PATCH 016/175] enable publicRegister in invitations --- app/partials/auth/invitation.jade | 2 +- app/partials/includes/modules/invitation-register-form.jade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/partials/auth/invitation.jade b/app/partials/auth/invitation.jade index ececd510..86e0adca 100644 --- a/app/partials/auth/invitation.jade +++ b/app/partials/auth/invitation.jade @@ -12,6 +12,6 @@ div.wrapper p(translate="AUTH.INVITED_YOU") p.project-name(tg-bo-bind="invitation.project_name") - div.invitation-form(ng-class="{'public-register-disabled': !publicRegisterEnabled}") + div.invitation-form include ../includes/modules/invitation-login-form include ../includes/modules/invitation-register-form diff --git a/app/partials/includes/modules/invitation-register-form.jade b/app/partials/includes/modules/invitation-register-form.jade index 1afc1d31..227f9c28 100644 --- a/app/partials/includes/modules/invitation-register-form.jade +++ b/app/partials/includes/modules/invitation-register-form.jade @@ -1,4 +1,4 @@ -form.register-form(ng-show="publicRegisterEnabled") +form.register-form p.form-header(translate="REGISTER_FORM.TITLE") fieldset input( From 4a6f254d17968161993fe6bfe1dc59384cc024fb Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 10 Oct 2016 08:52:50 +0200 Subject: [PATCH 017/175] configurable gravatar functionality --- app/modules/services/avatar.service.coffee | 6 +++--- conf/conf.example.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/modules/services/avatar.service.coffee b/app/modules/services/avatar.service.coffee index f2ba8739..5049a3ba 100644 --- a/app/modules/services/avatar.service.coffee +++ b/app/modules/services/avatar.service.coffee @@ -18,7 +18,7 @@ ### class AvatarService - constructor: () -> + constructor: (@config) -> IMAGES = [ "/#{window._version}/images/user-avatars/user-avatar-01.png" "/#{window._version}/images/user-avatars/user-avatar-02.png" @@ -71,7 +71,7 @@ class AvatarService return { url: photo } - else if location.host.indexOf('localhost') != -1 + else if location.host.indexOf('localhost') != -1 || !@config.get("gravatar", true) root = location.protocol + '//' + location.host logo = @.getDefault(gravatar) @@ -90,4 +90,4 @@ class AvatarService bg: logo.color } -angular.module("taigaCommon").service("tgAvatarService", AvatarService) +angular.module("taigaCommon").service("tgAvatarService", ["$tgConfig", AvatarService]) diff --git a/conf/conf.example.json b/conf/conf.example.json index 325001cb..4f0d8cb6 100644 --- a/conf/conf.example.json +++ b/conf/conf.example.json @@ -15,5 +15,6 @@ "termsOfServiceUrl": null, "maxUploadFileSize": null, "contribPlugins": [], - "tribeHost": null + "tribeHost": null, + "gravatar": true } From 57a5b2fe1feb8cb6eb22b3ff4c0d1b4d3eeb3c8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Thu, 13 Oct 2016 10:16:24 +0200 Subject: [PATCH 018/175] Iocaine visibility --- app/locales/taiga/locale-en.json | 2 +- .../card/card-templates/card-data.jade | 7 +++++++ .../card/card-templates/card-owner.jade | 5 ----- app/modules/components/card/card.scss | 18 +++++++----------- 4 files changed, 15 insertions(+), 17 deletions(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 21802fc4..15ae363e 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -41,7 +41,7 @@ "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!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Project Owner", diff --git a/app/modules/components/card/card-templates/card-data.jade b/app/modules/components/card/card-templates/card-data.jade index e918b9fc..e5fb512a 100644 --- a/app/modules/components/card/card-templates/card-data.jade +++ b/app/modules/components/card/card-templates/card-data.jade @@ -10,6 +10,13 @@ ng-if="vm.item.getIn(['model', 'total_points'])" ) {{"COMMON.FIELDS.POINTS" | translate}} {{vm.item.getIn(['model', 'total_points'])}} .card-statistics + .statistic.card-iocaine( + ng-if="vm.item.getIn(['model', 'is_iocaine'])" + title="{{'COMMON.IOCAINE_TEXT' | translate}}" + ) + tg-svg( + svg-icon="icon-iocaine" + ) .statistic.card-votes(ng-class="{'active': vm.item.getIn(['model', 'is_voter'])}") tg-svg(svg-icon="icon-upvote") span {{vm.item.getIn(['model', 'total_voters'])}} diff --git a/app/modules/components/card/card-templates/card-owner.jade b/app/modules/components/card/card-templates/card-owner.jade index 682e0c4a..3c3f180b 100644 --- a/app/modules/components/card/card-templates/card-owner.jade +++ b/app/modules/components/card/card-templates/card-owner.jade @@ -5,11 +5,6 @@ ng-class="{'is-iocaine': vm.item.getIn(['model', 'is_iocaine'])}" tg-avatar="vm.item.get('assigned_to')" ) - tg-svg( - ng-if="vm.item.getIn(['model', 'is_iocaine'])" - svg-icon="icon-iocaine" - svg-title="COMMON.IOCAINE_TEXT" - ) span.card-owner-name(ng-if="vm.visible('owner')") {{vm.item.getIn(['assigned_to', 'full_name'])}} div(ng-if="!vm.visible('owner')") include card-title diff --git a/app/modules/components/card/card.scss b/app/modules/components/card/card.scss index b31f11a3..47d3c57d 100644 --- a/app/modules/components/card/card.scss +++ b/app/modules/components/card/card.scss @@ -79,16 +79,6 @@ line-height: 0; position: relative; } - .icon-iocaine { - @include svg-size(1.2rem); - background: rgba($blackish, .8); - border-radius: 4px 0 0; - bottom: .25rem; - fill: $whitish; - padding: .25rem; - position: absolute; - right: .5rem; - } .is-iocaine { filter: hue-rotate(265deg) saturate(3); } @@ -164,19 +154,25 @@ .statistic { align-content: center; display: flex; - margin-left: .75rem; + margin-left: .5rem; &.active { color: $primary-light; svg { fill: currentColor; } } + &.card-iocaine { + cursor: help; + } } .icon { @include svg-size(.75rem); fill: lighten($gray-light, 25%); margin-right: .2rem; } + .icon-iocaine { + fill: $purple-eggplant; + } } .card-completion { From 38ae0d5dc5d2cf86229319c28e3944972c0c9063 Mon Sep 17 00:00:00 2001 From: Jonathan Giannuzzi Date: Thu, 13 Oct 2016 10:01:26 +0200 Subject: [PATCH 019/175] Fix infinite-scroll --- bower.json | 2 +- gulpfile.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index d8c928f0..acc5cf19 100644 --- a/bower.json +++ b/bower.json @@ -69,7 +69,7 @@ "angular-translate-loader-partial": "~2.10.0", "angular-translate-loader-static-files": "~2.10.0", "angular-translate-interpolation-messageformat": "~2.10.0", - "ngInfiniteScroll": "^1.3.0", + "ngInfiniteScroll": "^1.3.1", "immutable": "~3.8.1", "bluebird": "~3.3.5", "intro.js": "~2.1.0", diff --git a/gulpfile.js b/gulpfile.js index 3fbc02a5..dd262697 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -176,7 +176,7 @@ paths.libs = [ paths.vendor + "raven-js/dist/raven.js", paths.vendor + "l.js/l.js", paths.vendor + "messageformat/locale/*.js", - paths.vendor + "ngInfiniteScroll/build/ng-infinite-scroll.js", + paths.vendor + "ngInfiniteScroll/dist/ng-infinite-scroll.js", paths.vendor + "immutable/dist/immutable.js", paths.vendor + "intro.js/intro.js", paths.vendor + "dragula.js/dist/dragula.js", From ac9260c2018f159cc665ddee43357f2a4716a7ce Mon Sep 17 00:00:00 2001 From: Jonathan Giannuzzi Date: Thu, 13 Oct 2016 16:33:24 +0200 Subject: [PATCH 020/175] Actually fix infinite-scroll --- bower.json | 2 +- gulpfile.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index acc5cf19..80144e0f 100644 --- a/bower.json +++ b/bower.json @@ -69,7 +69,7 @@ "angular-translate-loader-partial": "~2.10.0", "angular-translate-loader-static-files": "~2.10.0", "angular-translate-interpolation-messageformat": "~2.10.0", - "ngInfiniteScroll": "^1.3.1", + "ng-infinite-scroll-npm-is-better-than-bower": "^1.3.0", "immutable": "~3.8.1", "bluebird": "~3.3.5", "intro.js": "~2.1.0", diff --git a/gulpfile.js b/gulpfile.js index dd262697..00ad4fbd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -176,7 +176,7 @@ paths.libs = [ paths.vendor + "raven-js/dist/raven.js", paths.vendor + "l.js/l.js", paths.vendor + "messageformat/locale/*.js", - paths.vendor + "ngInfiniteScroll/dist/ng-infinite-scroll.js", + paths.vendor + "ng-infinite-scroll-npm-is-better-than-bower/build/ng-infinite-scroll.js", paths.vendor + "immutable/dist/immutable.js", paths.vendor + "intro.js/intro.js", paths.vendor + "dragula.js/dist/dragula.js", From 3d557eaf47e51cad3d1cd810458593db2f53a849 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sat, 15 Oct 2016 14:41:54 +0200 Subject: [PATCH 021/175] Fix issue tg-4648: Epics display show only first 30 related user stories --- .../userstories-resource.service.coffee | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/modules/resources/userstories-resource.service.coffee b/app/modules/resources/userstories-resource.service.coffee index d410036e..23a9a297 100644 --- a/app/modules/resources/userstories-resource.service.coffee +++ b/app/modules/resources/userstories-resource.service.coffee @@ -45,6 +45,7 @@ Resource = (urlsService, http) -> params = { project: projectId } + return http.get(url, params, httpOptions) .then (result) -> return Immutable.fromJS(result.data) @@ -52,13 +53,19 @@ Resource = (urlsService, http) -> service.listInEpic = (epicIid) -> url = urlsService.resolve("userstories") - params = { - 'epic': epicIid, - 'order_by': 'epic_order', - 'include_tasks': true + httpOptions = { + headers: { + "x-disable-pagination": "1" + } } - return http.get(url, params) + params = { + epic: epicIid, + order_by: 'epic_order', + include_tasks: true + } + + return http.get(url, params, httpOptions) .then (result) -> return Immutable.fromJS(result.data) From c53a692b98a2e8d707b192abb3542737c5db5c76 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 17 Oct 2016 08:58:07 +0200 Subject: [PATCH 022/175] fix issues #4647 - drag empty sprint --- app/coffee/modules/backlog/sortable.coffee | 5 +++-- app/partials/backlog/backlog.jade | 2 +- app/styles/modules/backlog/backlog-table.scss | 7 +++++++ app/styles/modules/backlog/sprints.scss | 1 + 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/coffee/modules/backlog/sortable.coffee b/app/coffee/modules/backlog/sortable.coffee index 555d75c4..e5905b18 100644 --- a/app/coffee/modules/backlog/sortable.coffee +++ b/app/coffee/modules/backlog/sortable.coffee @@ -45,7 +45,7 @@ BacklogSortableDirective = () -> initIsBacklog = false - drake = dragula([$el[0], $('.empty-backlog')[0]], { + drake = dragula([$el[0], $('.js-empty-backlog')[0]], { copySortSource: false, copy: false, isContainer: (el) -> return el.classList.contains('sprint-table'), @@ -76,7 +76,8 @@ BacklogSortableDirective = () -> $('.doom-line').remove() parent = $(item).parent() - isBacklog = parent.hasClass('backlog-table-body') || parent.hasClass('empty-backlog') + + isBacklog = parent.hasClass('backlog-table-body') || parent.hasClass('js-empty-backlog') if initIsBacklog || isBacklog sameContainer = (initIsBacklog == isBacklog) diff --git a/app/partials/backlog/backlog.jade b/app/partials/backlog/backlog.jade index 721d5cb0..be444cc8 100644 --- a/app/partials/backlog/backlog.jade +++ b/app/partials/backlog/backlog.jade @@ -78,7 +78,7 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl", section.backlog-table(ng-class="{'hidden': !userstories.length}") include ../includes/modules/backlog-table - div.empty-large(ng-class="{'hidden': userstories === undefined || userstories.length}") + div.empty-large.js-empty-backlog(ng-class="{'hidden': userstories === undefined || userstories.length}") img( src="/#{v}/images/empty/empty_mex.png" alt="{{'BACKLOG.EMPTY' | translate}}" diff --git a/app/styles/modules/backlog/backlog-table.scss b/app/styles/modules/backlog/backlog-table.scss index a7124d28..be8607f0 100644 --- a/app/styles/modules/backlog/backlog-table.scss +++ b/app/styles/modules/backlog/backlog-table.scss @@ -284,3 +284,10 @@ } } } + +// drag & drop +.empty-large { + .row { + display: none; + } +} diff --git a/app/styles/modules/backlog/sprints.scss b/app/styles/modules/backlog/sprints.scss index 040cadba..4dccca5d 100644 --- a/app/styles/modules/backlog/sprints.scss +++ b/app/styles/modules/backlog/sprints.scss @@ -135,6 +135,7 @@ } } .sprint-table { + min-height: 2rem; // drag & drop .sprint-empty { @include font-type(light); background: darken($whitish, 5%); From 26e8591d3a0047b02d41ee7a4a8ba003dcb95690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Mon, 17 Oct 2016 09:15:35 +0200 Subject: [PATCH 023/175] Broken kanban tags when font size in browser is large --- app/styles/modules/backlog/taskboard-table.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/styles/modules/backlog/taskboard-table.scss b/app/styles/modules/backlog/taskboard-table.scss index 45c5abe6..4d03c5cc 100644 --- a/app/styles/modules/backlog/taskboard-table.scss +++ b/app/styles/modules/backlog/taskboard-table.scss @@ -57,10 +57,10 @@ $column-padding: .5rem 1rem; } .taskboard-table-header { - flex-basis: 38px; + flex-basis: 2.2rem; flex-grow: 0; flex-shrink: 0; - min-height: 38px; + min-height: 2.2rem; position: relative; width: 100%; .taskboard-table-inner { From dcb557c788390d92f91602322f928d291f842b14 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 17 Oct 2016 09:23:30 +0200 Subject: [PATCH 024/175] fix issue #4427 change default votes order --- app/coffee/modules/issues/list.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 433c8543..9a53e14e 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -482,7 +482,10 @@ IssuesDirective = ($log, $location, $template, $compile) -> currentOrder = $ctrl.getOrderBy() newOrder = target.data("fieldname") - finalOrder = if currentOrder == newOrder then "-#{newOrder}" else newOrder + if newOrder == 'total_voters' + finalOrder = if currentOrder == newOrder then newOrder else "-#{newOrder}" + else + finalOrder = if currentOrder == newOrder then "-#{newOrder}" else newOrder $scope.$apply -> $ctrl.replaceFilter("order_by", finalOrder) From 8c0cec5e1ef7bbeb652401b03a8ed248a8ffeb9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Mon, 17 Oct 2016 09:44:32 +0200 Subject: [PATCH 025/175] Taksboard tags with large fonts --- app/styles/modules/kanban/kanban-table.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/styles/modules/kanban/kanban-table.scss b/app/styles/modules/kanban/kanban-table.scss index 2dd442ce..9c9f0882 100644 --- a/app/styles/modules/kanban/kanban-table.scss +++ b/app/styles/modules/kanban/kanban-table.scss @@ -60,7 +60,8 @@ $column-padding: .5rem 1rem; } .kanban-table-header { - min-height: 38px; + flex-basis: 2.2rem; + min-height: 2.2rem; position: relative; width: 100%; .kanban-table-inner { From 2b0297f48c83e76ca479042be16e10276c3efdbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Mon, 17 Oct 2016 10:01:17 +0200 Subject: [PATCH 026/175] Adjust tags height --- app/styles/modules/backlog/taskboard-table.scss | 4 ++-- app/styles/modules/kanban/kanban-table.scss | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/styles/modules/backlog/taskboard-table.scss b/app/styles/modules/backlog/taskboard-table.scss index 4d03c5cc..1cc1c59c 100644 --- a/app/styles/modules/backlog/taskboard-table.scss +++ b/app/styles/modules/backlog/taskboard-table.scss @@ -57,10 +57,10 @@ $column-padding: .5rem 1rem; } .taskboard-table-header { - flex-basis: 2.2rem; + flex-basis: 2.4rem; flex-grow: 0; flex-shrink: 0; - min-height: 2.2rem; + min-height: 2.4rem; position: relative; width: 100%; .taskboard-table-inner { diff --git a/app/styles/modules/kanban/kanban-table.scss b/app/styles/modules/kanban/kanban-table.scss index 9c9f0882..edee7517 100644 --- a/app/styles/modules/kanban/kanban-table.scss +++ b/app/styles/modules/kanban/kanban-table.scss @@ -60,8 +60,8 @@ $column-padding: .5rem 1rem; } .kanban-table-header { - flex-basis: 2.2rem; - min-height: 2.2rem; + flex-basis: 2.4rem; + min-height: 2.4rem; position: relative; width: 100%; .kanban-table-inner { From 79a5182f73227fe897f36b68b1e9159cf05e3de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Tue, 18 Oct 2016 12:39:07 +0200 Subject: [PATCH 027/175] Fix creation wizard --- app/styles/modules/common/wizard.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/styles/modules/common/wizard.scss b/app/styles/modules/common/wizard.scss index 5bcae75f..1ac0c065 100644 --- a/app/styles/modules/common/wizard.scss +++ b/app/styles/modules/common/wizard.scss @@ -57,6 +57,7 @@ .icon { @include svg-size(1.5rem); fill: currentColor; + margin-right: .3rem; vertical-align: text-top; } .template-name { From 7bb53559e8561c9f41fc0e02761bd3e24a31c009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Wed, 19 Oct 2016 10:17:09 +0200 Subject: [PATCH 028/175] Issues template --- ISSUE_TEMPLATE.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 ISSUE_TEMPLATE.md diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..dc4f151d --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,19 @@ +**Before adding an issue** +Please ensure that your issue is not already reported in our [issues list](https://tree.taiga.io/project/taiga/issues?order_by=-created_date). +If this issue was already reported, remember that you can upvote it to raise its importance. + +###Do you want to request a *feature* or report a *bug*? + +###What is the current behavior? + +###If the current behavior is a bug, please provide the steps to reproduce. + +###What is the expected behavior? + +###Is it happening in taiga.io or in your own instance? + +###What browser/version are you using? + +###Are there any console errors *(Ctrl + F12)* in red? + +Thanks for reporting! From dcacdc7112eddb68b9360f3fa775999c7403d206 Mon Sep 17 00:00:00 2001 From: Xaviju Date: Wed, 19 Oct 2016 10:19:50 +0200 Subject: [PATCH 029/175] Update ISSUE_TEMPLATE.md --- ISSUE_TEMPLATE.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index dc4f151d..068b5851 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -2,18 +2,18 @@ Please ensure that your issue is not already reported in our [issues list](https://tree.taiga.io/project/taiga/issues?order_by=-created_date). If this issue was already reported, remember that you can upvote it to raise its importance. -###Do you want to request a *feature* or report a *bug*? +**Do you want to request a *feature* or report a *bug*?** -###What is the current behavior? +**What is the current behavior?** -###If the current behavior is a bug, please provide the steps to reproduce. +**If the current behavior is a bug, please provide the steps to reproduce.** -###What is the expected behavior? +**What is the expected behavior?** -###Is it happening in taiga.io or in your own instance? +**Is it happening in taiga.io or in your own instance?** -###What browser/version are you using? +**What browser/version are you using?** -###Are there any console errors *(Ctrl + F12)* in red? +**Are there any console errors *(Ctrl + F12)* in red?** Thanks for reporting! From 407fb97f375d96a281675984db6dfbf4bee00b0a Mon Sep 17 00:00:00 2001 From: juanfran Date: Wed, 19 Oct 2016 11:20:19 +0200 Subject: [PATCH 030/175] apply invalid filters --- app/coffee/modules/controllerMixins.coffee | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/controllerMixins.coffee b/app/coffee/modules/controllerMixins.coffee index a6c501cd..e383f20d 100644 --- a/app/coffee/modules/controllerMixins.coffee +++ b/app/coffee/modules/controllerMixins.coffee @@ -137,7 +137,18 @@ class FiltersMixin selectedFilters = _.filter list, (it) -> selectedIds.indexOf(_.toString(it.id)) != -1 - return _.map selectedFilters, (it) -> + invalidTags = _.filter selectedIds, (it) -> + return !_.find selectedFilters, (sit) -> _.toString(sit.id) == it + + invalidAppliedTags = _.map invalidTags, (it) -> + return { + id: it + key: type + ":" + it + dataType: type, + name: it + } + + validAppliedTags = _.map selectedFilters, (it) -> return { id: it.id key: type + ":" + it.id @@ -146,6 +157,8 @@ class FiltersMixin color: it.color } + return invalidAppliedTags.concat(validAppliedTags) + taiga.FiltersMixin = FiltersMixin ############################################################################# From b3b845ac497d5ce0049ba90b683cde37ad12b78a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 19 Oct 2016 12:01:02 +0200 Subject: [PATCH 031/175] [i18n] Update locales --- app/locales/taiga/locale-es.json | 62 ++--- app/locales/taiga/locale-fr.json | 106 ++++---- app/locales/taiga/locale-it.json | 400 +++++++++++++++---------------- app/locales/taiga/locale-sv.json | 54 ++--- 4 files changed, 311 insertions(+), 311 deletions(-) diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index aa3b7e19..e12ab653 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -11,7 +11,7 @@ "CANCEL": "Cancelar", "ACCEPT": "Aceptar", "DELETE": "Borrar", - "UNLINK": "Unlink", + "UNLINK": "Desvincular", "CREATE": "Crear", "ADD": "Añadir", "COPY_TO_CLIPBOARD": "Copiar en el portapapeles: Ctrl+C", @@ -36,7 +36,7 @@ "ONE_ITEM_LINE": "Un elemento por línea...", "NEW_BULK": "Nueva inserción en bloque", "RELATED_TASKS": "Tareas relacionadas", - "PREVIOUS": "Previous", + "PREVIOUS": "Anterior", "NEXT": "Siguiente", "LOGOUT": "Cerrar sesión", "EXTERNAL_USER": "un usuario externo", @@ -48,7 +48,7 @@ "CAPSLOCK_WARNING": "¡Cuidado!. Esta usando mayusculas en un campo sensible a mayusculas", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "¿Seguro que desea cerrar el modo de edición?", "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Recuerde que si cierra el modo de edicion sin guardar todos los cambios se perderán", - "RELATED_USERSTORIES": "Related user stories", + "RELATED_USERSTORIES": "Historias de usuario relacionadas", "CARD": { "ASSIGN_TO": "Asignado a", "EDIT": "Editar tarjeta" @@ -416,7 +416,7 @@ }, "EMPTY": { "TITLE": "Parece que todavía no hay épicas.", - "EXPLANATION": "Epics are items at a higher level that encompass user stories.
Epics are at the top of the hierarchy and can be used to group user stories together.", + "EXPLANATION": "Las épicas son ítems a un nivel mas elevado que engloban historias de usuario.
Las épicas estan al tope de la jerarquia y pueden ser usadas para agrupar historias de usuario.", "HELP": "Aprende más sobre Épicas" }, "TABLE": { @@ -435,7 +435,7 @@ "TEAM_REQUIREMENT": "Requerido por el equipo", "CLIENT_REQUIREMENT": "Requerido por el Cliente", "BLOCKED": "Bloqueada", - "BLOCKED_NOTE_PLACEHOLDER": "Why is this epic blocked?", + "BLOCKED_NOTE_PLACEHOLDER": "Porque esta esta épica bloqueada?", "CREATE_EPIC": "Crear épica" } }, @@ -510,7 +510,7 @@ "ENABLE": "Activado", "DISABLE": "Desactivado", "EPICS": "Épicas", - "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", + "EPICS_DESCRIPTION": "Visualizar y administrar la parte mas estrategica del proyecto.", "BACKLOG": "Backlog", "BACKLOG_DESCRIPTION": "Gestiona tus historias de usuario para mantener una vista organizada y priorizada de los próximos trabajos que deberás afrontar. ", "NUMBER_SPRINTS": "Numero esperado de sprints", @@ -573,7 +573,7 @@ "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_EPIC": "epics reports", + "SECTION_TITLE_EPIC": "Reportes de épicas.", "SECTION_TITLE_US": "informes de historias de usuario", "SECTION_TITLE_TASK": "Informes de tareas", "SECTION_TITLE_ISSUE": "informes de peticiones", @@ -625,8 +625,8 @@ "PROJECT_VALUES_STATUS": { "TITLE": "Estado", "SUBTITLE": "Especifica los estado que atravesarán tus historias de usuario, tareas y peticiones", - "EPIC_TITLE": "Epic Statuses", - "US_TITLE": "User Story Statuses", + "EPIC_TITLE": "Estados de Epicas", + "US_TITLE": "Estados de historias de usuario", "TASK_TITLE": "Estados de Tarea", "ISSUE_TITLE": "Estados de la petición" }, @@ -638,14 +638,14 @@ }, "PROJECT_VALUES_TAGS": { "TITLE": "Etiquetas", - "SUBTITLE": "View and edit the color of your tags", + "SUBTITLE": "Ver y editar el color de sus etiquetas.", "EMPTY": "Actualmente no hay etiquetas", "EMPTY_SEARCH": "Parece que no se encontro nada con este criterio de busqueda", "ACTION_ADD": "Añadir etiqueta", - "NEW_TAG": "New tag", - "MIXING_HELP_TEXT": "Select the tags that you want to merge", - "MIXING_MERGE": "Merge Tags", - "SELECTED": "Selected" + "NEW_TAG": "Nueva etiqueta", + "MIXING_HELP_TEXT": "Seleccione las etiquetas que quiere agrupar", + "MIXING_MERGE": "Agrupar Etiquetas", + "SELECTED": "Seleccionado" }, "ROLES": { "PAGE_TITLE": "Roles - {{projectName}}", @@ -738,8 +738,8 @@ "DEFAULT_DELETE_MESSAGE": "la invitación enviada a" }, "DEFAULT_VALUES": { - "LABEL_EPIC_STATUS": "Default value for epic status selector", - "LABEL_US_STATUS": "Default value for user story status selector", + "LABEL_EPIC_STATUS": "Valor por defecto para el selector de estado de épicas.", + "LABEL_US_STATUS": "Valor por defecto para el selector de estado de historias de usuario.", "LABEL_POINTS": "Valor por defecto para el selector de puntos", "LABEL_TASK_STATUS": "Valor por defecto para el selector de estado de tarea", "LABEL_ISSUE_TYPE": "Valor por defecto para el selector de tipo de la petición", @@ -1050,8 +1050,8 @@ "CREATE_MEMBER": { "PLACEHOLDER_INVITATION_TEXT": "(Opcional) Añade un texto personalizado a la invitación. Dile algo encantador a tus nuevos miembros ;-)", "PLACEHOLDER_TYPE_EMAIL": "Escribe un email", - "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.", - "LIMIT_USERS_WARNING_MESSAGE": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members." + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "Usted esta a punto de alcanzar el maximo numero de miembros permitidos para este proyecto, {{maxMembers}} miembros. Si desea aumentar el limite actual, por favor contacte al administrador.", + "LIMIT_USERS_WARNING_MESSAGE": "Usted esta a punto de alcanzar el maximo numero de miembros permitidos para este proyecto, {{maxMembers}} miembros." }, "LEAVE_PROJECT_WARNING": { "TITLE": "Por desgracia, este proyecto no puede ser dejado sin dueño", @@ -1074,9 +1074,9 @@ "PAGE_TITLE": "{{epicSubject}} - Épica {{epicRef}} - {{projectName}}", "PAGE_DESCRIPTION": "Estado: {{taskStatus}}. Descripción: {{taskDescription}}", "SECTION_NAME": "Épica", - "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", - "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", - "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Desvincular historia de usuario relacionada.", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Se eliminara el vinculo a la historia de usuario relacionada '{{subject}}'", + "ERROR_UNLINK_RELATED_USERSTORY": "No se ha podido desvincular: {{errorMessage}}", "CREATE_RELATED_USERSTORIES": "Crear relación con", "NEW_USERSTORY": "Nueva historia de usuario", "EXISTING_USERSTORY": "Historia de usuario existente", @@ -1084,11 +1084,11 @@ "SUBJECT": "Asunto", "SUBJECT_BULK_MODE": "Subject (bulk insert)", "CHOOSE_PROJECT_FROM": "¿Qué es el proyecto?", - "CHOOSE_USERSTORY": "What's the user story?", - "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", - "FILTER_USERSTORIES": "Filter user stories", + "CHOOSE_USERSTORY": "Cual es la historia de usuario?", + "NO_USERSTORIES": "Este proyecto no tiene historias de usuario todavia. Por favor, seleccione otro proyecto.", + "FILTER_USERSTORIES": "Filtrar historias de usuario", "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", - "ACTION_DELETE": "Delete epic" + "ACTION_DELETE": "Borrar epic" }, "US": { "PAGE_TITLE": "{{userStorySubject}} - Historia de Usuario {{userStoryRef}} - {{projectName}}", @@ -1581,8 +1581,8 @@ "TASK_CREATED_WITH_US": "{{username}} ha creado una nueva tarea {{obj_name}} en {{project_name}} que proviene de la historia {{us_name}}", "WIKI_CREATED": "{{username}} ha creado una nueva página de wiki {{obj_name}} en {{project_name}}\n", "MILESTONE_CREATED": "{{username}} ha creado un nuevo sprint {{obj_name}} en {{project_name}}", - "EPIC_CREATED": "{{username}} has created a new epic {{obj_name}} in {{project_name}}", - "EPIC_RELATED_USERSTORY_CREATED": "{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}", + "EPIC_CREATED": "{{username}} ha creado una nueva épica {{obj_name}} en {{project_name}}.", + "EPIC_RELATED_USERSTORY_CREATED": "{{username}} ha relacionado la historia de usuario {{related_us_name}} con la épica {{epic_name}} en {{project_name}}.", "NEW_PROJECT": "{{username}} creó el proyecto {{project_name}}", "MILESTONE_UPDATED": "{{username}} ha actualizado el sprint {{obj_name}}", "US_UPDATED": "{{username}} ha actualizado el atributo \"{{field_name}}\" de la historia {{obj_name}}", @@ -1595,13 +1595,13 @@ "TASK_UPDATED_WITH_US": "{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} que proviene de la historia {{us_name}}", "TASK_UPDATED_WITH_US_NEW_VALUE": "{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} que pertenece a la historia {{us_name}} a {{new_value}}", "WIKI_UPDATED": "{{username}} ha actualizado la página del wiki {{obj_name}}", - "EPIC_UPDATED": "{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}", - "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}", - "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ", + "EPIC_UPDATED": "{{username}} ha actualizado el atributo \"{{field_name}}\" de la épica {{obj_name}}", + "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} ha actualizado el atrubuto \"{{field_name}}\" de la épica {{obj_name}} a {{new_value}}", + "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} ha actualizado el atributo \"{{field_name}}\" de la épica {{obj_name}} a ", "NEW_COMMENT_US": "{{username}} ha añadido un comentado en la historia {{obj_name}}", "NEW_COMMENT_ISSUE": "{{username}} ha añadido un comentado en la petición {{obj_name}}", "NEW_COMMENT_TASK": "{{username}} ha añadido un comentado en la tarea {{obj_name}}", - "NEW_COMMENT_EPIC": "{{username}} has commented in the epic {{obj_name}}", + "NEW_COMMENT_EPIC": "{{username}} ha comentado en la épica {{obj_name}}", "NEW_MEMBER": "{{project_name}} tiene un nuevo miembro", "US_ADDED_MILESTONE": "{{username}} ha añadido la historia {{obj_name}} a {{sprint_name}}", "US_MOVED": "{{username}} ha movido la historia {{obj_name}}", diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 9faec574..d0828ad6 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -11,7 +11,7 @@ "CANCEL": "Annuler", "ACCEPT": "Accepter", "DELETE": "Supprimer", - "UNLINK": "Unlink", + "UNLINK": "Détacher", "CREATE": "Créer", "ADD": "Ajouter", "COPY_TO_CLIPBOARD": "Copier dans le presse-papier : Ctrl+C", @@ -48,7 +48,7 @@ "CAPSLOCK_WARNING": "Attention ! Vous utilisez des majuscules dans un champ qui est sensible à la casse.", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Êtes-vous sûr de vouloir fermer le mode Édition ?", "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Souvenez-vous que si vous fermez le mode édition sans enregistrer, toutes vos modifications seront perdues", - "RELATED_USERSTORIES": "Related user stories", + "RELATED_USERSTORIES": "Récits utilisateur liés", "CARD": { "ASSIGN_TO": "Affecter à", "EDIT": "Modifier la carte" @@ -125,7 +125,7 @@ "ISSUE": "Ticket", "EPIC": "Épopée", "TAGS": { - "PLACEHOLDER": "Enter tag", + "PLACEHOLDER": "Saisissez un mot-clé", "DELETE": "Supprimer le mot-clé", "ADD": "Ajouter un mot-clé" }, @@ -209,7 +209,7 @@ "TITLE_ACTION_SEARCH": "Rechercher", "ACTION_SAVE_CUSTOM_FILTER": "sauvegarder en tant que filtre personnalisé", "PLACEHOLDER_FILTER_NAME": "Écrivez le nom du filtre et appuyez sur \"Entrée\"", - "APPLIED_FILTERS_NUM": "filters applied", + "APPLIED_FILTERS_NUM": "filtres appliqués", "CATEGORIES": { "TYPE": "Type", "STATUS": "Statut", @@ -260,11 +260,11 @@ "PERMISIONS_CATEGORIES": { "EPICS": { "NAME": "Épopées", - "VIEW_EPICS": "View epics", - "ADD_EPICS": "Add epics", - "MODIFY_EPICS": "Modify epics", - "COMMENT_EPICS": "Comment epics", - "DELETE_EPICS": "Delete epics" + "VIEW_EPICS": "Voir les épopées", + "ADD_EPICS": "Ajouter des épopées", + "MODIFY_EPICS": "Modifier des épopées", + "COMMENT_EPICS": "Commenter des épopées", + "DELETE_EPICS": "Supprimer des épopées" }, "SPRINTS": { "NAME": "Sprints", @@ -416,7 +416,7 @@ }, "EMPTY": { "TITLE": "Il semble n'y avoir aucune épopée pour l'instant", - "EXPLANATION": "Epics are items at a higher level that encompass user stories.
Epics are at the top of the hierarchy and can be used to group user stories together.", + "EXPLANATION": "Les épopées sont des éléments à un niveau plus élevé qui englobent les récits utilisateurs.
Les épopées sont au sommet de la hiérarchie et peuvent être utilisées pour regrouper ensemble des récits utilisateur.", "HELP": "En savoir plus sur les épopées" }, "TABLE": { @@ -431,7 +431,7 @@ }, "CREATE": { "TITLE": "Nouvelle épopée", - "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", + "PLACEHOLDER_DESCRIPTION": "Ajoutez une description pour aider les autres utilisateurs à mieux comprendre cette épopée.", "TEAM_REQUIREMENT": "Exigence équipe", "CLIENT_REQUIREMENT": "Exigence client", "BLOCKED": "Bloqué", @@ -573,7 +573,7 @@ "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. Êtes-vous sûr ?" }, "CSV": { - "SECTION_TITLE_EPIC": "epics reports", + "SECTION_TITLE_EPIC": "rapports d'épopée", "SECTION_TITLE_US": "rapports des récits utilisateur", "SECTION_TITLE_TASK": "rapports des tâches", "SECTION_TITLE_ISSUE": "Rapports des tickets", @@ -586,8 +586,8 @@ "CUSTOM_FIELDS": { "TITLE": "Champs personnalisés", "SUBTITLE": "Spécifiez les champs personnalisés de vos récits utilisateur, tâches et tickets", - "EPIC_DESCRIPTION": "Epics custom fields", - "EPIC_ADD": "Add a custom field in epics", + "EPIC_DESCRIPTION": "Champs personnalisés des épopées", + "EPIC_ADD": "Ajouter un champ personnalisé dans les épopées", "US_DESCRIPTION": "Champs personnalisés des récits utilisateur", "US_ADD": "Ajouter un champ personnalisé dans les récits utilisateur", "TASK_DESCRIPTION": "Champs personnalisés de tâches", @@ -625,8 +625,8 @@ "PROJECT_VALUES_STATUS": { "TITLE": "Statut", "SUBTITLE": "Spécifiez les statuts que vont prendre vos récits utilisateur, tâches et tickets", - "EPIC_TITLE": "Epic Statuses", - "US_TITLE": "User Story Statuses", + "EPIC_TITLE": "Statuts d'épopée", + "US_TITLE": "Statuts de récit utilisateur", "TASK_TITLE": "Statuts des tâches", "ISSUE_TITLE": "Statuts des Tickets" }, @@ -726,7 +726,7 @@ "COLUMN_MEMBER": "Membre", "COLUMN_ADMIN": "Admin", "COLUMN_ROLE": "Rôle", - "COLUMN_STATUS": "Etat", + "COLUMN_STATUS": "Statut", "STATUS_ACTIVE": "Actif", "STATUS_PENDING": "En attente", "DELETE_MEMBER": "Supprimer un membre", @@ -738,27 +738,27 @@ "DEFAULT_DELETE_MESSAGE": "l'invitation à {{email}}" }, "DEFAULT_VALUES": { - "LABEL_EPIC_STATUS": "Default value for epic status selector", - "LABEL_US_STATUS": "Default value for user story status selector", + "LABEL_EPIC_STATUS": "Valeur par défaut pour le sélecteur de statut d'épopée", + "LABEL_US_STATUS": "Valeur par défaut pour le sélecteur de statut de récit utilisateur", "LABEL_POINTS": "Valeur par défaut pour la sélection des points", - "LABEL_TASK_STATUS": "Valeur par défaut pour la sélection de l'état des tâches", + "LABEL_TASK_STATUS": "Valeur par défaut pour la sélection du statut des tâches", "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", "LABEL_PRIORITY": "Valeur par défaut de la sélection des priorités", "LABEL_SEVERITY": "Valeur par défaut pour le sélecteur de gravité" }, "STATUS": { - "PLACEHOLDER_WRITE_STATUS_NAME": "Entrez le nom du nouvel état" + "PLACEHOLDER_WRITE_STATUS_NAME": "Entrez le nom du nouveau statut" }, "TYPES": { "PLACEHOLDER_WRITE_NAME": "Entrez un nom pour le nouvel élément" }, "US_STATUS": { - "ACTION_ADD_STATUS": "Ajouter un nouveau status", + "ACTION_ADD_STATUS": "Ajouter un nouveau statut", "IS_ARCHIVED_COLUMN": "Archivé", "IS_CLOSED_COLUMN": "Fermé", "WIP_LIMIT_COLUMN": "Limite de Work In Progress", - "PLACEHOLDER_WRITE_NAME": "Donnez un nom au nouvel état" + "PLACEHOLDER_WRITE_NAME": "Donnez un nom au nouvel statut" }, "MENU": { "TITLE": "Admin", @@ -773,7 +773,7 @@ "TITLE": "Attributs" }, "SUBMENU_PROJECT_VALUES": { - "STATUS": "Etats", + "STATUS": "Status", "POINTS": "Points", "PRIORITIES": "Priorités", "SEVERITIES": "Gravité", @@ -850,7 +850,7 @@ "FILTER_TYPE_PROJECTS": "Projets", "FILTER_TYPE_PROJECT_TITLES": "Voir uniquement les projets", "FILTER_TYPE_EPICS": "Épopées", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPIC_TITLES": "N'afficher que les épopées", "FILTER_TYPE_USER_STORIES": "Récits", "FILTER_TYPE_USER_STORIES_TITLES": "Voir uniquement les user stories", "FILTER_TYPE_TASKS": "Tâches", @@ -1033,7 +1033,7 @@ "CREATE_EDIT_TASK": { "TITLE": "Nouvelle tâche", "PLACEHOLDER_SUBJECT": "L'objet de la tâche", - "PLACEHOLDER_STATUS": "État de la tâche", + "PLACEHOLDER_STATUS": "Statut de la tâche", "OPTION_UNASSIGNED": "Non affecté", "PLACEHOLDER_SHORT_DESCRIPTION": "Saisissez une description courte", "ACTION_EDIT": "Modifier la tâche" @@ -1050,8 +1050,8 @@ "CREATE_MEMBER": { "PLACEHOLDER_INVITATION_TEXT": "(Optionnel) Ajoutez un texte personnalisé à l'invitation. Dites quelque chose de gentil à vos nouveaux membres ;-)", "PLACEHOLDER_TYPE_EMAIL": "Saisissez une adresse courriel", - "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.", - "LIMIT_USERS_WARNING_MESSAGE": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members." + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "Vous êtes sur le point d'atteindre le nombre maximum de membres autorisé pour ce projet, {{maxMembers}} membres. Si vous souhaitez augmenter cette limite, merci de contacter l'administrateur.", + "LIMIT_USERS_WARNING_MESSAGE": "Vous êtes sur le point d'atteindre le nombre maximum de membres autorisé pour ce projet, {{maxMembers}} membres." }, "LEAVE_PROJECT_WARNING": { "TITLE": "Malheureusement, ce projet ne peut pas être laissé sans propriétaire", @@ -1072,27 +1072,27 @@ }, "EPIC": { "PAGE_TITLE": "{{epicSubject}} - Épopée {{epicRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", + "PAGE_DESCRIPTION": "Statut : {{epicStatus }}. Description : {{epicDescription}}", "SECTION_NAME": "Épopée", - "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", - "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", - "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", - "CREATE_RELATED_USERSTORIES": "Create a relationship with", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Détacher le récit utilisateur", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Cela va supprimer le lien vers le récit utilisateur \"{{subject}}\"", + "ERROR_UNLINK_RELATED_USERSTORY": "Nous n'avons pas réussi à supprimer le lien : {{errorMessage}}", + "CREATE_RELATED_USERSTORIES": "Créer un lien avec", "NEW_USERSTORY": "Nouveau récit utilisateur", - "EXISTING_USERSTORY": "Existing user story", - "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", + "EXISTING_USERSTORY": "Récit utilisateur existant", + "CHOOSE_PROJECT_FOR_CREATION": "Quel est le projet ?", "SUBJECT": "Objet", - "SUBJECT_BULK_MODE": "Subject (bulk insert)", - "CHOOSE_PROJECT_FROM": "What's the project?", - "CHOOSE_USERSTORY": "What's the user story?", - "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", - "FILTER_USERSTORIES": "Filter user stories", - "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", - "ACTION_DELETE": "Delete epic" + "SUBJECT_BULK_MODE": "Sujet (ajout en masse)", + "CHOOSE_PROJECT_FROM": "Quel est le projet ?", + "CHOOSE_USERSTORY": "Quel est le récit utilisateur ?", + "NO_USERSTORIES": "Ce projet n'a pas encore de récits utilisateur. Merci de choisir un autre projet.", + "FILTER_USERSTORIES": "Filtrer les récits utilisateur", + "LIGHTBOX_TITLE_BLOKING_EPIC": "Bloquer l'épopée", + "ACTION_DELETE": "Supprimer l'épopée" }, "US": { "PAGE_TITLE": "{{userStorySubject}} - Récit utilisateur {{userStoryRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "État : {{userStoryStatus }}. Achevé {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} sur {{userStoryTotalTasks}} tâches fermées). Points : {{userStoryPoints}}. Description : {{userStoryDescription}}", + "PAGE_DESCRIPTION": "Statut : {{userStoryStatus }}. Achevé {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} sur {{userStoryTotalTasks}} tâches fermées). Points : {{userStoryPoints}}. Description : {{userStoryDescription}}", "SECTION_NAME": "Récit utilisateur", "LINK_TASKBOARD": "Tableau des tâches", "TITLE_LINK_TASKBOARD": "Aller au tableau des tâches", @@ -1180,7 +1180,7 @@ "NAME": "nom", "DESCRIPTION": "description", "CONTENT": "contenu", - "STATUS": "état", + "STATUS": "statut", "IS_CLOSED": "est fermé", "FINISH_DATE": "date de fin", "TYPE": "type", @@ -1232,7 +1232,7 @@ "GO_TO_TASKBOARD": "Aller au tableau des tâches de {{::name}}", "EDIT_SPRINT": "Modifier le Sprint", "TOTAL_POINTS": "total", - "STATUS_NAME": "Nom de l'état", + "STATUS_NAME": "Nom du statut", "SORTABLE_FILTER_ERROR": "Vous ne pouvez pas déposer sur le backlog quand les filtres sont ouverts", "DOOMLINE": "Périmètre projet", "CHART": { @@ -1327,12 +1327,12 @@ }, "TASK": { "PAGE_TITLE": "{{taskSubject}} - Tâche {{taskRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "État : {{taskStatus }}. Description : {{taskDescription}}", + "PAGE_DESCRIPTION": "Statut : {{taskStatus }}. Description : {{taskDescription}}", "SECTION_NAME": "Tâche", "LINK_TASKBOARD": "Tableau des tâches", "TITLE_LINK_TASKBOARD": "Aller au tableau des tâches", "PLACEHOLDER_SUBJECT": "Entrez l'objet de la nouvelle tâche", - "TITLE_SELECT_STATUS": "Nom de l'état", + "TITLE_SELECT_STATUS": "Nom du statut", "OWNER_US": "La tâche appartient à", "TITLE_LINK_GO_OWNER": "Aller au récit utilisateur", "ORIGIN_US": "Cette tâche a été créée par", @@ -1581,8 +1581,8 @@ "TASK_CREATED_WITH_US": "{{username}} a créé une nouvelle tâche {{obj_name}} dans le projet {{project_name}} pour le récit utilisateur {{us_name}}", "WIKI_CREATED": "{{username}} a créé une nouvelle page wiki {{obj_name}} dans {{project_name}}", "MILESTONE_CREATED": "{{username}} a créé un nouveau sprint {{obj_name}} dans {{project_name}}", - "EPIC_CREATED": "{{username}} has created a new epic {{obj_name}} in {{project_name}}", - "EPIC_RELATED_USERSTORY_CREATED": "{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}", + "EPIC_CREATED": "{{username}} a créé une nouvelle épopée {{obj_name}} dans {{project_name}}", + "EPIC_RELATED_USERSTORY_CREATED": "{{username}} a lié le récit utilisateur {{related_us_name}} à l'épopée {{epic_name}} dans {{project_name}}", "NEW_PROJECT": "{{username}} a créé le projet {{project_name}}", "MILESTONE_UPDATED": "{{username}} a mis à jour le sprint {{obj_name}}", "US_UPDATED": "{{username}} a mis à jour l'attribut «{{field_name}}» du récit utilisateur {{obj_name}}", @@ -1595,13 +1595,13 @@ "TASK_UPDATED_WITH_US": "{{username}} a mis à jour l'attribut «{{field_name}}» de la tâche {{obj_name}} qui appartient au récit utilisateur {{us_name}}", "TASK_UPDATED_WITH_US_NEW_VALUE": "{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour la tâche {{obj_name}} appartenant au récit utilisateur {{us_name}}", "WIKI_UPDATED": "{{username}} a mis à jour la page wiki {{obj_name}}", - "EPIC_UPDATED": "{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}", - "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}", - "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ", + "EPIC_UPDATED": "{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}}", + "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}} en {{new_value}}", + "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}} en ", "NEW_COMMENT_US": "{{username}} a commenté le récit utilisateur {{obj_name}}", "NEW_COMMENT_ISSUE": "{{username}} a commenté le ticket {{obj_name}}", "NEW_COMMENT_TASK": "{{username}} a commenté la tâche {{obj_name}}", - "NEW_COMMENT_EPIC": "{{username}} has commented in the epic {{obj_name}}", + "NEW_COMMENT_EPIC": "{{username}} a ajouté un commentaire dans l'épopée {{obj_name}}", "NEW_MEMBER": "{{project_name}} a un nouveau membre", "US_ADDED_MILESTONE": "{{username}} a ajouté le récit utilisateur {{obj_name}} à {{sprint_name}}", "US_MOVED": "{{username}} a déplacé le RU {{obj_name}}", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 34eb2d2e..1cb4430c 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -11,7 +11,7 @@ "CANCEL": "Annulla", "ACCEPT": "Accetta", "DELETE": "Elimina", - "UNLINK": "Unlink", + "UNLINK": "Scollega", "CREATE": "Crea", "ADD": "Aggiungi", "COPY_TO_CLIPBOARD": "Copia nella clipboard: Ctrl+C", @@ -20,7 +20,7 @@ "TAG_LINE": "Il tuo agile, libero e opensource strumento di project management", "TAG_LINE_2": "ADORO IL VOSTRO PROGETTO", "BLOCK": "Blocca", - "BLOCK_TITLE": "Block this item for example if it has a dependency that can not be satisfied", + "BLOCK_TITLE": "Blocca questo elemento se per esempio ha dipendenze che non possono essere soddisfatte", "BLOCKED": "Bloccato", "UNBLOCK": "Sblocca", "UNBLOCK_TITLE": "Sblocca questo elemento", @@ -36,7 +36,7 @@ "ONE_ITEM_LINE": "Un elemento per riga...", "NEW_BULK": "Nuovo inserimento nel carico", "RELATED_TASKS": "Compiti correlati", - "PREVIOUS": "Previous", + "PREVIOUS": "Precedente", "NEXT": "Successivo", "LOGOUT": "Esci", "EXTERNAL_USER": "un utente esterno", @@ -44,14 +44,14 @@ "IOCAINE_TEXT": "Sei stremato? Assicurati che gli altri lo sappiano cliccando su 'aspirina' quando stai lavorando su un compito che ti affatica. Ma non demordere, ricordati: si può migliorare solo se di tanto in tanto si accettano sfide extra!", "CLIENT_REQUIREMENT": "Requisito del Cliente è un nuovo requisito che non era stato previsto ed ora è stato richiesto come requisito del progetto", "TEAM_REQUIREMENT": "Requisito del Team è un requisito che deve esistere nel progetto ma non deve avere costi per il cliente", - "OWNER": "Project Owner", - "CAPSLOCK_WARNING": "Be careful! You are using capital letters in an input field that is case sensitive.", - "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Are you sure you want to close the edit mode?", - "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Remember that if you close the edit mode without saving all the changes will be lost", - "RELATED_USERSTORIES": "Related user stories", + "OWNER": "Proprietario Progetto", + "CAPSLOCK_WARNING": "Attento! Stai usando lettere maiuscole in un campo che è case sensitive", + "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Sei sicuro di voler chiudere la modalità modifica?", + "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Ricorda che se chiudi la modalità modifica senza salvare, tutte le modifiche saranno perse", + "RELATED_USERSTORIES": "Storie utente colleggate", "CARD": { - "ASSIGN_TO": "Assign To", - "EDIT": "Edit card" + "ASSIGN_TO": "Assegna a", + "EDIT": "Modifica la scheda" }, "FORM_ERRORS": { "DEFAULT_MESSAGE": "Questo valore non è valido.", @@ -77,8 +77,8 @@ "MAX_CHECK": "Devi selezionare la scelta %s o meno.", "RANGE_CHECK": "Devi selezionare tra %s e %s scelta.", "EQUAL_TO": "Il valore dovrebbe essere uguale", - "LINEWIDTH": "One or more lines is perhaps too long. Try to keep under %s characters.", - "PIKADAY": "Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)" + "LINEWIDTH": "Una o più linee è forse un po' troppo. Cerca di stare sotto i %s caratteri.", + "PIKADAY": "Formato data invalido, per favore usa GG MMM AAAA (ad esempio 23 Mar 1984)" }, "PICKERDATE": { "FORMAT": "DD MMM YYYY", @@ -125,7 +125,7 @@ "ISSUE": "Problema", "EPIC": "Epic", "TAGS": { - "PLACEHOLDER": "Enter tag", + "PLACEHOLDER": "Inserisci tag", "DELETE": "Elimina tag", "ADD": "Aggiungi un tag" }, @@ -209,7 +209,7 @@ "TITLE_ACTION_SEARCH": "Cerca", "ACTION_SAVE_CUSTOM_FILTER": "salva come filtro personalizzato", "PLACEHOLDER_FILTER_NAME": "Scrivi il nome del filtro e premi invio", - "APPLIED_FILTERS_NUM": "filters applied", + "APPLIED_FILTERS_NUM": "filtri impostati", "CATEGORIES": { "TYPE": "Tipo", "STATUS": "Stato", @@ -253,18 +253,18 @@ "CODE_BLOCK_SAMPLE_TEXT": "Inserire qui il testo...", "PREVIEW_BUTTON": "Anteprima", "EDIT_BUTTON": "Modifica", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Allega file trascinandoli nell'area qui sopra", + "ATTACH_FILE_HELP_SAVE_FIRST": "Se vuoi allegare file trascinandoli nell'area qui sopra, prima salva", "MARKDOWN_HELP": "Aiuto per la sintassi Markdown" }, "PERMISIONS_CATEGORIES": { "EPICS": { - "NAME": "Epics", - "VIEW_EPICS": "View epics", - "ADD_EPICS": "Add epics", - "MODIFY_EPICS": "Modify epics", - "COMMENT_EPICS": "Comment epics", - "DELETE_EPICS": "Delete epics" + "NAME": "Epici", + "VIEW_EPICS": "Vedi epic", + "ADD_EPICS": "Aggiungi epic", + "MODIFY_EPICS": "Modifica epici", + "COMMENT_EPICS": "Commenta epic", + "DELETE_EPICS": "Cancella epici" }, "SPRINTS": { "NAME": "Sprints", @@ -278,7 +278,7 @@ "VIEW_USER_STORIES": "Vai alle storie utente", "ADD_USER_STORIES": "Aggiungi le storie utente", "MODIFY_USER_STORIES": "Modifica le storie utente", - "COMMENT_USER_STORIES": "Comment user stories", + "COMMENT_USER_STORIES": "Commenta storie utente", "DELETE_USER_STORIES": "Elimina le storie utente" }, "TASKS": { @@ -286,7 +286,7 @@ "VIEW_TASKS": "Guarda i compiti", "ADD_TASKS": "Aggiungi i compiti", "MODIFY_TASKS": "Modifica i compiti", - "COMMENT_TASKS": "Comment tasks", + "COMMENT_TASKS": "Commenta compiti", "DELETE_TASKS": "Elimina i compiti" }, "ISSUES": { @@ -294,7 +294,7 @@ "VIEW_ISSUES": "Guarda i problemi", "ADD_ISSUES": "Aggiungi un problema", "MODIFY_ISSUES": "Modifica i problemi", - "COMMENT_ISSUES": "Comment issues", + "COMMENT_ISSUES": "Commenta problemi", "DELETE_ISSUES": "Elimina i problemi" }, "WIKI": { @@ -360,8 +360,8 @@ "PLACEHOLDER_FIELD": "Nome utente o email", "ACTION_RESET_PASSWORD": "Reimposta la password", "LINK_CANCEL": "Fa niente dai, riportami indietro. Penso di ricordarmela.", - "SUCCESS_TITLE": "Check your inbox!", - "SUCCESS_TEXT": "We sent you an email with the instructions to set a new password", + "SUCCESS_TITLE": "Controlla la tua inbox!", + "SUCCESS_TEXT": "Ti abbiamo mandato una mail con le istruzioni per impostare una nuova password", "ERROR": "Secondo i nostri Oompa Loompa, non sei ancora registrato." }, "CHANGE_PASSWORD": { @@ -397,7 +397,7 @@ "HOME": { "PAGE_TITLE": "Home - Taiga", "PAGE_DESCRIPTION": "La home di Taiga con i tuoi principali progetti e tutte le storie utente, i compiti e problemi assegnati e osservati. ", - "EMPTY_WORKING_ON": "It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.", + "EMPTY_WORKING_ON": "Sembra vuoto, vero? Inizia a lavorare con Taiga e vedrai qui le storie, task e issue su cui stai lavorando", "EMPTY_WATCHING": "Ossserva Storie Utente, Compiti, Criticità nel progetto e ti verranno notificate le sue modifiche :)", "EMPTY_PROJECT_LIST": "Per ora non hai nessun progetto", "WORKING_ON_SECTION": "Sta lavorando su", @@ -405,38 +405,38 @@ "DASHBOARD": "Dashboard Progetti" }, "EPICS": { - "TITLE": "EPICS", - "SECTION_NAME": "Epics", - "EPIC": "EPIC", - "PAGE_TITLE": "Epics - {{projectName}}", - "PAGE_DESCRIPTION": "The epics list of the project {{projectName}}: {{projectDescription}}", + "TITLE": "EPICI", + "SECTION_NAME": "Epici", + "EPIC": "Epic", + "PAGE_TITLE": "Epici - {{projectName}}", + "PAGE_DESCRIPTION": "La lista di epici del progetto {{projectName}}: {{projectDescription}}", "DASHBOARD": { - "ADD": "+ ADD EPIC", + "ADD": "+ AGGIUNGI EPIC", "UNASSIGNED": "Non assegnato" }, "EMPTY": { - "TITLE": "It looks like there aren't any epics yet", - "EXPLANATION": "Epics are items at a higher level that encompass user stories.
Epics are at the top of the hierarchy and can be used to group user stories together.", - "HELP": "Learn more about epics" + "TITLE": "Sembra che nn ci sia ancora nessun epic", + "EXPLANATION": "Gli epici sono oggetti ad un livello superiore che uniscono storie utente.
Gli epici sono in cima alla gerarchia e possono essere usati per raggruppare insieme storie utente", + "HELP": "Impara di più sugli epici" }, "TABLE": { "VOTES": "Voti", "NAME": "Nome", "PROJECT": "Progetto", "SPRINT": "Sprint", - "ASSIGNED_TO": "Assigned", + "ASSIGNED_TO": "Assegnato", "STATUS": "Stato", - "PROGRESS": "Progress", - "VIEW_OPTIONS": "View options" + "PROGRESS": "Progresso", + "VIEW_OPTIONS": "Vedi le opzioni" }, "CREATE": { - "TITLE": "New Epic", - "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", - "TEAM_REQUIREMENT": "Team requirement", - "CLIENT_REQUIREMENT": "Client requirement", + "TITLE": "Nuovo epic", + "PLACEHOLDER_DESCRIPTION": "Per favore aggiungi una descrizione per aiutare gli altri a capire meglio questo epic", + "TEAM_REQUIREMENT": "Requisito del team", + "CLIENT_REQUIREMENT": "Requisito del cliente", "BLOCKED": "Bloccato", - "BLOCKED_NOTE_PLACEHOLDER": "Why is this epic blocked?", - "CREATE_EPIC": "Create epic" + "BLOCKED_NOTE_PLACEHOLDER": "Perchè questa epic è bloccata?", + "CREATE_EPIC": "Crea epic" } }, "PROJECTS": { @@ -447,8 +447,8 @@ "ATTACHMENT": { "SECTION_NAME": "allegati", "TITLE": "{{ fileName }} caricato il {{ date }}", - "LIST_VIEW_MODE": "List view mode", - "GALLERY_VIEW_MODE": "Gallery view mode", + "LIST_VIEW_MODE": "Modalità lista", + "GALLERY_VIEW_MODE": "Modalità galleria", "DESCRIPTION": "Inserisci una breve descrizione", "DEPRECATED": "(deprecato)", "DEPRECATED_FILE": "Deprecato?", @@ -488,8 +488,8 @@ "PAGE_TITLE": "Webhooks - {{projectName}}", "ADD_BUTTON": "Nuovo Membro", "ADD_BUTTON_TITLE": "Aggiungi un nuovo membro", - "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "Unfortunately, this project has reached its limit of ({{members}}) allowed members.", - "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator." + "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "Sfortunatamente, questo progetto ha raggiunto il suo limite di ({{members}}) membri.", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "Sfortunatamente, questo progetto ha raggiunto il suo limite di ({{members}}) membri. Se vuoi aumentare il limite per favore contatta l'amministratore." }, "PROJECT_EXPORT": { "TITLE": "Esporta", @@ -509,14 +509,14 @@ "TITLE": "Moduli", "ENABLE": "Abilita", "DISABLE": "Disabilita", - "EPICS": "Epics", - "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", + "EPICS": "Epici", + "EPICS_DESCRIPTION": "Visulaizza e controlla la parte più strategica del tuo progetto", "BACKLOG": "Backlog", "BACKLOG_DESCRIPTION": "Amministra le storie degli utenti per mantenere una visione organizzata dei lavori in arrivo e di quelli ad alta priorità ", - "NUMBER_SPRINTS": "Expected number of sprints", - "NUMBER_SPRINTS_HELP": "0 for an undetermined number", - "NUMBER_US_POINTS": "Expected total of story points", - "NUMBER_US_POINTS_HELP": "0 for an undetermined number", + "NUMBER_SPRINTS": "Numero di Sprint previsto", + "NUMBER_SPRINTS_HELP": "0 per indeterminato", + "NUMBER_US_POINTS": "Numero di punti totali della storia previsto", + "NUMBER_US_POINTS_HELP": "0 per indeterminato", "KANBAN": "Kanban", "KANBAN_DESCRIPTION": "Organizza in modo semplice il tuo progetto con questa board", "ISSUES": "problemi", @@ -524,9 +524,9 @@ "WIKI": "Wiki", "WIKI_DESCRIPTION": "Aggiungi, modifica o elimina i contenuti in collaborazione con gli altri. E' il posto giusto per la documentazione del tuo progetto", "MEETUP": "Incontro", - "MEETUP_DESCRIPTION": "Choose your videoconference system.", + "MEETUP_DESCRIPTION": "Scegli il tuo sistema di videoconferenza", "SELECT_VIDEOCONFERENCE": "Seleziona un sistema di videoconferenza", - "SALT_CHAT_ROOM": "Add a prefix to the chatroom name", + "SALT_CHAT_ROOM": "Aggiungi un prefisso al nome della chatroom", "JITSI_CHAT_ROOM": "Jitsi", "APPEARIN_CHAT_ROOM": "AppearIn", "TALKY_CHAT_ROOM": "Talky", @@ -550,19 +550,19 @@ "LOGO_HELP": "L'immagine sarà scalata a 80x80px.", "CHANGE_LOGO": "Cambia Logo", "ACTION_USE_DEFAULT_LOGO": "Usa l'immagine di default", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", - "MAX_PRIVATE_PROJECTS_MEMBERS": "The maximum number of members for private projects has been exceeded", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects allowed by your current plan", - "MAX_PUBLIC_PROJECTS_MEMBERS": "The project exceeds your maximum number of members for public projects", - "PROJECT_OWNER": "Project owner", - "REQUEST_OWNERSHIP": "Request ownership", - "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "Do you want to become the new project owner?", - "REQUEST_OWNERSHIP_DESC": "Request that current project owner {{name}} transfer ownership of this project to you.", + "MAX_PRIVATE_PROJECTS": "Hai raggiunto il numero massimo di progetti privati per il tuo abbonamento", + "MAX_PRIVATE_PROJECTS_MEMBERS": "È stato superato il numero massimo di membri per progetti privati", + "MAX_PUBLIC_PROJECTS": "Sfortunatamente hai raggiunto il numero massimo di progetti pubblici per il tuo abbonamento", + "MAX_PUBLIC_PROJECTS_MEMBERS": "Il progetto super il tuo numero massimo di membri per progetti pubblici", + "PROJECT_OWNER": "Proprietario progetto", + "REQUEST_OWNERSHIP": "Richiedi proprietà", + "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "Vuoi diventare il nuovo proprietario del progetto?", + "REQUEST_OWNERSHIP_DESC": "Richiedi che l'attuale proprietario del progetto {{name}} trasferisca ti la proprietà.", "REQUEST_OWNERSHIP_BUTTON": "Richiesta", - "REQUEST_OWNERSHIP_SUCCESS": "We'll notify the project owner", - "CHANGE_OWNER": "Change owner", - "CHANGE_OWNER_SUCCESS_TITLE": "Ok, your request has been sent!", - "CHANGE_OWNER_SUCCESS_DESC": "We will notify you by email if the project ownership request is accepted or declined" + "REQUEST_OWNERSHIP_SUCCESS": "Invieremo una notifica al proprietario del progetto", + "CHANGE_OWNER": "Cambia proprietario", + "CHANGE_OWNER_SUCCESS_TITLE": "Ok, la tua richiesta è stata inviata!", + "CHANGE_OWNER_SUCCESS_DESC": "Ti invieremo una notifica via mail se la richiesta della mproprietà del progetto è accettata o rifiutata" }, "REPORTS": { "TITLE": "Rapporti", @@ -573,7 +573,7 @@ "REGENERATE_SUBTITLE": "Stai per modificare l'url di accesso al CSV. il precedente url verrá disabilitato. Sei sicuro?" }, "CSV": { - "SECTION_TITLE_EPIC": "epics reports", + "SECTION_TITLE_EPIC": "Report epici", "SECTION_TITLE_US": "Report delle storie utente", "SECTION_TITLE_TASK": "Analisi dei compiti", "SECTION_TITLE_ISSUE": "Report criticitá", @@ -586,8 +586,8 @@ "CUSTOM_FIELDS": { "TITLE": "Campi Personalizzati", "SUBTITLE": "Specifica i campi personalizzati per le tue Storie Utente, compiti e problemi", - "EPIC_DESCRIPTION": "Epics custom fields", - "EPIC_ADD": "Add a custom field in epics", + "EPIC_DESCRIPTION": "Campi personalizzati degli epici", + "EPIC_ADD": "Aggiungi un campo personalizzato nell'epic", "US_DESCRIPTION": "Campi personalizzati delle storie utente", "US_ADD": "Aggiungi un campo personalizzato nelle storie utente", "TASK_DESCRIPTION": "Campi personalizzati dei Compiti", @@ -625,8 +625,8 @@ "PROJECT_VALUES_STATUS": { "TITLE": "Stato", "SUBTITLE": "Specifica lo stato delle storie utente, i compiti e i problemi saranno affrontati", - "EPIC_TITLE": "Epic Statuses", - "US_TITLE": "User Story Statuses", + "EPIC_TITLE": "Stati dell'epic", + "US_TITLE": "Stati della storia utente", "TASK_TITLE": "Stato dei compiti", "ISSUE_TITLE": "Stato dei problemi" }, @@ -638,14 +638,14 @@ }, "PROJECT_VALUES_TAGS": { "TITLE": "Tag", - "SUBTITLE": "View and edit the color of your tags", - "EMPTY": "Currently there are no tags", - "EMPTY_SEARCH": "It looks like nothing was found with your search criteria", + "SUBTITLE": "Vedi e modifica il colore dei tuoi tag", + "EMPTY": "Attualmente non ci sono tag", + "EMPTY_SEARCH": "Sembra che non ci sia nulla che corrisponda ai criteri ricerca", "ACTION_ADD": "Aggiungi un tag", - "NEW_TAG": "New tag", - "MIXING_HELP_TEXT": "Select the tags that you want to merge", - "MIXING_MERGE": "Merge Tags", - "SELECTED": "Selected" + "NEW_TAG": "Nuovo tag", + "MIXING_HELP_TEXT": "Seleziona i tag che vuoi unire", + "MIXING_MERGE": "Unisci tag", + "SELECTED": "Selezionato" }, "ROLES": { "PAGE_TITLE": "Ruoli - {{projectName}}", @@ -656,7 +656,7 @@ "COUNT_MEMBERS": "{{ role.members_count }} membri con questo ruolo", "TITLE_DELETE_ROLE": "Elimina ruolo", "REPLACEMENT_ROLE": "Tutti gli utenti con questo ruolo saranno spostati a ", - "WARNING_DELETE_ROLE": "Be careful! All role estimations will be removed", + "WARNING_DELETE_ROLE": "Attento! Tutte le stime dei ruoli saranno eliminate", "ERROR_DELETE_ALL": "Non puoi cancellare tutti i valori", "EXTERNAL_USER": "Utente esterno" }, @@ -738,8 +738,8 @@ "DEFAULT_DELETE_MESSAGE": "L'invito a {{email}}" }, "DEFAULT_VALUES": { - "LABEL_EPIC_STATUS": "Default value for epic status selector", - "LABEL_US_STATUS": "Default value for user story status selector", + "LABEL_EPIC_STATUS": "Valore predefinito per la selezione di stati degli epic", + "LABEL_US_STATUS": "Valore predefinito per la selezione di stato della storia utente", "LABEL_POINTS": "Valore standard per punti di selezione", "LABEL_TASK_STATUS": "Valore predefinito per la selezione degli stati del compito", "LABEL_ISSUE_TYPE": "Valore predefinito per il tipo di selezione del problema", @@ -793,21 +793,21 @@ "TITLE": "Servizi" }, "PROJECT_TRANSFER": { - "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", - "PRIVATE": "Private", - "ACCEPTED_PROJECT_OWNERNSHIP": "Congratulations! You're now the new project owner.", - "REJECTED_PROJECT_OWNERNSHIP": "OK. We'll contact the current project owner", + "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Vorresti diventare il nuovo proprietario del progetto?", + "PRIVATE": "Privato", + "ACCEPTED_PROJECT_OWNERNSHIP": "Congratulazioni! Sei il nuovo proprietario del progetto.", + "REJECTED_PROJECT_OWNERNSHIP": "Ok. Contatteremo l'attuale proprietario del progetto", "ACCEPT": "Accetta", - "REJECT": "Reject", - "PROPOSE_OWNERSHIP": "{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.", - "ADD_COMMENT": "Would you like to add a comment for the project owner?", - "UNLIMITED_PROJECTS": "Unlimited", + "REJECT": "Rifiuta", + "PROPOSE_OWNERSHIP": "{{owner}}, l'attuale proprietaroi del progetto {{project}} ha chiesto che tu diventi il nuovo proprietario.", + "ADD_COMMENT": "Vorresti aggiungere un commento per il proprietario del progetto?", + "UNLIMITED_PROJECTS": "Illimitato", "OWNER_MESSAGE": { - "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", - "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" + "PRIVATE": "Per favore ricorda che puoi avere al massimo {{maxProjects}} progetti privati. Attualmente hai {{currentProjects}} progetti privati", + "PUBLIC": "Per favore ricorda che puoi avere al massimo {{maxProjects}} progetti pubblici. Attualmente hai {{currentProjects}} progetti pubblici" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CANT_BE_OWNED": "Attualmente non puoi diventare il proprietario di un progetto di questo tipo. Se vuoi diventare proprietario di questo progetto, per favore contatta l'amministratore così può cambiare le impostazioni del tuo account per permettere la proprietà dei progetti.", + "CHANGE_MY_PLAN": "Cambia il mio abbonamento" } }, "USER": { @@ -849,8 +849,8 @@ "FILTER_TYPE_ALL_TITLE": "Mostra tutto", "FILTER_TYPE_PROJECTS": "Progetti", "FILTER_TYPE_PROJECT_TITLES": "Mostra solo i progetti", - "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS": "Epici", + "FILTER_TYPE_EPIC_TITLES": "Mostra solo gli epici", "FILTER_TYPE_USER_STORIES": "Resoconti", "FILTER_TYPE_USER_STORIES_TITLES": "Mostra solo resoconti utente", "FILTER_TYPE_TASKS": "Compiti", @@ -871,9 +871,9 @@ "WATCHERS_COUNTER_TITLE": "{total, plural, one{un osservatore} other{# osservatori}} ", "MEMBERS_COUNTER_TITLE": "{total, plural, one{un membro} other{# membri}}", "BLOCKED_PROJECT": { - "BLOCKED": "Blocked project", - "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", - "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." + "BLOCKED": "Porgetto bloccato", + "THIS_PROJECT_IS_BLOCKED": "Questo progetto è temporaneamente bloccato", + "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Per sbloccare i tuoi progetti, contatta l'amministratore" }, "STATS": { "PROJECT": "progetto
punti", @@ -938,28 +938,28 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})", "SYNC_SUCCESS": "Il tuo progetto è stato importato con successo", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "Il progetto che stai provando a importare ha {{members}} membri, sfortunatamente, il tuo attuale abbonamento consente un massimo di {{max_membership}} membri per progetto. Se vuoi aumentare questo limite per favore contatta l'amministratore", "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + "TITLE": "Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati", + "DESC": "Il progetto che stai tentando di importare è privato. Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati" }, "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + "TITLE": "Sfortunatamente, il tuo attuale abbonamento non permette altri progetti pubblici", + "DESC": "Il progetto che stai provando a importare è pubblico. Sfortunatamente, il tuo attuale abbonamento non consente ulteriori progetti pubblici." }, "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + "TITLE": "Il tuo abbonamento attuale permette al massimo {{max_memberships}} membri per progetto privato" }, "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + "TITLE": " abbonamento attuale permette al masismo {{max_memberships}} membri per progetto pubblico." }, "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." + "TITLE": "Sfortunatamente il tuo abbonamento attuale non permette ulteriori progetti privati o un aumento di più di {{max_memberships}} membri per progetto privato", + "DESC": "Il progetto che stai provando a importare è privato e ha {{members}} membri." }, "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." + "TITLE": "Sfortunatamente il tuo attuale abbonamento non permette altri progetti pubblici o un aumento dii più di {{max_memberships}} membri per progetto pubblico", + "DESC": "Il progetto che stai cercando di importare è pubblico e ha più di {{members}} membri." } } }, @@ -990,10 +990,10 @@ "SECTION_NAME": "Elimina Account Taiga", "CONFIRM": "Sei sicuro di voler eliminare il tuo account Taiga?", "NEWSLETTER_LABEL_TEXT": "Non voglio più ricevere le vostre newsletter", - "CANCEL": "Back to settings", - "ACCEPT": "Delete account", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "CANCEL": "Torna alle impostazioni", + "ACCEPT": "Cancella account", + "BLOCK_PROJECT": "Ricorda che tutti i progetti che possiedi saranno bloccati quando cancellerai il tuo account. Se vuoi continuare a utilizzare un progetto bloccato, trasferisci la proprietà del progetto a un membro di ciascun progetto prima di cancellare il tuo account.", + "SUBTITLE": "Ci dispiace vederti andare via. Saremo qui se considererai ancora ! :(" }, "DELETE_PROJECT": { "TITLE": "Elimina progetto", @@ -1050,45 +1050,45 @@ "CREATE_MEMBER": { "PLACEHOLDER_INVITATION_TEXT": "(facoltativo) aggiungi un testo personalizzato all'invito. Di qualcosa di simpatico ai tuoi nuovi membri ;-)", "PLACEHOLDER_TYPE_EMAIL": "Scrivi una mail", - "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.", - "LIMIT_USERS_WARNING_MESSAGE": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members." + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "Stai per raggiungere il numero massimo di membri concessi per questo progetto, {{maxMembers}} membri. Se vuoi aumentare il limite attuale, per favore contatta l'amministratore.", + "LIMIT_USERS_WARNING_MESSAGE": "Stai per raggiungere il numero massimo di membri concessi per questo progetto, {{maxMembers}} membri." }, "LEAVE_PROJECT_WARNING": { - "TITLE": "Unfortunately, this project can't be left without an owner", + "TITLE": "Sfortunatamente, questo progetto non può essere abbandonato senza un proprietario", "CURRENT_USER_OWNER": { - "DESC": "You are the current owner of this project. Before leaving, please transfer ownership to someone else.", - "BUTTON": "Change the project owner" + "DESC": "Sei l'attuale proprietario di questo progetto. Prima di lasciare, per favore trasferisci la proprietà a qualcun'altro", + "BUTTON": "Cambia il proprietario del progetto" }, "OTHER_USER_OWNER": { - "DESC": "Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.", - "BUTTON": "Request project owner change" + "DESC": "Sfortunatamente, non puoi cancellare un membro che è anche proprietario del progetto corrente. Prima assegna il progetto ad un nuovo proprietario.", + "BUTTON": "Richiedi cambiamento del proprietario del progetto" } }, "CHANGE_OWNER": { - "TITLE": "Who do you want to be the new project owner?", - "ADD_COMMENT": "Add comment", - "BUTTON": "Ask this project member to become the new project owner" + "TITLE": "Chi vuoi che sia il nuovo proprietario del progetto?", + "ADD_COMMENT": "Aggiungi commento", + "BUTTON": "Chiedi a questo membro di diventare il nuovo proprietario del progetto" } }, "EPIC": { "PAGE_TITLE": "{{epicSubject}} - Epic {{epicRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", + "PAGE_DESCRIPTION": "Stauts: {{epicStatus }}. Descrizione: {{epicDescription}}", "SECTION_NAME": "Epic", - "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", - "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", - "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", - "CREATE_RELATED_USERSTORIES": "Create a relationship with", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Sgancia storia utente collegata", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Cancellerà il collegamento alla storia utente '{{subject}}'", + "ERROR_UNLINK_RELATED_USERSTORY": "Non siamo riusciti a scollegare: {{erroreMessage}}", + "CREATE_RELATED_USERSTORIES": "Crea una relazione con", "NEW_USERSTORY": "Nuova storia utente", - "EXISTING_USERSTORY": "Existing user story", - "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", + "EXISTING_USERSTORY": "Storia utente esistente", + "CHOOSE_PROJECT_FOR_CREATION": "Qual'è il progetto?", "SUBJECT": "Oggetto", - "SUBJECT_BULK_MODE": "Subject (bulk insert)", - "CHOOSE_PROJECT_FROM": "What's the project?", - "CHOOSE_USERSTORY": "What's the user story?", - "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", - "FILTER_USERSTORIES": "Filter user stories", - "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", - "ACTION_DELETE": "Delete epic" + "SUBJECT_BULK_MODE": "Oggetto (inserimento massivo)", + "CHOOSE_PROJECT_FROM": "Qual'è il progetto?", + "CHOOSE_USERSTORY": "Qual'è la storia utente?", + "NO_USERSTORIES": "Questo progetto non ha ancora Storie Utente. Per favore selezione un altro progetto.", + "FILTER_USERSTORIES": "Filtra le storie utente", + "LIGHTBOX_TITLE_BLOKING_EPIC": "Epic bloccante", + "ACTION_DELETE": "Cancella epic" }, "US": { "PAGE_TITLE": "{{userStorySubject}} - User Story {{userStoryRef}} - {{projectName}}", @@ -1111,15 +1111,15 @@ "NOT_ESTIMATED": "Non stimato", "TOTAL_US_POINTS": "Totale punti della storia utente", "TRIBE": { - "PUBLISH": "Publish as Gig in Taiga Tribe", - "PUBLISH_INFO": "More info", - "PUBLISH_TITLE": "More info on publishing in Taiga Tribe", - "PUBLISHED_AS_GIG": "Story published as Gig in Taiga Tribe", - "EDIT_LINK": "Edit link", - "CLOSE": "Close", - "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", - "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

" + "PUBLISH": "Pubblica come Gig in Taiga Tribe", + "PUBLISH_INFO": "Più info", + "PUBLISH_TITLE": "Più info sulla pubblicazione in Taiga Tribe", + "PUBLISHED_AS_GIG": "Storia pubblicata come Gig in Taiga Tribe", + "EDIT_LINK": "Modifica collegamento", + "CLOSE": "Chiudi", + "SYNCHRONIZE_LINK": "sincronizza con Taiga Tribe", + "PUBLISH_MORE_INFO_TITLE": "Hai bisogno di qualcuno per questo task?", + "PUBLISH_MORE_INFO_TEXT": "

Se hai bisogno di aiuto per un particolare lavoro puoi creare facilmente annunci on Taiga Tribe e ricevere aiuto da tutto il mondo. Sarai in grado di controllare e gestire l'annuncio godendo di una fantastica comunità vogliosa di contribuire.

Taiga Tribe è nato come fratello di Taiga. Entrambe le piattaforme posso vivere separatamente, ma noi crediamo sia molto potente usarle insieme e vogliamo essere certi che l'integrazione funziona senza problemi.

" }, "FIELDS": { "TEAM_REQUIREMENT": "Requisito del team", @@ -1128,16 +1128,16 @@ } }, "COMMENTS": { - "DELETED_INFO": "Comment deleted by {{user}}", + "DELETED_INFO": "Commento eliminato da {{user}}", "TITLE": "Commenti", - "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", - "OLDER_FIRST": "Older first", - "RECENT_FIRST": "Recent first", + "COMMENTS_COUNT": "{{comments}} Commenti", + "ORDER": "Ordine", + "OLDER_FIRST": "I più vecchi prima", + "RECENT_FIRST": "I più recenti prima", "COMMENT": "Commento", - "EDIT_COMMENT": "Edit comment", - "EDITED_COMMENT": "Edited:", - "SHOW_HISTORY": "View historic", + "EDIT_COMMENT": "Modifica commento", + "EDITED_COMMENT": "Modificato:", + "SHOW_HISTORY": "Vai alla cronologia", "TYPE_NEW_COMMENT": "Scrivi un nuovo commento qui", "SHOW_DELETED": "Visualizza commento cancellato", "HIDE_DELETED": "Nascondi commento cancellato", @@ -1152,20 +1152,20 @@ "DATETIME": "DD MMM YYYY HH:mm", "SHOW_MORE": "Mostra gli inserimenti precedenti ({{showMore}} more)", "TITLE": "Attività", - "ACTIVITIES_COUNT": "{{activities}} Activities", + "ACTIVITIES_COUNT": "{{Activities}} Attività", "REMOVED": "rimosso", "ADDED": "aggiunto", - "TAGS_ADDED": "tags added:", - "TAGS_REMOVED": "tags removed:", - "US_POINTS": "{{role}} points", - "NEW_ATTACHMENT": "new attachment:", - "DELETED_ATTACHMENT": "deleted attachment:", - "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", - "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", - "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", + "TAGS_ADDED": "Tag aggiunti:", + "TAGS_REMOVED": "tag rimossi:", + "US_POINTS": "{{role}} punti", + "NEW_ATTACHMENT": "nuovo allegato:", + "DELETED_ATTACHMENT": "cancella allegato:", + "UPDATED_ATTACHMENT": "Aggiorna allegato ({{filename}}):", + "CREATED_CUSTOM_ATTRIBUTE": "crea un attributo personalizzato", + "UPDATED_CUSTOM_ATTRIBUTE": "attributo personalizzato aggiornato", "SIZE_CHANGE": "Fatto {size, plural, one{un cambiamento} other{# cambiamenti}}", - "BECAME_DEPRECATED": "became deprecated", - "BECAME_UNDEPRECATED": "became undeprecated", + "BECAME_DEPRECATED": "diventa deprecato", + "BECAME_UNDEPRECATED": "diventa accettato", "TEAM_REQUIREMENT": "Requisito del team", "CLIENT_REQUIREMENT": "Requisito del client", "BLOCKED": "Bloccato", @@ -1200,7 +1200,7 @@ "TAGS": "tag", "ATTACHMENTS": "allegati", "IS_DEPRECATED": "è deprecato", - "IS_NOT_DEPRECATED": "is not deprecated", + "IS_NOT_DEPRECATED": "non è deprecato", "ORDER": "ordine", "BACKLOG_ORDER": "Ordine di backlog", "SPRINT_ORDER": "Ordine dello sprint", @@ -1260,7 +1260,7 @@ "IOCAINE_DOSES": "
pasticche di aspirina", "SHOW_STATISTICS_TITLE": "Mostra statistiche", "TOGGLE_BAKLOG_GRAPH": "Mostra/nascondi i grafici burndown", - "POINTS_PER_ROLE": "Points per role" + "POINTS_PER_ROLE": "Punti per ruolo" }, "SUMMARY": { "PROJECT_POINTS": "
punti di progetto", @@ -1438,7 +1438,7 @@ "SEARCH": { "PAGE_TITLE": "Cerca - {{projectName}}", "PAGE_DESCRIPTION": "Cerca storie utenti, problemi, compiti o pagine wiki, all'interno del progetto {{projectName}}: {{projectDescription}}", - "FILTER_EPICS": "Epics", + "FILTER_EPICS": "Epici", "FILTER_USER_STORIES": "Storie Utente", "FILTER_ISSUES": "problemi", "FILTER_TASKS": "Compiti", @@ -1520,16 +1520,16 @@ "WIZARD": { "SECTION_TITLE_CREATE_PROJECT": "Crea Progetto", "CREATE_PROJECT_TEXT": "Nuovo di zecca. Vai così!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", + "CHOOSE_TEMPLATE": "Quale template si adatta meglio al tuo progetto?", + "CHOOSE_TEMPLATE_TITLE": "Più info sui template di progetto", + "CHOOSE_TEMPLATE_INFO": "Più info", + "PROJECT_DETAILS": "Dettagli Progetto", + "PUBLIC_PROJECT": "Progetto Pubblico", + "PRIVATE_PROJECT": "Progetto Privato", "CREATE_PROJECT": "Crea progetto", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "MAX_PRIVATE_PROJECTS": "Hai raggiunto il numero massimo di progetti privati", + "MAX_PUBLIC_PROJECTS": "Sfortunatamente. hai raggiunto il numero massimo di progetti pubblici", + "CHANGE_PLANS": "cambia abbonamento" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", @@ -1538,26 +1538,26 @@ "PLACEHOLDER_PAGE": "Crea la tua pagina wiki", "REMOVE": "Rimuovi questa pagina wiki", "DELETE_LIGHTBOX_TITLE": "Elimina Pagina Wiki", - "DELETE_LINK_TITLE": "Delete Wiki link", + "DELETE_LINK_TITLE": "Cancella collegamento Wiki", "NAVIGATION": { - "HOME": "Main Page", - "SECTION_NAME": "BOOKMARKS", - "ACTION_ADD_LINK": "Add bookmark", - "ALL_PAGES": "All wiki pages" + "HOME": "Pagina principale", + "SECTION_NAME": "SEGNALIBRI", + "ACTION_ADD_LINK": "Aggiungi segnalibro", + "ALL_PAGES": "Tutte le pagine wiki" }, "SUMMARY": { "TIMES_EDITED": "tempo
modificato", "LAST_EDIT": "
ultima modifica", "LAST_MODIFICATION": "ultima modifica" }, - "SECTION_PAGES_LIST": "All pages", + "SECTION_PAGES_LIST": "Tutte le pagine", "PAGES_LIST_COLUMNS": { - "TITLE": "Title", - "EDITIONS": "Editions", + "TITLE": "Titolo", + "EDITIONS": "Edizioni", "CREATED": "Creato", - "MODIFIED": "Modified", - "CREATOR": "Creator", - "LAST_MODIFIER": "Last modifier" + "MODIFIED": "Modificato", + "CREATOR": "Creato da", + "LAST_MODIFIER": "Ultimo a modificare" } }, "HINTS": { @@ -1581,8 +1581,8 @@ "TASK_CREATED_WITH_US": "{{username}} ha creato un nuovo compito {{obj_name}} in {{project_name}} che appartiene alla storia utente {{us_name}}", "WIKI_CREATED": "{{username}} ha creato una nuova pagina wiki {{obj_name}} in {{project_name}}", "MILESTONE_CREATED": "{{username}} ha creato un nuovo sprint {{obj_name}} in {{project_name}}", - "EPIC_CREATED": "{{username}} has created a new epic {{obj_name}} in {{project_name}}", - "EPIC_RELATED_USERSTORY_CREATED": "{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}", + "EPIC_CREATED": "{{username}} ha creato un nuovo epic {{obj_name}} in {{project_name}}", + "EPIC_RELATED_USERSTORY_CREATED": "{{username}} ha collegato la storia utente {{related_us_name}} all'epic {{epic_name}} in {{project_name}}", "NEW_PROJECT": "{{username}} ha creato il progetto {{project_name}}", "MILESTONE_UPDATED": "{{username}} ha aggiornato lo sprint {{obj_name}}", "US_UPDATED": "{{username}} ha aggiornato l'attributo \"{{field_name}}\" alla storia utente {{obj_name}}", @@ -1595,13 +1595,13 @@ "TASK_UPDATED_WITH_US": "{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} che appartiene alla storia utente {{us_name}}", "TASK_UPDATED_WITH_US_NEW_VALUE": "{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} che appartiene alla storia utente {{us_name}} a {{new_value}}", "WIKI_UPDATED": "{{username}} ha aggiornato la pagina wiki {{obj_name}}", - "EPIC_UPDATED": "{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}", - "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}", - "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ", + "EPIC_UPDATED": "{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}}", + "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}} in {{new_value}}", + "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}} in ", "NEW_COMMENT_US": "{{username}} ha commentato nella storia utente {{obj_name}}", "NEW_COMMENT_ISSUE": "{{username}} ha commentato nel problema {{obj_name}}", "NEW_COMMENT_TASK": "{{username}} ha commentato nel compito {{obj_name}}", - "NEW_COMMENT_EPIC": "{{username}} has commented in the epic {{obj_name}}", + "NEW_COMMENT_EPIC": "{{username}} ha commentato nell'epic {{obj_name}}", "NEW_MEMBER": "{{project_name}} ha un nuovo membro", "US_ADDED_MILESTONE": "{{username}} ha aggiunto la storia utente {{obj_name}} a {{sprint_name}}", "US_MOVED": "{{username}} ha spostato la storia utente {{obj_name}}", @@ -1685,7 +1685,7 @@ }, "DISCOVER": { "PAGE_TITLE": "Scopri i progetti - Taiga", - "PAGE_DESCRIPTION": "Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.", + "PAGE_DESCRIPTION": "Elenco ricercabile dei progetti pubblici in Taiga. Esplora i backlog, i problemi e i team. Scopri i progetti più apprezzati o più attivi. Filtra per Kanban o Scrum.", "DISCOVER_TITLE": "Scopri progetti", "DISCOVER_SUBTITLE": "{projects, plural, one{Un progetto pubblico da scoprire} other{# progetti pubblici da scoprire}}", "MOST_ACTIVE": "Più attivi", @@ -1709,7 +1709,7 @@ }, "SEARCH": { "PAGE_TITLE": "Cerca - Scopri i progetti - Taiga", - "PAGE_DESCRIPTION": "Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.", + "PAGE_DESCRIPTION": "Elenco ricercabile dei progetti pubblici in Taiga. Esplora i backlog, le timeline, le issue e i team. Scopri i progetti più piaciuti o più attivi. Filtra per Kanban o Scrum.", "INPUT_PLACEHOLDER": "Inserisci testo...", "ACTION_TITLE": "Cerca", "RESULTS": "Risultati della ricerca" diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 4d149f40..8419f1cf 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -47,11 +47,11 @@ "OWNER": "Project Owner", "CAPSLOCK_WARNING": "Be careful! You are using capital letters in an input field that is case sensitive.", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Are you sure you want to close the edit mode?", - "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Remember that if you close the edit mode without saving all the changes will be lost", + "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Kom ihåg att alla ändringar kommer förloras om du stänger utan att spara", "RELATED_USERSTORIES": "Related user stories", "CARD": { - "ASSIGN_TO": "Assign To", - "EDIT": "Edit card" + "ASSIGN_TO": "Tilldela Till", + "EDIT": "Ändra kort" }, "FORM_ERRORS": { "DEFAULT_MESSAGE": "Det här värdet är felaktigt. ", @@ -77,7 +77,7 @@ "MAX_CHECK": "Du måste välja %s val eller mindre.", "RANGE_CHECK": "Du måste välja mellan %s och %s val.", "EQUAL_TO": "Det här värdet skulle vara det samma. ", - "LINEWIDTH": "One or more lines is perhaps too long. Try to keep under %s characters.", + "LINEWIDTH": "En eller fler rader är kanske för långa. Försök hålla det under % bokstäver.", "PIKADAY": "Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)" }, "PICKERDATE": { @@ -557,10 +557,10 @@ "PROJECT_OWNER": "Project owner", "REQUEST_OWNERSHIP": "Request ownership", "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "Do you want to become the new project owner?", - "REQUEST_OWNERSHIP_DESC": "Request that current project owner {{name}} transfer ownership of this project to you.", + "REQUEST_OWNERSHIP_DESC": "Begär att den nuvarande projektägaren {{namn}} överför ägarskap av det här projektet till dig.", "REQUEST_OWNERSHIP_BUTTON": "Förfrågan", - "REQUEST_OWNERSHIP_SUCCESS": "We'll notify the project owner", - "CHANGE_OWNER": "Change owner", + "REQUEST_OWNERSHIP_SUCCESS": "Vi noterar projektägaren", + "CHANGE_OWNER": "Ända ägare", "CHANGE_OWNER_SUCCESS_TITLE": "Ok, your request has been sent!", "CHANGE_OWNER_SUCCESS_DESC": "We will notify you by email if the project ownership request is accepted or declined" }, @@ -798,16 +798,16 @@ "ACCEPTED_PROJECT_OWNERNSHIP": "Congratulations! You're now the new project owner.", "REJECTED_PROJECT_OWNERNSHIP": "OK. We'll contact the current project owner", "ACCEPT": "Acceptera", - "REJECT": "Reject", + "REJECT": "Avvisa", "PROPOSE_OWNERSHIP": "{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.", - "ADD_COMMENT": "Would you like to add a comment for the project owner?", - "UNLIMITED_PROJECTS": "Unlimited", + "ADD_COMMENT": "Vill du lämna en kommentar till projektägaren?", + "UNLIMITED_PROJECTS": "Obegränsad", "OWNER_MESSAGE": { "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CHANGE_MY_PLAN": "Ändra min plan" } }, "USER": { @@ -1116,9 +1116,9 @@ "PUBLISH_TITLE": "More info on publishing in Taiga Tribe", "PUBLISHED_AS_GIG": "Story published as Gig in Taiga Tribe", "EDIT_LINK": "Edit link", - "CLOSE": "Close", - "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", - "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", + "CLOSE": "Stäng", + "SYNCHRONIZE_LINK": "synkronisera med Taiga Tribe", + "PUBLISH_MORE_INFO_TITLE": "Behöver du någon för den här uppgiften?", "PUBLISH_MORE_INFO_TEXT": "

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

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

" }, "FIELDS": { @@ -1282,7 +1282,7 @@ "TITLE_LINK_TASKBOARD": "Gå till uppgiftspanelen för \"{{name}}\"", "NUMBER_SPRINTS": "
sprintar\n", "EMPTY": "Det är inga sprintar än", - "WARNING_EMPTY_SPRINT_ANONYMOUS": "This sprint has no User Stories", + "WARNING_EMPTY_SPRINT_ANONYMOUS": "Den här sprinten har inga användarhistorier", "WARNING_EMPTY_SPRINT": "Här kan du föra in användarhistorier från inkorgen för att starta en ny sprint", "TITLE_ACTION_NEW_SPRINT": "Lägg till ny sprint", "TEXT_ACTION_NEW_SPRINT": "Du kanske vill skapa en ny sprint i ditt projekt", @@ -1525,7 +1525,7 @@ "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", + "PRIVATE_PROJECT": "Privat Projekt", "CREATE_PROJECT": "Skapa projekt", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", @@ -1538,11 +1538,11 @@ "PLACEHOLDER_PAGE": "Skriv din wiki-sida", "REMOVE": "Ta bort den här wiki-sidan", "DELETE_LIGHTBOX_TITLE": "Ta bort Wiki-sida", - "DELETE_LINK_TITLE": "Delete Wiki link", + "DELETE_LINK_TITLE": "Ta bort wiki-länk", "NAVIGATION": { - "HOME": "Main Page", - "SECTION_NAME": "BOOKMARKS", - "ACTION_ADD_LINK": "Add bookmark", + "HOME": "Huvudsida", + "SECTION_NAME": "BOKMÄRKEN", + "ACTION_ADD_LINK": "Lägg till bokmärke", "ALL_PAGES": "All wiki pages" }, "SUMMARY": { @@ -1550,7 +1550,7 @@ "LAST_EDIT": "senaste
ändring", "LAST_MODIFICATION": "senast modifierad" }, - "SECTION_PAGES_LIST": "All pages", + "SECTION_PAGES_LIST": "Alla sidor", "PAGES_LIST_COLUMNS": { "TITLE": "Title", "EDITIONS": "Editions", @@ -1570,7 +1570,7 @@ "HINT2_TEXT": "Arbetsgrupper kan skapa anpassade flexibla fält för att använda specifika data som passar arbetsflödet. ", "HINT3_TITLE": "Omorganizera dina projekt så de blir mera relevanta för dig", "HINT3_TEXT": "De 10 projekten är listad och du har åtkomst till dem på verktyglinjen på toppen av sidan. ", - "HINT4_TITLE": "Did you forget what were you working on?", + "HINT4_TITLE": "Har du glömt vad du jobbade på?", "HINT4_TEXT": "Du behöver inte bekymra dig. På vårt instrumentpanel vill du hitta öppna uppgifter, ärenden och användarhistorier sorterad efter hur du arbetar med dem. " }, "TIMELINE": { @@ -1686,7 +1686,7 @@ "DISCOVER": { "PAGE_TITLE": "Discover projects - Taiga", "PAGE_DESCRIPTION": "Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.", - "DISCOVER_TITLE": "Discover projects", + "DISCOVER_TITLE": "Upptäck projekt", "DISCOVER_SUBTITLE": "{projects, plural, one{One public project to discover} other{# public projects to discover}}", "MOST_ACTIVE": "Most active", "MOST_ACTIVE_EMPTY": "There are no ACTIVE projects yet", @@ -1700,11 +1700,11 @@ "ALL": "Alla", "KANBAN": "Kanban", "SCRUM": "Scrum", - "PEOPLE": "Looking for people", - "WEEK": "Last week", + "PEOPLE": "Letar efter människor", + "WEEK": "Förra veckan", "MONTH": "Last month", - "YEAR": "Last year", - "ALL_TIME": "All time", + "YEAR": "Förra året", + "ALL_TIME": "All tid", "CLEAR": "Clear filters" }, "SEARCH": { From 7655e5b754a436e4123580a32b78acde2e351cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 5 Oct 2016 14:23:56 +0200 Subject: [PATCH 032/175] Remove comments in entries of activity tabs --- app/modules/history/history/history.jade | 1 - 1 file changed, 1 deletion(-) diff --git a/app/modules/history/history/history.jade b/app/modules/history/history/history.jade index 9e3836fb..41d7cf06 100644 --- a/app/modules/history/history/history.jade +++ b/app/modules/history/history/history.jade @@ -9,7 +9,6 @@ section.activities .activity-data span.activity-creator {{activity.user.name}} span.activity-date {{activity.created_at | momentFormat:'DD MMM YYYY HH:mm'}} - p.activity-text(ng-if="activity.comment") {{activity.comment}} .activity-diff( ng-repeat="(key, diff) in activity.values_diff" From 451b9f979c6832d4bfe67f3dc6fdddfd2ae3cbf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 20 Oct 2016 13:28:10 +0200 Subject: [PATCH 033/175] Fix tg-4674: Show edited comment history --- app/modules/history/comments/comment.jade | 5 ++++- .../comment-history-lightbox.directive.coffee | 8 +++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/modules/history/comments/comment.jade b/app/modules/history/comments/comment.jade index 78258e57..447b8bfd 100644 --- a/app/modules/history/comments/comment.jade +++ b/app/modules/history/comments/comment.jade @@ -15,7 +15,7 @@ include ../../../partials/common/components/wysiwyg.jade span.separator - a( href="" - title="COMMENTS.SHOW_HISTORY" + title="{{'COMMENTS.SHOW_HISTORY' | translate}}" ng-click="vm.displayCommentHistory()" ) span(translate="COMMENTS.SHOW_HISTORY") @@ -74,6 +74,7 @@ include ../../../partials/common/components/wysiwyg.jade span - {{vm.comment.delete_comment_date | momentFormat:'DD MMM YYYY HH:mm'}} a.toggle-deleted-comment( href="" + title="{{ 'COMMENTS.SHOW_DELETED' | translate }}" ng-click="vm.showDeletedComment()" ng-if="vm.hiddenDeletedComment" ) @@ -84,6 +85,7 @@ include ../../../partials/common/components/wysiwyg.jade ) a.toggle-deleted-comment( href="" + title="{{'COMMENTS.HIDE_DELETED' | translate}}" ng-click="vm.hideDeletedComment()" ng-if="!vm.hiddenDeletedComment" ) @@ -94,6 +96,7 @@ include ../../../partials/common/components/wysiwyg.jade ) a.restore-comment( href="" + title="{{'COMMENTS.RESTORE' | translate}}" ng-click="vm.onRestoreDeletedComment({commentId: vm.comment.id})" tg-loading="vm.editing == vm.comment.id" ) diff --git a/app/modules/history/history-lightbox/comment-history-lightbox.directive.coffee b/app/modules/history/history-lightbox/comment-history-lightbox.directive.coffee index b09c99a0..3fa4b966 100644 --- a/app/modules/history/history-lightbox/comment-history-lightbox.directive.coffee +++ b/app/modules/history/history-lightbox/comment-history-lightbox.directive.coffee @@ -17,8 +17,6 @@ # File: comment.directive.coffee ### -module = angular.module('taigaHistory') - LightboxDisplayHistoricDirective = (lightboxService) -> link = (scope, el, attrs, ctrl) -> ctrl._loadHistoric() @@ -37,4 +35,8 @@ LightboxDisplayHistoricDirective = (lightboxService) -> link: link } -module.directive("tgLbDisplayHistoric", LightboxDisplayHistoricDirective) +LightboxDisplayHistoricDirective.$inject = [ + "lightboxService" +] + +angular.module('taigaHistory').directive("tgLbDisplayHistoric", LightboxDisplayHistoricDirective) From 344bbc6325fdd949cd27ec4d1f127adea537f223 Mon Sep 17 00:00:00 2001 From: juanfran Date: Thu, 20 Oct 2016 12:29:35 +0200 Subject: [PATCH 034/175] epics pagination --- .../epics-table/epics-table.controller.coffee | 5 ++ .../epics-table.controller.spec.coffee | 8 ++ .../dashboard/epics-table/epics-table.jade | 10 ++- .../dashboard/epics-table/epics-table.scss | 9 +++ app/modules/epics/epics.service.coffee | 49 ++++++++---- app/modules/epics/epics.service.spec.coffee | 74 ++++++++++++++++--- .../resources/epics-resource.service.coffee | 11 ++- 7 files changed, 138 insertions(+), 28 deletions(-) diff --git a/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee b/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee index 4934b4d9..57967021 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee +++ b/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee @@ -41,6 +41,8 @@ class EpicsTableController } taiga.defineImmutableProperty @, 'epics', () => return @epicsService.epics + taiga.defineImmutableProperty @, 'disabledEpicsPagination', () => return @epicsService._disablePagination + taiga.defineImmutableProperty @, 'loadingEpics', () => return @epicsService._loadingEpics toggleEpicTableOptions: () -> @.displayOptions = !@.displayOptions @@ -50,6 +52,9 @@ class EpicsTableController .then null, () => # on error @confirm.notify("error") + nextPage: () -> + @epicsService.nextPage() + hoverEpicTableOption: () -> if @.timer @timeout.cancel(@.timer) diff --git a/app/modules/epics/dashboard/epics-table/epics-table.controller.spec.coffee b/app/modules/epics/dashboard/epics-table/epics-table.controller.spec.coffee index cdd83c6c..395e6476 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.controller.spec.coffee +++ b/app/modules/epics/dashboard/epics-table/epics-table.controller.spec.coffee @@ -32,6 +32,7 @@ describe "EpicTable", -> _mockTgEpicsService = () -> mocks.tgEpicsService = { createEpic: sinon.stub() + nextPage: sinon.stub() } provide.value "tgEpicsService", mocks.tgEpicsService @@ -55,3 +56,10 @@ describe "EpicTable", -> epicTableCtrl.displayOptions = true epicTableCtrl.toggleEpicTableOptions() expect(epicTableCtrl.displayOptions).to.be.false + + it "next page", () -> + epicTableCtrl = controller "EpicsTableCtrl" + + epicTableCtrl.nextPage() + + expect(mocks.tgEpicsService.nextPage).to.have.been.calledOnce diff --git a/app/modules/epics/dashboard/epics-table/epics-table.jade b/app/modules/epics/dashboard/epics-table/epics-table.jade index fe99fcbd..d9c0dfd4 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.jade +++ b/app/modules/epics/dashboard/epics-table/epics-table.jade @@ -86,7 +86,13 @@ mixin epicSwitch(name, model) for="switch-progress" ) +epicSwitch('switch-progress', 'vm.column.progress') - .epics-table-body(tg-epics-sortable="vm.reorderEpic(epic, newIndex)") + + .epics-table-body( + tg-epics-sortable="vm.reorderEpic(epic, newIndex)" + infinite-scroll="vm.nextPage()" + infinite-scroll-disabled="vm.disabledEpicsPagination" + infinite-scroll-immediate-check="false" + ) .epics-table-body-row( tg-repeat="epic in vm.epics track by epic.get('id')" tg-bind-scope @@ -95,3 +101,5 @@ mixin epicSwitch(name, model) epic="epic" column="vm.column" ) + + div(tg-loading="vm.loadingEpics") diff --git a/app/modules/epics/dashboard/epics-table/epics-table.scss b/app/modules/epics/dashboard/epics-table/epics-table.scss index 8814fbc0..d31fe4a8 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.scss +++ b/app/modules/epics/dashboard/epics-table/epics-table.scss @@ -2,6 +2,15 @@ .epics-table { margin-top: 2rem; + .loading { + margin: 2% auto; + width: 3rem; + img { + @include loading-spinner; + max-height: 3rem; + max-width: 3rem; + } + } } .epics-table-header { diff --git a/app/modules/epics/epics.service.coffee b/app/modules/epics/epics.service.coffee index 4095bbf1..cb611601 100644 --- a/app/modules/epics/epics.service.coffee +++ b/app/modules/epics/epics.service.coffee @@ -28,19 +28,39 @@ class EpicsService ] constructor: (@projectService, @attachmentsService, @resources, @xhrError) -> - @._epics = Immutable.List() + @.clear() + taiga.defineImmutableProperty @, 'epics', () => return @._epics clear: () -> + @._loadingEpics = false + @._disablePagination = false + @._page = 1 @._epics = Immutable.List() - fetchEpics: () -> - return @resources.epics.list(@projectService.project.get('id')) - .then (epics) => - @._epics = epics + fetchEpics: (reset = false) -> + @._loadingEpics = true + @._disablePagination = true + + return @resources.epics.list(@projectService.project.get('id'), @._page) + .then (result) => + if reset + @.clear() + @._epics = result.list + else + @._epics = @._epics.concat(result.list) + + @._loadingEpics = false + + @._disablePagination = !result.headers('x-pagination-next') .catch (xhr) => @xhrError.response(xhr) + nextPage: () -> + @._page++ + + @.fetchEpics() + listRelatedUserStories: (epic) -> return @resources.userstories.listInEpic(epic.get('id')) @@ -52,8 +72,7 @@ class EpicsService promises = _.map attachments.toJS(), (attachment) => @attachmentsService.upload(attachment.file, epic.get('id'), epic.get('project'), 'epic') - Promise.all(promises).then () => - @.fetchEpics() + Promise.all(promises).then(@.fetchEpics.bind(this, true)) reorderEpic: (epic, newIndex) -> withoutMoved = @.epics.filter (it) => it.get('id') != epic.get('id') @@ -72,9 +91,8 @@ class EpicsService epics_order: newOrder, version: epic.get('version') } + return @resources.epics.reorder(epic.get('id'), data, setOrders) - .then () => - @.fetchEpics() reorderRelatedUserstory: (epic, epicUserstories, userstory, newIndex) -> withoutMoved = epicUserstories.filter (it) => it.get('id') != userstory.get('id') @@ -98,6 +116,13 @@ class EpicsService .then () => return @.listRelatedUserStories(epic) + replaceEpic: (epic) -> + @._epics = @._epics.map (it) -> + if it.get('id') == epic.get('id') + return epic + + return it + updateEpicStatus: (epic, statusId) -> data = { status: statusId, @@ -105,8 +130,7 @@ class EpicsService } return @resources.epics.patch(epic.get('id'), data) - .then () => - @.fetchEpics() + .then(@.replaceEpic.bind(this)) updateEpicAssignedTo: (epic, userId) -> data = { @@ -115,7 +139,6 @@ class EpicsService } return @resources.epics.patch(epic.get('id'), data) - .then () => - @.fetchEpics() + .then(@.replaceEpic.bind(this)) angular.module('taigaEpics').service('tgEpicsService', EpicsService) diff --git a/app/modules/epics/epics.service.spec.coffee b/app/modules/epics/epics.service.spec.coffee index 58efa075..a173ca10 100644 --- a/app/modules/epics/epics.service.spec.coffee +++ b/app/modules/epics/epics.service.spec.coffee @@ -91,13 +91,50 @@ describe "tgEpicsService", -> expect(epicsService._epics.size).to.be.equal(0) it "fetch epics success", () -> - epics = Immutable.fromJS([ + result = {} + result.list = Immutable.fromJS([ { id: 111 } { id: 112 } ]) - promise = mocks.tgResources.epics.list.withArgs(1).promise().resolve(epics) - epicsService.fetchEpics().then () -> - expect(epicsService.epics).to.be.equal(epics) + + result.headers = () -> true + + promise = mocks.tgResources.epics.list.withArgs(1).promise() + + fetchPromise = epicsService.fetchEpics() + + expect(epicsService._loadingEpics).to.be.true + expect(epicsService._disablePagination).to.be.true + + promise.resolve(result) + + fetchPromise.then () -> + expect(epicsService.epics).to.be.equal(result.list) + expect(epicsService._loadingEpics).to.be.false + expect(epicsService._disablePagination).to.be.false + + it "fetch epics success, last page", () -> + result = {} + result.list = Immutable.fromJS([ + { id: 111 } + { id: 112 } + ]) + + result.headers = () -> false + + promise = mocks.tgResources.epics.list.withArgs(1).promise() + + fetchPromise = epicsService.fetchEpics() + + expect(epicsService._loadingEpics).to.be.true + expect(epicsService._disablePagination).to.be.true + + promise.resolve(result) + + fetchPromise.then () -> + expect(epicsService.epics).to.be.equal(result.list) + expect(epicsService._loadingEpics).to.be.false + expect(epicsService._disablePagination).to.be.true it "fetch epics error", () -> epics = Immutable.fromJS([ @@ -108,6 +145,23 @@ describe "tgEpicsService", -> epicsService.fetchEpics().then () -> expect(mocks.tgXhrErrorService.response.withArgs(new Error("error"))).have.been.calledOnce + it "replace epic", () -> + epics = Immutable.fromJS([ + { id: 111 } + { id: 112 } + ]) + + epicsService._epics = epics + + epic = Immutable.Map({ + id: 112, + title: "title1" + }) + + epicsService.replaceEpic(epic) + + expect(epicsService._epics.get(1)).to.be.equal(epic) + it "list related userstories", () -> epic = Immutable.fromJS({ id: 1 @@ -155,9 +209,9 @@ describe "tgEpicsService", -> .promise() .resolve() - epicsService.fetchEpics = sinon.stub() + epicsService.replaceEpic = sinon.stub() epicsService.updateEpicStatus(epic, 33).then () -> - expect(epicsService.fetchEpics).have.been.calledOnce + expect(epicsService.replaceEpic).have.been.calledOnce it "Update epic assigned to", () -> epic = Immutable.fromJS({ @@ -171,9 +225,9 @@ describe "tgEpicsService", -> .promise() .resolve() - epicsService.fetchEpics = sinon.stub() + epicsService.replaceEpic = sinon.stub() epicsService.updateEpicAssignedTo(epic, 33).then () -> - expect(epicsService.fetchEpics).have.been.calledOnce + expect(epicsService.replaceEpic).have.been.calledOnce it "reorder epic", () -> epicsService._epics = Immutable.fromJS([ @@ -199,9 +253,7 @@ describe "tgEpicsService", -> .promise() .resolve() - epicsService.fetchEpics = sinon.stub() - epicsService.reorderEpic(epicsService._epics.get(2), 1).then () -> - expect(epicsService.fetchEpics).have.been.calledOnce + epicsService.reorderEpic(epicsService._epics.get(2), 1) it "reorder related userstory in epic", () -> epic = Immutable.fromJS({ diff --git a/app/modules/resources/epics-resource.service.coffee b/app/modules/resources/epics-resource.service.coffee index 293830b9..30d82791 100644 --- a/app/modules/resources/epics-resource.service.coffee +++ b/app/modules/resources/epics-resource.service.coffee @@ -33,13 +33,17 @@ Resource = (urlsService, http) -> .then (result) -> return Immutable.fromJS(result.data) - service.list = (projectId) -> + service.list = (projectId, page=0) -> url = urlsService.resolve("epics") - params = {project: projectId} + params = {project: projectId, page: page} return http.get(url, params) - .then (result) -> Immutable.fromJS(result.data) + .then (result) -> + return { + list: Immutable.fromJS(result.data) + headers: result.headers + } service.patch = (id, patch) -> url = urlsService.resolve("epics") + "/#{id}" @@ -59,6 +63,7 @@ Resource = (urlsService, http) -> options = {"headers": {"set-orders": JSON.stringify(setOrders)}} return http.patch(url, data, null, options) + .then (result) -> Immutable.fromJS(result.data) service.addRelatedUserstory = (epicId, userstoryId) -> url = urlsService.resolve("epic-related-userstories", epicId) From 56327838cdade8422082535a281ca51856ebded0 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 4 Oct 2016 09:12:24 +0200 Subject: [PATCH 035/175] close lightbox if the user press the browswer back button --- app/coffee/app.coffee | 8 +++++++- app/coffee/modules/common/lightboxes.coffee | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 6fd780a3..cc5a7a99 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -690,7 +690,7 @@ i18nInit = (lang, $translate) -> init = ($log, $rootscope, $auth, $events, $analytics, $translate, $location, $navUrls, appMetaService, - loaderService, navigationBarService, errorHandlingService) -> + loaderService, navigationBarService, errorHandlingService, lightboxService) -> $log.debug("Initialize application") $rootscope.$on '$translatePartialLoaderStructureChanged', () -> @@ -737,6 +737,11 @@ init = ($log, $rootscope, $auth, $events, $analytics, $translate, $location, $na $rootscope.$on '$locationChangeStart', (event) -> errorHandlingService.init() + if lightboxService.getLightboxOpen().length + event.preventDefault(); + + lightboxService.closeAll() + # On the first page load the loader is painted in `$routeChangeSuccess` # because we need to hide the tg-navigation-bar. # In the other cases the loader is in `$routeChangeSuccess` @@ -861,5 +866,6 @@ module.run([ "tgLoader", "tgNavigationBarService", "tgErrorHandlingService", + "lightboxService", init ]) diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index 2b42ce89..04d3d0c0 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -97,6 +97,10 @@ class LightboxService extends taiga.Service scope.$destroy() if scope $el.remove() + + getLightboxOpen: -> + return $(".lightbox.open") + closeAll: -> docEl = angular.element(document) for lightboxEl in docEl.find(".lightbox.open") From ee2a385cb3b9d91ae8354f07366a6e282c8d1eac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 20 Oct 2016 18:56:06 +0200 Subject: [PATCH 036/175] Inject a missed dependencie --- .../history-lightbox/history-entry.directive.coffee | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/modules/history/history-lightbox/history-entry.directive.coffee b/app/modules/history/history-lightbox/history-entry.directive.coffee index 42814d29..d5d2a867 100644 --- a/app/modules/history/history-lightbox/history-entry.directive.coffee +++ b/app/modules/history/history-lightbox/history-entry.directive.coffee @@ -17,10 +17,8 @@ # File: comment.directive.coffee ### -module = angular.module('taigaHistory') HistoryEntryDirective = (lightboxService) -> - return { scope: { entry: "<" @@ -28,4 +26,8 @@ HistoryEntryDirective = (lightboxService) -> templateUrl:"history/history-lightbox/history-entry.html", } -module.directive("tgHistoryEntry", HistoryEntryDirective) +HistoryEntryDirective.$inject = [ + "lightboxService" +] + +angular.module('taigaHistory').directive("tgHistoryEntry", HistoryEntryDirective) From 9fbf1322b363cd71f21f5fd415e5df21a773a8e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 20 Oct 2016 19:09:48 +0200 Subject: [PATCH 037/175] Remove injection --- .../history/history-lightbox/history-entry.directive.coffee | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/modules/history/history-lightbox/history-entry.directive.coffee b/app/modules/history/history-lightbox/history-entry.directive.coffee index d5d2a867..f6c573ce 100644 --- a/app/modules/history/history-lightbox/history-entry.directive.coffee +++ b/app/modules/history/history-lightbox/history-entry.directive.coffee @@ -18,7 +18,7 @@ ### -HistoryEntryDirective = (lightboxService) -> +HistoryEntryDirective = () -> return { scope: { entry: "<" @@ -26,8 +26,4 @@ HistoryEntryDirective = (lightboxService) -> templateUrl:"history/history-lightbox/history-entry.html", } -HistoryEntryDirective.$inject = [ - "lightboxService" -] - angular.module('taigaHistory').directive("tgHistoryEntry", HistoryEntryDirective) From 4c55b5618b9d99fce75e8a4bfb937ccd045da969 Mon Sep 17 00:00:00 2001 From: juanfran Date: Thu, 13 Oct 2016 14:45:45 +0200 Subject: [PATCH 038/175] add an independent object in the sprint form and destroy datapicker everytime the date change --- app/coffee/modules/backlog/lightboxes.coffee | 60 +++++++++++-------- app/coffee/modules/backlog/main.coffee | 5 +- app/coffee/modules/backlog/sprints.coffee | 7 +-- app/coffee/modules/base/model.coffee | 10 ++++ app/coffee/modules/common/components.coffee | 21 ++++--- .../modules/lightbox-sprint-add-edit.jade | 8 +-- app/partials/includes/modules/sprint.jade | 2 +- app/partials/includes/modules/sprints.jade | 2 +- 8 files changed, 70 insertions(+), 45 deletions(-) diff --git a/app/coffee/modules/backlog/lightboxes.coffee b/app/coffee/modules/backlog/lightboxes.coffee index d26ca64d..324ce8b1 100644 --- a/app/coffee/modules/backlog/lightboxes.coffee +++ b/app/coffee/modules/backlog/lightboxes.coffee @@ -37,11 +37,12 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, hasErrors = false createSprint = true form = null + $scope.newSprint = {} resetSprint = () -> form.reset() if form - $scope.sprint = { + $scope.newSprint = { project: null name: null estimated_start: null @@ -62,19 +63,23 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, return hasErrors = false - newSprint = angular.copy($scope.sprint) broadcastEvent = null + estimated_start = $('.date-start').val() + estimated_end = $('.date-end').val() + if createSprint - newSprint.estimated_start = moment(newSprint.estimated_start, prettyDate).format("YYYY-MM-DD") - newSprint.estimated_finish = moment(newSprint.estimated_finish,prettyDate).format("YYYY-MM-DD") + newSprint = angular.copy($scope.newSprint) + newSprint.estimated_start = moment(estimated_start, prettyDate).format("YYYY-MM-DD") + newSprint.estimated_finish = moment(estimated_end, prettyDate).format("YYYY-MM-DD") + promise = $repo.create("milestones", newSprint) broadcastEvent = "sprintform:create:success" else - 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")) + newSprint = $scope.newSprint.realClone() + newSprint.estimated_start = moment(estimated_start, prettyDate).format("YYYY-MM-DD") + newSprint.estimated_finish = moment(estimated_end, prettyDate).format("YYYY-MM-DD") + promise = $repo.save(newSprint) broadcastEvent = "sprintform:edit:success" @@ -85,6 +90,13 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, promise.then (data) -> currentLoading.finish() $scope.sprintsCounter += 1 if createSprint + + $scope.sprints = _.map $scope.sprints, (it) -> + if it.id == data.id + return data + else + return it + $rootscope.$broadcast(broadcastEvent, data) lightboxService.close($el) @@ -100,19 +112,19 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, remove = -> title = $translate.instant("LIGHTBOX.DELETE_SPRINT.TITLE") - message = $scope.sprint.name + message = $scope.newSprint.name $confirm.askOnDelete(title, message).then (askResponse) => onSuccess = -> askResponse.finish() $scope.milestonesCounter -= 1 lightboxService.close($el) - $rootscope.$broadcast("sprintform:remove:success", $scope.sprint) + $rootscope.$broadcast("sprintform:remove:success", $scope.newSprint) onError = -> askResponse.finish(false) $confirm.notify("error") - $repo.remove($scope.sprint).then(onSuccess, onError) + $repo.remove($scope.newSprint).then(onSuccess, onError) getLastSprint = -> openSprints = _.filter $scope.sprints, (sprint) -> @@ -131,9 +143,9 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, createSprint = true prettyDate = $translate.instant("COMMON.PICKERDATE.FORMAT") - $scope.sprint.project = projectId - $scope.sprint.name = null - $scope.sprint.slug = null + $scope.newSprint.project = projectId + $scope.newSprint.name = null + $scope.newSprint.slug = null lastSprint = getLastSprint() @@ -141,19 +153,19 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, if lastSprint estimatedStart = moment(lastSprint.estimated_finish) - else if $scope.sprint.estimated_start - estimatedStart = moment($scope.sprint.estimated_start) + else if $scope.newSprint.estimated_start + estimatedStart = moment($scope.newSprint.estimated_start) - $scope.sprint.estimated_start = estimatedStart.format(prettyDate) + $scope.newSprint.estimated_start = estimatedStart.format(prettyDate) estimatedFinish = moment().add(2, "weeks") if lastSprint estimatedFinish = moment(lastSprint.estimated_finish).add(2, "weeks") - else if $scope.sprint.estimated_finish - estimatedFinish = moment($scope.sprint.estimated_finish) + else if $scope.newSprint.estimated_finish + estimatedFinish = moment($scope.newSprint.estimated_finish) - $scope.sprint.estimated_finish = estimatedFinish.format(prettyDate) + $scope.newSprint.estimated_finish = estimatedFinish.format(prettyDate) lastSprintNameDom = $el.find(".last-sprint-name") if lastSprint?.name? @@ -179,10 +191,10 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, createSprint = false prettyDate = $translate.instant("COMMON.PICKERDATE.FORMAT") - $scope.$apply -> - $scope.sprint = sprint - $scope.sprint.estimated_start = moment($scope.sprint.estimated_start).format(prettyDate) - $scope.sprint.estimated_finish = moment($scope.sprint.estimated_finish).format(prettyDate) + $scope.$apply () -> + $scope.newSprint = sprint.realClone() + $scope.newSprint.estimated_start = moment($scope.newSprint.estimated_start).format(prettyDate) + $scope.newSprint.estimated_finish = moment($scope.newSprint.estimated_finish).format(prettyDate) $el.find(".delete-sprint").removeClass("hidden") diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index c742d74f..b1527031 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -239,7 +239,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F sprint.user_stories = _.sortBy(sprint.user_stories, "sprint_order") @scope.sprints = sprints - @scope.openSprints = _.filter(sprints, (sprint) => not sprint.closed).reverse() + @scope.closedSprints = [] if !@scope.closedSprints @scope.sprintsCounter = sprints.length @@ -250,6 +250,9 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F return sprints + openSprints: -> + return _.filter(@scope.sprints, (sprint) => not sprint.closed).reverse() + loadAllPaginatedUserstories: () -> page = @.page diff --git a/app/coffee/modules/backlog/sprints.coffee b/app/coffee/modules/backlog/sprints.coffee index fb7ee961..41cd56c0 100644 --- a/app/coffee/modules/backlog/sprints.coffee +++ b/app/coffee/modules/backlog/sprints.coffee @@ -98,6 +98,7 @@ BacklogSprintHeaderDirective = ($navUrls, $template, $compile, $translate) -> start = moment(sprint.estimated_start).format(prettyDate) finish = moment(sprint.estimated_finish).format(prettyDate) + estimatedDateRange = "#{start}-#{finish}" ctx = { @@ -117,19 +118,15 @@ BacklogSprintHeaderDirective = ($navUrls, $template, $compile, $translate) -> compiledTemplate = $compile(template)(templateScope) $el.html(compiledTemplate) - $scope.$watch $attrs.ngModel, (sprint) -> + $scope.$watch "sprint", (sprint) -> render(sprint) - $scope.$on "sprintform:edit:success", -> - render($model.$modelValue) - $scope.$on "$destroy", -> $el.off() return { link: link restrict: "EA" - require: "ngModel" } module.directive("tgBacklogSprintHeader", ["$tgNavUrls", "$tgTemplate", "$compile", "$translate" diff --git a/app/coffee/modules/base/model.coffee b/app/coffee/modules/base/model.coffee index e91a3a0b..36f157be 100644 --- a/app/coffee/modules/base/model.coffee +++ b/app/coffee/modules/base/model.coffee @@ -31,6 +31,16 @@ class Model @.setAttrs(data) @.initialize() + realClone: -> + attrs = _.cloneDeep(@._attrs) + + instance = new Model(@._name, attrs, @._dataTypes) + + instance._modifiedAttrs = _.cloneDeep(@._modifiedAttrs) + instance._isModified = _.cloneDeep(@._isModified) + + return instance + clone: -> instance = new Model(@._name, @._attrs, @._dataTypes) instance._modifiedAttrs = @._modifiedAttrs diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index 5da45d4a..4a020dbc 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -64,27 +64,30 @@ DateSelectorDirective = ($rootscope, datePickerConfigService) -> _.merge(datePickerConfig, { field: $el[0] - onSelect: (date) => - selectedDate = date - onOpen: => - $el.picker.setDate(selectedDate) if selectedDate? }) $el.picker = new Pikaday(datePickerConfig) - unbind = $rootscope.$on "$translateChangeEnd", (ctx) => initialize() + unbind = $rootscope.$on "$translateChangeEnd", (ctx) => + $el.picker.destroy() if $el.picker + initialize() - $scope.$watch $attrs.ngModel, (val) -> - initialize() if val? and not $el.picker - $el.picker.setDate(val) if val? + $attrs.$observe "pickerValue", (val) -> + $el.val(val) + + if val? + $el.picker.destroy() if $el.picker + initialize() + + $el.picker.setDate(val) $scope.$on "$destroy", -> $el.off() unbind() + $el.picker.destroy() return { link: link - require: "ngModel" } module.directive("tgDateSelector", ["$rootScope", "tgDatePickerConfigService", DateSelectorDirective]) diff --git a/app/partials/includes/modules/lightbox-sprint-add-edit.jade b/app/partials/includes/modules/lightbox-sprint-add-edit.jade index e0ceddc7..254e3276 100644 --- a/app/partials/includes/modules/lightbox-sprint-add-edit.jade +++ b/app/partials/includes/modules/lightbox-sprint-add-edit.jade @@ -6,7 +6,7 @@ form input.sprint-name( type="text" name="name" - ng-model="sprint.name" + ng-model="newSprint.name" ng-model-options="{ debounce: 200 }" data-required="true" data-maxlength="500" @@ -19,16 +19,16 @@ form input.date-start( type="text" name="estimated_start" - ng-model="sprint.estimated_start" + picker-value="{{newSprint.estimated_start}}" data-required="true" - tg-date-selector + tg-date-selector placeholder="{{'LIGHTBOX.ADD_EDIT_SPRINT.PLACEHOLDER_SPRINT_START' | translate}}" ) div input.date-end( type="text" name="estimated_finish" - ng-model="sprint.estimated_finish" + picker-value="{{newSprint.estimated_finish}}" data-required="true" tg-date-selector placeholder="{{'LIGHTBOX.ADD_EDIT_SPRINT.PLACEHOLDER_SPRINT_END' | translate}}" diff --git a/app/partials/includes/modules/sprint.jade b/app/partials/includes/modules/sprint.jade index f85bc3d6..429db948 100644 --- a/app/partials/includes/modules/sprint.jade +++ b/app/partials/includes/modules/sprint.jade @@ -1,4 +1,4 @@ -header(tg-backlog-sprint-header, ng-model="sprint") +header(tg-backlog-sprint-header) .summary-progress-wrapper div.sprint-progress-bar(tg-progress-bar="100 * sprint.closed_points / sprint.total_points") diff --git a/app/partials/includes/modules/sprints.jade b/app/partials/includes/modules/sprints.jade index 8c0b856b..f901627c 100644 --- a/app/partials/includes/modules/sprints.jade +++ b/app/partials/includes/modules/sprints.jade @@ -29,7 +29,7 @@ section.sprints tg-check-permission="add_milestone" ) - div.sprint.sprint-open(ng-repeat="sprint in openSprints track by sprint.id", + div.sprint.sprint-open(ng-repeat="sprint in ctrl.openSprints() track by sprint.id", tg-backlog-sprint="sprint", tg-sprint-sortable) include sprint From db52081875c5b76c3baa07f562b5f8de757b3983 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 21 Oct 2016 08:36:28 +0200 Subject: [PATCH 039/175] fix issue #4675 --- app/modules/components/filter/filter.directive.coffee | 8 +++++++- app/modules/components/filter/filter.jade | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/modules/components/filter/filter.directive.coffee b/app/modules/components/filter/filter.directive.coffee index 92dca69f..c15eb137 100644 --- a/app/modules/components/filter/filter.directive.coffee +++ b/app/modules/components/filter/filter.directive.coffee @@ -19,6 +19,12 @@ FilterDirective = () -> link = (scope, el, attrs, ctrl) -> + unwatch = scope.$watch "vm.defaultQ", (q) -> + if q && !scope.vm.filtersForm.$dirty + scope.vm.q = q + unwatch() + else if scope.vm.filtersForm.$dirty + unwatch() return { scope: { @@ -29,7 +35,7 @@ FilterDirective = () -> onRemoveCustomFilter: "&", onSaveCustomFilter: "&", customFilters: "<", - q: "<", + defaultQ: "=q", filters: "<" customFilters: "<" selectedFilters: "<" diff --git a/app/modules/components/filter/filter.jade b/app/modules/components/filter/filter.jade index db7f53b1..3bb36933 100644 --- a/app/modules/components/filter/filter.jade +++ b/app/modules/components/filter/filter.jade @@ -1,7 +1,7 @@ h1 span.title(translate="COMMON.FILTERS.TITLE") -form +form(name="vm.filtersForm") fieldset input.e2e-filter-q( type="text", From d1cdcfafcb10ab0c84450e37a4153eb8ea6ae365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Fri, 21 Oct 2016 09:39:36 +0200 Subject: [PATCH 040/175] Fix fold icon in firefox --- app/styles/modules/backlog/taskboard-table.scss | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/app/styles/modules/backlog/taskboard-table.scss b/app/styles/modules/backlog/taskboard-table.scss index 1cc1c59c..a09e3d4e 100644 --- a/app/styles/modules/backlog/taskboard-table.scss +++ b/app/styles/modules/backlog/taskboard-table.scss @@ -107,23 +107,13 @@ $column-padding: .5rem 1rem; tg-svg { display: block; margin-right: .3rem; - svg { - @include font-size(medium); - fill: $gray-light; - transition: fill .2s linear; - } &:hover { cursor: pointer; - svg { - fill: $primary; - } } &.hfold, &.hunfold { display: inline-block; - svg { - transform: rotate(90deg); - } + transform: rotate(90deg); } } } From 67031a3fb9991721c2e8fb4def35c89ae88d3142 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Fri, 21 Oct 2016 09:57:05 +0200 Subject: [PATCH 041/175] Fix contacts images in user profile --- app/modules/profile/profile-projects/profile-projects.jade | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/modules/profile/profile-projects/profile-projects.jade b/app/modules/profile/profile-projects/profile-projects.jade index df8de196..ec87a909 100644 --- a/app/modules/profile/profile-projects/profile-projects.jade +++ b/app/modules/profile/profile-projects/profile-projects.jade @@ -63,4 +63,8 @@ section.profile-projects tg-nav="user-profile:username=contact.get('username')" title="{{::contact.get('full_name')}}" ) - tg-avatar="contact" + img( + tg-avatar="contact" + alt="{{::contact.get('full_name')}}" + ) + From 838f82125d9da1cd155c6cdd66b8512e552a6730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Sat, 22 Oct 2016 21:00:22 +0200 Subject: [PATCH 042/175] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 14d6d7c0..281aad7d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Taiga Front # ![Kaleidos Project](http://kaleidos.net/static/img/badge.png "Kaleidos Project") -[![Managed with Taiga](https://taiga.io/media/support/attachments/article-22/banner-gh.png)](https://taiga.io "Managed with Taiga") +[![Managed with Taiga.io](https://tree.taiga.io/support/images/taiga-badge-gh.png)](https://taiga.io "Managed with Taiga.io") [![Build Status](https://travis-ci.org/taigaio/taiga-front.svg?branch=public-header-bar)](https://travis-ci.org/taigaio/taiga-front) [![Dependency Status](https://www.versioneye.com/user/projects/561ba659a193340f280013f4/badge.svg?style=flat)](https://www.versioneye.com/user/projects/561ba659a193340f280013f4) From 6dff083cd205e45541c1d545cee756db3053e7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Mon, 24 Oct 2016 12:09:42 +0200 Subject: [PATCH 043/175] Fix scss typo --- app/modules/components/filter/filter.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/modules/components/filter/filter.scss b/app/modules/components/filter/filter.scss index 3782d855..55cfff4c 100644 --- a/app/modules/components/filter/filter.scss +++ b/app/modules/components/filter/filter.scss @@ -1,6 +1,6 @@ tg-filter { background-color: $mass-white; - box-shadow: 1px 1px 5px rgbag($primary, .2); + box-shadow: 1px 1px 5px rgba($primary, .2); display: block; left: 0; min-height: 100%; From f28c6be7ed6074fd7a1153033095926c5f69b552 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 24 Oct 2016 12:09:46 +0200 Subject: [PATCH 044/175] increase performance open filters --- .../components/filter/filter.directive.coffee | 8 ++++++++ app/modules/components/filter/filter.scss | 15 +++------------ app/partials/kanban/kanban.jade | 2 +- app/partials/taskboard/taskboard.jade | 2 +- app/styles/layout/issues.scss | 3 +++ 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app/modules/components/filter/filter.directive.coffee b/app/modules/components/filter/filter.directive.coffee index c15eb137..c781971f 100644 --- a/app/modules/components/filter/filter.directive.coffee +++ b/app/modules/components/filter/filter.directive.coffee @@ -26,6 +26,14 @@ FilterDirective = () -> else if scope.vm.filtersForm.$dirty unwatch() + attrs.$observe "open", (open) -> + open = scope.$eval(open) + + if open + el.addClass('open') + else + el.removeClass('open') + return { scope: { onChangeQ: "&", diff --git a/app/modules/components/filter/filter.scss b/app/modules/components/filter/filter.scss index 55cfff4c..0f3abaf3 100644 --- a/app/modules/components/filter/filter.scss +++ b/app/modules/components/filter/filter.scss @@ -7,6 +7,8 @@ tg-filter { padding: 1rem 0; position: absolute; top: 0; + transform: translateX(-260px); + transition-duration: .5s; width: 260px; z-index: 1; .filters-applied { @@ -28,18 +30,7 @@ tg-filter { right: .7rem; top: .7rem; } - &.ng-hide-add { - transform: translateX(0); - transition-duration: .5s; - } - &.ng-hide-add-active { - transform: translateX(-260px); - } - &.ng-hide-remove { - transform: translateX(-260px); - transition-duration: .5s; - } - &.ng-hide-remove-active { + &.open { transform: translateX(0); } } diff --git a/app/partials/kanban/kanban.jade b/app/partials/kanban/kanban.jade index 2e65ebe2..9cc9cb0d 100644 --- a/app/partials/kanban/kanban.jade +++ b/app/partials/kanban/kanban.jade @@ -6,7 +6,7 @@ div.wrapper(tg-kanban, ng-controller="KanbanController as ctrl" section.main.kanban tg-filter( - ng-show="ctrl.openFilter" + open="{{ctrl.openFilter}}" q="ctrl.filterQ" filters="ctrl.filters" custom-filters="ctrl.customFilters" diff --git a/app/partials/taskboard/taskboard.jade b/app/partials/taskboard/taskboard.jade index d9e85720..1a0d0e62 100644 --- a/app/partials/taskboard/taskboard.jade +++ b/app/partials/taskboard/taskboard.jade @@ -5,7 +5,7 @@ div.wrapper(tg-taskboard, ng-controller="TaskboardController as ctrl", tg-project-menu section.main.taskboard tg-filter( - ng-show="ctrl.openFilter" + open="{{ctrl.openFilter}}" q="ctrl.filterQ" filters="ctrl.filters" custom-filters="ctrl.customFilters" diff --git a/app/styles/layout/issues.scss b/app/styles/layout/issues.scss index 52e9deff..4c9e48fb 100644 --- a/app/styles/layout/issues.scss +++ b/app/styles/layout/issues.scss @@ -3,4 +3,7 @@ position: relative; width: 260px; } + tg-filter { + transform: translateX(0); + } } From 2078695943b94d152a62c8c47e8d2ca1a6504467 Mon Sep 17 00:00:00 2001 From: juanfran Date: Wed, 26 Oct 2016 08:46:08 +0200 Subject: [PATCH 045/175] reset drag & drop multiple --- app/js/dragula-drag-multiple.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/js/dragula-drag-multiple.js b/app/js/dragula-drag-multiple.js index dba5e387..9751afd0 100644 --- a/app/js/dragula-drag-multiple.js +++ b/app/js/dragula-drag-multiple.js @@ -147,6 +147,12 @@ var items = $(container).find('.' + multipleSortableClass); + _.forEach(items, function(item, index) { + $(item) + .data('position', null) + .data('dragMultipleIndex', null); + }); + $(elm) .data('dragmultiple:originalPosition', $(elm).position()) .data('dragMultipleActive', true); From e6e4dd35e779b2d033ddab1fd1eb11f7596af28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Thu, 6 Oct 2016 16:45:53 +0200 Subject: [PATCH 046/175] Velocity forecasting --- CHANGELOG.md | 2 + app/coffee/modules/backlog/lightboxes.coffee | 9 ++- app/coffee/modules/backlog/main.coffee | 74 +++++++++++++++++-- app/coffee/modules/common/filters.coffee | 8 ++ app/coffee/modules/resources.coffee | 1 + .../modules/resources/userstories.coffee | 11 +++ app/locales/taiga/locale-en.json | 6 ++ app/partials/backlog/backlog.jade | 42 +++++++++-- .../includes/components/backlog-row.jade | 3 +- .../includes/modules/backlog-table.jade | 2 +- .../modules/lightbox-sprint-add-edit.jade | 2 +- app/styles/components/buttons.scss | 17 +++++ app/styles/layout/backlog.scss | 40 ++++++---- app/styles/modules/backlog/backlog-table.scss | 4 + e2e/helpers/backlog-helper.js | 16 ++++ e2e/suites/backlog.e2e.js | 37 ++++++++++ 16 files changed, 240 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4d17be6..c3b5456c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog # +## 3.1.0 No name yet (no date yet) +- Velocity forecasting. Create sprints according to team velocity. ## 3.0.0 Stellaria Borealis (2016-10-02) diff --git a/app/coffee/modules/backlog/lightboxes.coffee b/app/coffee/modules/backlog/lightboxes.coffee index 324ce8b1..0af40673 100644 --- a/app/coffee/modules/backlog/lightboxes.coffee +++ b/app/coffee/modules/backlog/lightboxes.coffee @@ -38,6 +38,7 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, createSprint = true form = null $scope.newSprint = {} + ussToAdd = null resetSprint = () -> form.reset() if form @@ -97,7 +98,10 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, else return it - $rootscope.$broadcast(broadcastEvent, data) + if broadcastEvent == "sprintform:create:success" && ussToAdd + $rootscope.$broadcast(broadcastEvent, data, ussToAdd) + else + $rootscope.$broadcast(broadcastEvent, data) lightboxService.close($el) @@ -135,7 +139,8 @@ CreateEditSprint = ($repo, $confirm, $rs, $rootscope, lightboxService, $loading, return sortedSprints[sortedSprints.length - 1] - $scope.$on "sprintform:create", (event, projectId) -> + $scope.$on "sprintform:create", (event, projectId, uss) -> + ussToAdd = uss resetSprint() form = $el.find("form").checksley() diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index b1527031..6099a528 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -86,6 +86,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F @showTags = false @activeFilters = false @scope.showGraphPlaceholder = null + @displayVelocity = false @.initializeEventHandlers() @@ -120,8 +121,10 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F @confirm.notify("success") @analytics.trackEvent("userstory", "create", "bulk create userstory on backlog", 1) - @scope.$on "sprintform:create:success", => - @.loadSprints() + @scope.$on "sprintform:create:success", (e, data, ussToMove) => + @.loadSprints().then () => + @scope.$broadcast("sprintform:create:success:callback", ussToMove) + @.loadProjectStats() @confirm.notify("success") @analytics.trackEvent("sprint", "create", "create sprint on backlog", 1) @@ -181,6 +184,17 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F toggleActiveFilters: -> @activeFilters = !@activeFilters + toggleVelocityForecasting: -> + @displayVelocity = !@displayVelocity + if !@displayVelocity + @scope.visibleUserStories = _.map @scope.userstories, (it) -> + return it.ref + else + @scope.visibleUserStories = _.map @.forecastedStories, (it) -> + return it.ref + scopeDefer @scope, => + @scope.$broadcast("userstories:loaded") + loadProjectStats: -> return @rs.projects.stats(@scope.projectId).then (stats) => @scope.stats = stats @@ -192,6 +206,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F @scope.stats.completedPercentage = 0 @scope.showGraphPlaceholder = !(stats.total_points? && stats.total_milestones?) + @.calculateForecasting() return stats setMilestonesOrder: (sprints) -> @@ -275,6 +290,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F promise = @rs.userstories.listUnassigned(@scope.projectId, params, pageSize) return promise.then (result) => + userstories = result[0] header = result[1] @@ -283,6 +299,8 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F # NOTE: Fix order of USs because the filter orderBy does not work propertly in the partials files @scope.userstories = @scope.userstories.concat(_.sortBy(userstories, "backlog_order")) + @scope.visibleUserStories = _.map @scope.userstories, (it) -> + return it.ref for it in @scope.userstories @.backlogOrder[it.id] = it.backlog_order @@ -305,7 +323,22 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F @.loadProjectStats(), @.loadSprints(), @.loadUserstories() - ]) + ]).then(@.calculateForecasting) + + calculateForecasting: -> + stats = @scope.stats + total_points = stats.total_points + current_sum = stats.assigned_points + backlog_points_sum = 0 + @forecastedStories = [] + + for us in @scope.userstories + current_sum += us.total_points + backlog_points_sum += us.total_points + @forecastedStories.push(us) + + if stats.speed > 0 && backlog_points_sum > stats.speed + break loadProject: -> return @rs.projects.getBySlug(@params.pslug).then (project) => @@ -545,7 +578,7 @@ module.controller("BacklogController", BacklogController) ## Backlog Directive ############################################################################# -BacklogDirective = ($repo, $rootscope, $translate) -> +BacklogDirective = ($repo, $rootscope, $translate, $rs) -> ## Doom line Link doomLineTemplate = _.template("""
<%- text %>
@@ -553,11 +586,13 @@ BacklogDirective = ($repo, $rootscope, $translate) -> linkDoomLine = ($scope, $el, $attrs, $ctrl) -> reloadDoomLine = -> - if $scope.stats? and $scope.stats.total_points? and $scope.stats.total_points != 0 + if $scope.displayVelocity + removeDoomlineDom() + + if $scope.stats? and $scope.stats.total_points? and $scope.stats.total_points != 0 and !$scope.displayVelocity? removeDoomlineDom() stats = $scope.stats - total_points = stats.total_points current_sum = stats.assigned_points @@ -584,6 +619,7 @@ BacklogDirective = ($repo, $rootscope, $translate) -> return _.map(rowElements, (x) -> angular.element(x)) $scope.$on("userstories:loaded", reloadDoomLine) + $scope.$on("userstories:forecast", removeDoomlineDom) $scope.$watch("stats", reloadDoomLine) ## Move to current sprint link @@ -614,9 +650,11 @@ BacklogDirective = ($repo, $rootscope, $translate) -> # Update the total of points sprint.total_points += totalExtraPoints - $repo.saveAll(selectedUss).then -> + $rs.userstories.bulkUpdateMilestone($scope.project.id, $scope.sprints[0].id, selectedUss).then => $ctrl.loadSprints() $ctrl.loadProjectStats() + $ctrl.toggleVelocityForecasting() + $ctrl.calculateForecasting() $el.find(".move-to-sprint").hide() @@ -626,6 +664,9 @@ BacklogDirective = ($repo, $rootscope, $translate) -> moveToLatestSprint = (selectedUss) -> moveUssToSprint(selectedUss, $scope.sprints[0]) + $scope.$on "sprintform:create:success:callback", (e, ussToMove) -> + _.partial(moveToCurrentSprint, ussToMove)() + shiftPressed = false lastChecked = null @@ -640,6 +681,7 @@ BacklogDirective = ($repo, $rootscope, $translate) -> else moveToSprintDom.hide() + $(window).on "keydown.shift-pressed keyup.shift-pressed", (event) -> shiftPressed = !!event.shiftKey @@ -685,6 +727,22 @@ BacklogDirective = ($repo, $rootscope, $translate) -> showHideTags($ctrl) + $el.on "click", ".forecasting-add-sprint", (event) -> + ussToMoveList = $ctrl.forecastedStories + if $scope.currentSprint + ussToMove = _.map ussToMoveList, (us, index) -> + us.milestone = $scope.currentSprint.id + us.order = index + return us + + $scope.$apply(_.partial(moveToCurrentSprint, ussToMove)) + else + ussToMove = _.map ussToMoveList, (us, index) -> + us.order = index + return us + + $rootscope.$broadcast("sprintform:create", $scope.projectId, ussToMove) + showHideTags = ($ctrl) -> elm = angular.element("#show-tags") @@ -759,7 +817,7 @@ BacklogDirective = ($repo, $rootscope, $translate) -> return {link: link} -module.directive("tgBacklog", ["$tgRepo", "$rootScope", "$translate", BacklogDirective]) +module.directive("tgBacklog", ["$tgRepo", "$rootScope", "$translate", "$tgResources", BacklogDirective]) ############################################################################# ## User story points directive diff --git a/app/coffee/modules/common/filters.coffee b/app/coffee/modules/common/filters.coffee index c232d85d..339e2fa6 100644 --- a/app/coffee/modules/common/filters.coffee +++ b/app/coffee/modules/common/filters.coffee @@ -127,3 +127,11 @@ darkerFilter = -> module.filter("darker", darkerFilter) + +inArray = ($filter) -> + return (list, arrayFilter, element) -> + if arrayFilter + filter = $filter("filter") + return filter list, (listItem) -> + return arrayFilter.indexOf(listItem[element]) != -1 +module.filter("inArray", ["$filter", inArray]) diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index 20b9fa9a..f8b0a7be 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -109,6 +109,7 @@ urls = { "bulk-update-us-milestone": "/userstories/bulk_update_milestone" "bulk-update-us-miles-order": "/userstories/bulk_update_sprint_order" "bulk-update-us-kanban-order": "/userstories/bulk_update_kanban_order" + "bulk-update-us-milestone": "/userstories/bulk_update_milestone" "userstories-filters": "/userstories/filters_data" "userstory-upvote": "/userstories/%s/upvote" "userstory-downvote": "/userstories/%s/downvote" diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index f4c5cca4..e95693d2 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -108,6 +108,17 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> params = {project_id: projectId, bulk_stories: data} return $http.post(url, params) + service.bulkUpdateMilestone = (projectId, milestoneId, data) -> + url = $urls.resolve("bulk-update-us-milestone") + data = _.map data, (us) -> + return { + us_id: us.id + order: us.order + } + + params = {project_id: projectId, milestone_id: milestoneId, bulk_stories: data} + return $http.post(url, params) + service.listValues = (projectId, type) -> params = {"project": projectId} service.storeQueryParams(projectId, params) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 15ae363e..7127c031 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -1249,6 +1249,12 @@ "SHOW": "Show tags", "HIDE": "Hide tags" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "User Stories", "TITLE_COLUMN_POINTS": "Select view per Role" diff --git a/app/partials/backlog/backlog.jade b/app/partials/backlog/backlog.jade index be444cc8..941f3ce4 100644 --- a/app/partials/backlog/backlog.jade +++ b/app/partials/backlog/backlog.jade @@ -36,7 +36,7 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl", div.backlog-menu div.backlog-table-options - a.trans-button.menu-button.move-to-current-sprint.move-to-sprint.e2e-move-to-sprint( + a.menu-button.move-to-current-sprint.move-to-sprint.e2e-move-to-sprint( ng-if="currentSprint" href="" title="{{'BACKLOG.MOVE_US_TO_CURRENT_SPRINT' | translate}}" @@ -44,7 +44,7 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl", ) tg-svg(svg-icon="icon-move") span.text(translate="BACKLOG.MOVE_US_TO_CURRENT_SPRINT") - a.trans-button.menu-button.move-to-latest-sprint.move-to-sprint.e2e-move-to-sprint( + a.menu-button.move-to-latest-sprint.move-to-sprint.e2e-move-to-sprint( ng-if="!currentSprint" href="" title="{{'BACKLOG.MOVE_US_TO_LATEST_SPRINT' | translate}}" @@ -52,33 +52,61 @@ div.wrapper(tg-backlog, ng-controller="BacklogController as ctrl", ) tg-svg(svg-icon="icon-move") span.text(translate="BACKLOG.MOVE_US_TO_LATEST_SPRINT") - a.trans-button.menu-button.e2e-open-filter.ng-animate-disabled( + a.menu-button.e2e-open-filter.ng-animate-disabled( ng-if="!ctrl.activeFilters" href="" title="{{'BACKLOG.FILTERS.TOGGLE' | translate}}" id="show-filters-button" translate="BACKLOG.FILTERS.SHOW" ) - a.trans-button.menu-button.active.e2e-open-filter.ng-animate-disabled( + a.menu-button.active.e2e-open-filter.ng-animate-disabled( ng-if="ctrl.activeFilters" href="" title="{{'BACKLOG.FILTERS.HIDE' | translate}}" id="show-filters-button" translate="BACKLOG.FILTERS.HIDE" ) - a.trans-button.menu-button( + a.menu-button( ng-if="userstories.length" href="" title="{{'BACKLOG.TAGS.TOGGLE' | translate}}" id="show-tags" translate="BACKLOG.TAGS.SHOW" ) + a.menu-button.velocity-forecasting-btn.ng-animate-disabled.e2e-velocity-forecasting( + ng-if="userstories.length && ctrl.displayVelocity " + href="" + title="{{'BACKLOG.FORECASTING.TITLE' | translate}}" + translate="BACKLOG.FORECASTING.BACKLOG" + ng-click="ctrl.toggleVelocityForecasting()" + tg-check-permission="add_milestone" + ) + a.menu-button.velocity-forecasting-btn.ng-animate-disabled.e2e-velocity-forecasting( + ng-if="userstories.length && !ctrl.displayVelocity && stats.speed > 0" + href="" + title="{{'BACKLOG.FORECASTING.BACKLOG' | translate}}" + translate="BACKLOG.FORECASTING.TITLE" + ng-click="ctrl.toggleVelocityForecasting()" + tg-check-permission="add_milestone" + ) include ../includes/components/addnewus + section.backlog-table(ng-class="{'hidden': !userstories.length}") include ../includes/modules/backlog-table - - div.empty-large.js-empty-backlog(ng-class="{'hidden': userstories === undefined || userstories.length}") + + .forecasting-add-sprint.e2e-velocity-forecasting-add(ng-if="ctrl.displayVelocity") + tg-svg(svg-icon="icon-add") + span( + ng-if="!currentSprint" + translate="BACKLOG.FORECASTING.NEW_SPRINT" + ) + span( + ng-if="currentSprint" + translate="BACKLOG.FORECASTING.CURRENT_SPRINT" + ) + + .empty-large.js-empty-backlog(ng-class="{'hidden': userstories === undefined || userstories.length}") img( src="/#{v}/images/empty/empty_mex.png" alt="{{'BACKLOG.EMPTY' | translate}}" diff --git a/app/partials/includes/components/backlog-row.jade b/app/partials/includes/components/backlog-row.jade index 4a3a6143..08524602 100644 --- a/app/partials/includes/components/backlog-row.jade +++ b/app/partials/includes/components/backlog-row.jade @@ -1,9 +1,10 @@ .row.us-item-row( - ng-repeat="us in userstories track by us.id" + ng-repeat="us in userstories | inArray:visibleUserStories:'ref'" tg-bind-scope ng-class="{blocked: us.is_blocked}" tg-class-permission="{'readonly': '!modify_us'}" ) + .input(tg-check-permission="modify_us") input( type="checkbox" diff --git a/app/partials/includes/modules/backlog-table.jade b/app/partials/includes/modules/backlog-table.jade index 8ee5707b..c37e329f 100644 --- a/app/partials/includes/modules/backlog-table.jade +++ b/app/partials/includes/modules/backlog-table.jade @@ -10,7 +10,7 @@ div.backlog-table-header div.backlog-table-body( tg-backlog-sortable, - ng-class="{'show-tags': ctrl.showTags, 'active-filters': ctrl.activeFilters}" + ng-class="{'show-tags': ctrl.showTags, 'active-filters': ctrl.activeFilters, 'forecasted-stories': ctrl.displayVelocity}" infinite-scroll="ctrl.loadUserstories()" infinite-scroll-disabled="ctrl.disablePagination || !ctrl.firstLoadComplete" infinite-scroll-immediate-check='false' diff --git a/app/partials/includes/modules/lightbox-sprint-add-edit.jade b/app/partials/includes/modules/lightbox-sprint-add-edit.jade index 254e3276..d2a2400a 100644 --- a/app/partials/includes/modules/lightbox-sprint-add-edit.jade +++ b/app/partials/includes/modules/lightbox-sprint-add-edit.jade @@ -3,7 +3,7 @@ tg-lightbox-close form h2.title(translate="LIGHTBOX.ADD_EDIT_SPRINT.TITLE") fieldset - input.sprint-name( + input.sprint-name.e2e-sprint-name( type="text" name="name" ng-model="newSprint.name" diff --git a/app/styles/components/buttons.scss b/app/styles/components/buttons.scss index 96dbb3b5..071feaf8 100755 --- a/app/styles/components/buttons.scss +++ b/app/styles/components/buttons.scss @@ -59,6 +59,23 @@ color: $blackish; } } + +.menu-button { + @extend %button; + border-radius: 0; + color: $blackish; + &:hover { + background: $whitish; + color: $gray; + } + &:visited { + color: $blackish; + } + span { + color: $blackish; + } +} + .submit-button { width: 100%; } diff --git a/app/styles/layout/backlog.scss b/app/styles/layout/backlog.scss index f59fda27..e6feca25 100644 --- a/app/styles/layout/backlog.scss +++ b/app/styles/layout/backlog.scss @@ -25,24 +25,16 @@ display: flex; justify-content: space-between; margin-bottom: 1rem; + @include breakpoint(laptop) { + flex-direction: column; + } .menu-button { - border-radius: 0; - color: $blackish; - display: inline-block; - padding: .4rem 1.5rem; - &.active, - &:hover { - background: $whitish; - color: $gray; - } - &.active { - &:hover { - background: darken($whitish, 10%); - } - } &.move-to-sprint { display: none; } + .icon-move { + margin-right: .25rem; + } } .button-bulk { margin-left: .2rem; @@ -70,3 +62,23 @@ background: $white; } } + +.forecasting-add-sprint { + @include font-size(small); + background: $mass-white; + cursor: pointer; + padding: .5rem 0; + text-align: center; + &:hover { + background: darken($mass-white, 3%); + transition: background .2s; + } + .icon-add { + @include svg-size(1.75rem); + background: $primary-light; + fill: $white; + margin-right: 1rem; + padding: .25rem; + vertical-align: middle; + } +} diff --git a/app/styles/modules/backlog/backlog-table.scss b/app/styles/modules/backlog/backlog-table.scss index be8607f0..61a4d5c7 100644 --- a/app/styles/modules/backlog/backlog-table.scss +++ b/app/styles/modules/backlog/backlog-table.scss @@ -145,6 +145,10 @@ } .backlog-table-body { + &.forecasted-stories { + border: .5rem solid $mass-white; + border-bottom: 0; + } .row { border-bottom: 1px solid darken($whitish, 4%); cursor: move; diff --git a/e2e/helpers/backlog-helper.js b/e2e/helpers/backlog-helper.js index 932e1c34..4c1f1f19 100644 --- a/e2e/helpers/backlog-helper.js +++ b/e2e/helpers/backlog-helper.js @@ -131,6 +131,22 @@ helper.openNewUs = function() { $$('.new-us a').get(0).click(); }; +helper.velocityForecasting = function() { + return $$('.e2e-velocity-forecasting'); +}; + +helper.openVelocityForecasting = function() { + $$('.e2e-velocity-forecasting').click(); +}; + +helper.createSprintFromForecasting = function() { + $$('.e2e-velocity-forecasting-add').click(); + let sprintName = 'sprintName' + new Date().getTime(); + $('.e2e-sprint-name') + .sendKeys(sprintName) + .sendKeys(protractor.Key.ENTER); +}; + helper.openUsBacklogEdit = function(item) { $$('.backlog-table-body .e2e-edit').get(item).click(); }; diff --git a/e2e/suites/backlog.e2e.js b/e2e/suites/backlog.e2e.js index f847a4f2..958ea18c 100644 --- a/e2e/suites/backlog.e2e.js +++ b/e2e/suites/backlog.e2e.js @@ -449,6 +449,43 @@ describe('backlog', function() { }); }); + describe('velocity forecasting', function() { + it('show', async function() { + browser.get(browser.params.glob.host + 'project/project-1/backlog'); + await utils.common.waitLoader(); + + let usCount = await backlogHelper.userStories().count(); + + await backlogHelper.openVelocityForecasting(); + utils.common.takeScreenshot('backlog', 'velocity-forecasting'); + + let newUsCount = await backlogHelper.userStories().count(); + + expect(newUsCount).is.below(usCount); + }); + it('create sprint from forecasting', async function() { + browser.get(browser.params.glob.host + 'project/project-1/backlog'); + await utils.common.waitLoader(); + + let sprintCount = await backlogHelper.sprintsOpen().count(); + + backlogHelper.openVelocityForecasting(); + backlogHelper.createSprintFromForecasting(); + + let newSprintCount = await backlogHelper.sprintsOpen().count(); + + expect(sprintCount).is.below(newSprintCount); + }); + it.only('hide forecasting if no velocity', async function() { + browser.get(browser.params.glob.host + 'project/project-5/backlog'); + await utils.common.waitLoader(); + + let forecasting = await backlogHelper.velocityForecasting(); + + expect(forecasting).to.be.empty; + }); + }); + describe('backlog filters', sharedFilters.bind(this, 'backlog', () => { return backlogHelper.userStories().count(); })); From d6c26087d806aee13f59e499e3cc7effbf2050e4 Mon Sep 17 00:00:00 2001 From: juanfran Date: Thu, 3 Nov 2016 10:22:00 +0100 Subject: [PATCH 047/175] prevent infinite loop with an invalid token --- app/coffee/app.coffee | 5 ++++- app/coffee/modules/auth.coffee | 11 ++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index cc5a7a99..cca4eae4 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -529,7 +529,10 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven .search("force_next", search.force_next) else $location.url($navUrls.resolve("login")) - .search("next", nextUrl) + .search({ + "unauthorized": true + "next": nextUrl + }) return $q.reject(response) diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index def65a3c..814e8323 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -32,10 +32,11 @@ class LoginPage 'tgCurrentUserService', '$location', '$tgNavUrls', - '$routeParams' + '$routeParams', + '$tgAuth' ] - constructor: (currentUserService, $location, $navUrls, $routeParams) -> + constructor: (currentUserService, $location, $navUrls, $routeParams, $auth) -> if currentUserService.isAuthenticated() if not $routeParams['force_login'] url = $navUrls.resolve("home") @@ -43,7 +44,11 @@ class LoginPage url = decodeURIComponent($routeParams['next']) $location.search('next', null) - $location.url(url) + if $routeParams['unauthorized'] + $auth.clear() + $auth.removeToken() + else + $location.url(url) module.controller('LoginPage', LoginPage) From da6d2fe489cb776d47ada6d79d82767556c2a0f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 3 Nov 2016 12:55:44 +0100 Subject: [PATCH 048/175] Fix gitlab support link --- app/partials/admin/admin-third-parties-gitlab.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/admin/admin-third-parties-gitlab.jade b/app/partials/admin/admin-third-parties-gitlab.jade index 2f2fbf71..a8950fd1 100644 --- a/app/partials/admin/admin-third-parties-gitlab.jade +++ b/app/partials/admin/admin-third-parties-gitlab.jade @@ -60,7 +60,7 @@ div.wrapper.roles( ) a.help-button( - href="https://tree.taiga.io/support/integrations/gogs-integration/" + href="https://tree.taiga.io/support/integrations/gitlab-integration/" target="_blank" ) tg-svg(svg-icon="icon-question") From f648b1b710a37aa7c9f101bfce4dfde63fb2f777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Tue, 8 Nov 2016 10:30:48 +0100 Subject: [PATCH 049/175] Fix visualization when empty --- app/modules/discover/components/highlighted/highlighted.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/modules/discover/components/highlighted/highlighted.scss b/app/modules/discover/components/highlighted/highlighted.scss index 0c9b0a0e..ff18ab43 100644 --- a/app/modules/discover/components/highlighted/highlighted.scss +++ b/app/modules/discover/components/highlighted/highlighted.scss @@ -76,6 +76,7 @@ } .empty-highlighted-project { border: 2px dashed $whitish; + flex: 1; padding: 2rem; text-align: center; svg { From c329f9d6bc93b6cb17953915cdde21f963fb6061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 4 Nov 2016 14:04:48 +0100 Subject: [PATCH 050/175] Show links as links --- app/styles/modules/admin/admin-common.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/styles/modules/admin/admin-common.scss b/app/styles/modules/admin/admin-common.scss index a3d91497..0b82151f 100644 --- a/app/styles/modules/admin/admin-common.scss +++ b/app/styles/modules/admin/admin-common.scss @@ -7,6 +7,12 @@ .admin-subtitle { color: $gray-light; margin-bottom: 2rem; + a { + color: $primary; + &:hover { + color: $primary-light; + } + } } .total { @include font-size(large); From 048fb0c9052574c6a01b27547ca9cc2a6945134d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Fri, 4 Nov 2016 13:27:07 +0100 Subject: [PATCH 051/175] Improve whether an item is an epic, issuet, story or task in a clearer way --- app/styles/components/list-items.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/styles/components/list-items.scss b/app/styles/components/list-items.scss index fb72b3a8..10483b4f 100644 --- a/app/styles/components/list-items.scss +++ b/app/styles/components/list-items.scss @@ -101,6 +101,10 @@ .ticket-project { margin-right: .3rem; } + .ticket-type { + margin-left: .3rem; + text-transform: uppercase; + } .ticket-project { color: $gray-light; } From 3b0fff5a6c499b8e4b3d4478e51fee5520c3b688 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 11 Nov 2016 13:48:48 +0100 Subject: [PATCH 052/175] fix issue #4673 - local storage epics column settings --- .../epics-table/epics-table.controller.coffee | 16 +++++++++++----- .../epics/dashboard/epics-table/epics-table.jade | 7 ++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee b/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee index 57967021..ea993e71 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee +++ b/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee @@ -18,19 +18,22 @@ ### taiga = @.taiga - +generateHash = @.taiga.generateHash class EpicsTableController @.$inject = [ "$tgConfirm", "tgEpicsService", - "$timeout" + "$timeout", + "$tgStorage", + "tgProjectService" ] - constructor: (@confirm, @epicsService, @timeout) -> + constructor: (@confirm, @epicsService, @timeout, @storage, @projectService) -> + @.hash = generateHash([@projectService.project.get('id'), 'epics']) @.displayOptions = false @.displayVotes = true - @.column = { + @.column = @storage.get(@.hash, { votes: true, name: true, project: true, @@ -38,7 +41,7 @@ class EpicsTableController assigned: true, status: true, progress: true - } + }) taiga.defineImmutableProperty @, 'epics', () => return @epicsService.epics taiga.defineImmutableProperty @, 'disabledEpicsPagination', () => return @epicsService._disablePagination @@ -62,4 +65,7 @@ class EpicsTableController hideEpicTableOption: () -> return @.timer = @timeout (=> @.displayOptions = false), 400 + updateViewOptions: () -> + @storage.set(@.hash, @.column) + angular.module("taigaEpics").controller("EpicsTableCtrl", EpicsTableController) diff --git a/app/modules/epics/dashboard/epics-table/epics-table.jade b/app/modules/epics/dashboard/epics-table/epics-table.jade index d9c0dfd4..90e4fa4a 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.jade +++ b/app/modules/epics/dashboard/epics-table/epics-table.jade @@ -6,6 +6,7 @@ mixin epicSwitch(name, model) type="checkbox" ng-checked= model ng-model= model + ng-change="vm.updateViewOptions()" ) div span.check-text.check-yes(translate="COMMON.YES") @@ -46,7 +47,7 @@ mixin epicSwitch(name, model) button.epics-table-option-button.e2e-epics-column-button(ng-click="vm.displayOptions = true") span(translate="EPICS.TABLE.VIEW_OPTIONS") tg-svg(svg-icon="icon-arrow-down") - form.epics-table-dropdown.e2e-epics-column-dropdown( + form.epics-table-dropdown.e2e-epics-column-dropdown.ng-hide( ng-show="vm.displayOptions" ng-mouseenter="vm.keepEpicTableOption()" ) @@ -86,7 +87,7 @@ mixin epicSwitch(name, model) for="switch-progress" ) +epicSwitch('switch-progress', 'vm.column.progress') - + .epics-table-body( tg-epics-sortable="vm.reorderEpic(epic, newIndex)" infinite-scroll="vm.nextPage()" @@ -101,5 +102,5 @@ mixin epicSwitch(name, model) epic="epic" column="vm.column" ) - + div(tg-loading="vm.loadingEpics") From c4dbd8b7b670e807e80c46859e272bd7ecf41546 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 11 Nov 2016 13:55:41 +0100 Subject: [PATCH 053/175] fix epics table tests --- .../epics-table.controller.spec.coffee | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/modules/epics/dashboard/epics-table/epics-table.controller.spec.coffee b/app/modules/epics/dashboard/epics-table/epics-table.controller.spec.coffee index 395e6476..8933ec7e 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.controller.spec.coffee +++ b/app/modules/epics/dashboard/epics-table/epics-table.controller.spec.coffee @@ -36,11 +36,30 @@ describe "EpicTable", -> } provide.value "tgEpicsService", mocks.tgEpicsService + _mockTgProjectService = () -> + mocks.tgProjectService = { + project: Immutable.fromJS({ + 'id': 3 + }) + } + provide.value "tgProjectService", mocks.tgProjectService + + _mockTgStorageService = () -> + mocks.tgStorage = { + get: sinon.stub(), + set: sinon.spy() + } + + mocks.tgStorage.get.returns({col1: true}) + provide.value "$tgStorage", mocks.tgStorage + _mocks = () -> module ($provide) -> provide = $provide _mockTgConfirm() _mockTgEpicsService() + _mockTgStorageService() + _mockTgProjectService() return null beforeEach -> @@ -63,3 +82,8 @@ describe "EpicTable", -> epicTableCtrl.nextPage() expect(mocks.tgEpicsService.nextPage).to.have.been.calledOnce + + it "storage view options", () -> + epicTableCtrl = controller "EpicsTableCtrl" + + expect(epicTableCtrl.column).to.be.eql({col1: true}) From 653cb01d9ba9ecf83e3f3d9163cda0b750b90981 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 14 Nov 2016 08:14:03 +0100 Subject: [PATCH 054/175] fix issue #4749, reload wiki after delete --- app/coffee/modules/wiki/main.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index b192b09a..4100a233 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -150,6 +150,7 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) ctx = {project: @scope.projectSlug} @location.path(@navUrls.resolve("project-wiki", ctx)) @confirm.notify("success") + @.loadWiki() onError = => askResponse.finish(false) From 32a19cb23d7375ccd3f15bb5e0dcb03beada5881 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 15 Nov 2016 08:52:35 +0100 Subject: [PATCH 055/175] fix delete redirection --- app/coffee/modules/common/lightboxes.coffee | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index 04d3d0c0..dc10423f 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -80,12 +80,17 @@ class LightboxService extends taiga.Service docEl.off(".lightbox") docEl.off(".keyboard-navigation") # Hack: to fix problems in the WYSIWYG textareas when press ENTER + $el.addClass('close-started') # don't attach animations + @animationFrame.add => $el.addClass('close') $el.one "transitionend", => $el.removeAttr('style') - $el.removeClass("open").removeClass('close') + $el + .removeClass("open") + .removeClass('close') + .removeClass('close-started') if @.onClose @rootScope.$apply(@.onClose) @@ -99,7 +104,7 @@ class LightboxService extends taiga.Service getLightboxOpen: -> - return $(".lightbox.open") + return $(".lightbox.open:not(.close-started)") closeAll: -> docEl = angular.element(document) From a816f45bbd305c929f07efdf82b2d00896326d63 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 15 Nov 2016 10:49:31 +0100 Subject: [PATCH 056/175] register must redirect to dashboard --- .../navigation-bar.directive.coffee | 5 ----- .../navigation-bar.directive.spec.coffee | 16 ---------------- app/modules/navigation-bar/navigation-bar.jade | 4 ++-- 3 files changed, 2 insertions(+), 23 deletions(-) diff --git a/app/modules/navigation-bar/navigation-bar.directive.coffee b/app/modules/navigation-bar/navigation-bar.directive.coffee index bce9ea39..47b0da51 100644 --- a/app/modules/navigation-bar/navigation-bar.directive.coffee +++ b/app/modules/navigation-bar/navigation-bar.directive.coffee @@ -32,11 +32,6 @@ NavigationBarDirective = (currentUserService, navigationBarService, locationServ locationService.url(navUrlsService.resolve("login")) locationService.search({next: nextUrl}) - scope.vm.register = -> - nextUrl = encodeURIComponent(locationService.url()) - locationService.url(navUrlsService.resolve("register")) - locationService.search({next: nextUrl}) - scope.$on "$routeChangeSuccess", () -> if locationService.path() == "/" scope.vm.active = true diff --git a/app/modules/navigation-bar/navigation-bar.directive.spec.coffee b/app/modules/navigation-bar/navigation-bar.directive.spec.coffee index 1e746290..d8742bfe 100644 --- a/app/modules/navigation-bar/navigation-bar.directive.spec.coffee +++ b/app/modules/navigation-bar/navigation-bar.directive.spec.coffee @@ -130,19 +130,3 @@ describe "navigationBarDirective", () -> expect(mocks.locationService.url.calledWith("/login")).to.be.true expect(mocks.locationService.search.calledWith({next: encodeURIComponent(nextUrl)})).to.be.true expect(vm.publicRegisterEnabled).to.be.true - - it "navigation bar register", () -> - mocks.navUrls.resolve.withArgs("register").returns("/register") - nextUrl = "/discover/search?order_by=-total_activity_last_month" - mocks.locationService.url.returns(nextUrl) - elm = createDirective() - scope.$apply() - vm = elm.isolateScope().vm - expect(mocks.locationService.url.callCount).to.be.equal(0) - expect(mocks.locationService.search.callCount).to.be.equal(0) - vm.register() - expect(mocks.locationService.url.callCount).to.be.equal(2) - expect(mocks.locationService.search.callCount).to.be.equal(1) - expect(mocks.locationService.url.calledWith("/register")).to.be.true - expect(mocks.locationService.search.calledWith({next: encodeURIComponent(nextUrl)})).to.be.true - expect(vm.publicRegisterEnabled).to.be.true diff --git a/app/modules/navigation-bar/navigation-bar.jade b/app/modules/navigation-bar/navigation-bar.jade index 22d1e2da..3ba56d0f 100644 --- a/app/modules/navigation-bar/navigation-bar.jade +++ b/app/modules/navigation-bar/navigation-bar.jade @@ -30,9 +30,9 @@ nav.navbar(ng-if="vm.isEnabledHeader") translate="LOGIN_COMMON.ACTION_SIGN_IN" ) a.register( - ng-click="vm.register()" + href="#" ng-if="vm.publicRegisterEnabled" - href="#", + tg-nav="register" title="{{ 'REGISTER_FORM.ACTION_SIGN_UP' | translate }}" translate="REGISTER_FORM.ACTION_SIGN_UP" ) From fb58f0d40002559c42f0e0f98ac83f218eb01bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 11 Nov 2016 17:31:36 +0100 Subject: [PATCH 057/175] Remove change-email-validation from the history of the browser --- app/coffee/modules/auth.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index 814e8323..e4f4dcf0 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -574,8 +574,10 @@ ChangeEmailDirective = ($repo, $model, $auth, $confirm, $location, $params, $nav $repo.queryOne("users", $auth.getUser().id).then (data) => $auth.setUser(data) $location.path($navUrls.resolve("home")) + $location.replace() else $location.path($navUrls.resolve("login")) + $location.replace() text = $translate.instant("CHANGE_EMAIL_FORM.SUCCESS") $confirm.success(text) From 70eb8bba1a249545fae00267e01028dac663f65b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 14 Nov 2016 13:06:55 +0100 Subject: [PATCH 058/175] Closed #4763: Hide closed epics in user dashboard --- app/modules/home/home.service.coffee | 38 ++++++++++++++--------- app/modules/home/home.service.spec.coffee | 4 +-- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/app/modules/home/home.service.coffee b/app/modules/home/home.service.coffee index 862e6b68..f6a9e69b 100644 --- a/app/modules/home/home.service.coffee +++ b/app/modules/home/home.service.coffee @@ -103,45 +103,55 @@ class HomeService extends taiga.Service assignedTo = Immutable.Map() - params = { + params_epics = { status__is_closed: false assigned_to: userId } - params_us = { + params_uss = { is_closed: false assigned_to: userId } - params_epics = { - is_closed: false + params_tasks = { + status__is_closed: false + assigned_to: userId + } + + params_issues = { + status__is_closed: false assigned_to: userId } assignedEpicsPromise = @rs.epics.listInAllProjects(params_epics).then (epics) -> assignedTo = assignedTo.set("epics", epics) - assignedUserStoriesPromise = @rs.userstories.listInAllProjects(params_us).then (userstories) -> + assignedUserStoriesPromise = @rs.userstories.listInAllProjects(params_uss).then (userstories) -> assignedTo = assignedTo.set("userStories", userstories) - assignedTasksPromise = @rs.tasks.listInAllProjects(params).then (tasks) -> + assignedTasksPromise = @rs.tasks.listInAllProjects(params_tasks).then (tasks) -> assignedTo = assignedTo.set("tasks", tasks) - assignedIssuesPromise = @rs.issues.listInAllProjects(params).then (issues) -> + assignedIssuesPromise = @rs.issues.listInAllProjects(params_issues).then (issues) -> assignedTo = assignedTo.set("issues", issues) - params = { + params_epics = { status__is_closed: false watchers: userId } - params_us = { + params_uss = { is_closed: false watchers: userId } - params_epics = { - is_closed: false + params_tasks = { + status__is_closed: false + watchers: userId + } + + params_issues = { + status__is_closed: false watchers: userId } @@ -150,13 +160,13 @@ class HomeService extends taiga.Service watchingEpicsPromise = @rs.epics.listInAllProjects(params_epics).then (epics) -> watching = watching.set("epics", epics) - watchingUserStoriesPromise = @rs.userstories.listInAllProjects(params_us).then (userstories) -> + watchingUserStoriesPromise = @rs.userstories.listInAllProjects(params_uss).then (userstories) -> watching = watching.set("userStories", userstories) - watchingTasksPromise = @rs.tasks.listInAllProjects(params).then (tasks) -> + watchingTasksPromise = @rs.tasks.listInAllProjects(params_tasks).then (tasks) -> watching = watching.set("tasks", tasks) - watchingIssuesPromise = @rs.issues.listInAllProjects(params).then (issues) -> + watchingIssuesPromise = @rs.issues.listInAllProjects(params_issues).then (issues) -> watching = watching.set("issues", issues) workInProgress = Immutable.Map() diff --git a/app/modules/home/home.service.spec.coffee b/app/modules/home/home.service.spec.coffee index a547feb8..30f605b3 100644 --- a/app/modules/home/home.service.spec.coffee +++ b/app/modules/home/home.service.spec.coffee @@ -87,7 +87,7 @@ describe "tgHome", -> mocks.resources.epics.listInAllProjects .withArgs(sinon.match({ - is_closed: false + status__is_closed: false assigned_to: userId })) .promise() @@ -95,7 +95,7 @@ describe "tgHome", -> mocks.resources.epics.listInAllProjects .withArgs(sinon.match({ - is_closed: false + status__is_closed: false watchers: userId })) .promise() From 471b9571c6d2cc26152918537928fcb28416d713 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 15 Nov 2016 14:04:52 +0100 Subject: [PATCH 059/175] Don't show background if the user upload its avatar --- app/modules/components/avatar/avatar.directive.coffee | 3 +-- app/modules/services/avatar.service.coffee | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/modules/components/avatar/avatar.directive.coffee b/app/modules/components/avatar/avatar.directive.coffee index 8d8aa8b0..96ea925e 100644 --- a/app/modules/components/avatar/avatar.directive.coffee +++ b/app/modules/components/avatar/avatar.directive.coffee @@ -28,8 +28,7 @@ AvatarDirective = (avatarService) -> avatar = avatarService.getAvatar(user, attributeName) el.attr('src', avatar.url) - if avatar.bg - el.css('background', avatar.bg) + el.css('background', avatar.bg or "") return { link: link diff --git a/app/modules/services/avatar.service.coffee b/app/modules/services/avatar.service.coffee index 5049a3ba..be496d9e 100644 --- a/app/modules/services/avatar.service.coffee +++ b/app/modules/services/avatar.service.coffee @@ -58,7 +58,7 @@ class AvatarService photo = null - if user instanceof Immutable.Map + if user instanceof Immutable.Map gravatar = user.get('gravatar_id') photo = user.get(avatarParamName) else From 6fe028001e610aa0502577314b60ebd2d853ca24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 15 Nov 2016 14:35:25 +0100 Subject: [PATCH 060/175] Add style for links --- app/styles/modules/common/lightbox.scss | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/styles/modules/common/lightbox.scss b/app/styles/modules/common/lightbox.scss index 9cfb907a..6df94cbc 100644 --- a/app/styles/modules/common/lightbox.scss +++ b/app/styles/modules/common/lightbox.scss @@ -197,6 +197,12 @@ margin: 1rem 0; padding: 1rem 2rem; text-align: center; + a { + color: $primary; + &:hover { + color: $primary-light; + } + } } .help-text { @include font-size(small); From 82b0323c4fe24f31d40c0ada7ab16eaae475ef7f Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 17 Nov 2016 14:46:26 +0100 Subject: [PATCH 061/175] only call api project every x minutes or when the user restarts their activity --- app/coffee/modules/admin/memberships.coffee | 33 +++--- .../modules/admin/project-profile.coffee | 55 ++++----- .../modules/admin/project-values.coffee | 43 +++---- app/coffee/modules/admin/roles.coffee | 41 ++++--- app/coffee/modules/admin/third-parties.coffee | 108 +++++++++--------- app/coffee/modules/backlog/main.coffee | 42 +++---- app/coffee/modules/base/contrib.coffee | 23 ++-- app/coffee/modules/epics/detail.coffee | 30 ++--- app/coffee/modules/issues/detail.coffee | 41 ++++--- app/coffee/modules/issues/list.coffee | 49 ++++---- app/coffee/modules/kanban/main.coffee | 42 +++---- app/coffee/modules/search.coffee | 49 ++++---- app/coffee/modules/tasks/detail.coffee | 28 ++--- app/coffee/modules/team/main.coffee | 33 +++--- app/coffee/modules/userstories/detail.coffee | 33 +++--- app/coffee/modules/wiki/main.coffee | 28 ++--- app/coffee/modules/wiki/pages-list.coffee | 30 ++--- app/modules/services/project.service.coffee | 20 +++- .../services/project.service.spec.coffee | 45 +++++++- .../services/user-activity.service.coffee | 77 +++++++++++++ .../user-activity.service.spec.coffee | 79 +++++++++++++ 21 files changed, 592 insertions(+), 337 deletions(-) create mode 100644 app/modules/services/user-activity.service.coffee create mode 100644 app/modules/services/user-activity.service.spec.coffee diff --git a/app/coffee/modules/admin/memberships.coffee b/app/coffee/modules/admin/memberships.coffee index 1ab6c54f..ba2b294a 100644 --- a/app/coffee/modules/admin/memberships.coffee +++ b/app/coffee/modules/admin/memberships.coffee @@ -50,11 +50,12 @@ class MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, tai "$translate", "$tgAuth", "tgLightboxFactory", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, @analytics, - @appMetaService, @translate, @auth, @lightboxFactory, @errorHandlingService) -> + @appMetaService, @translate, @auth, @lightboxFactory, @errorHandlingService, @projectService) -> bindMethods(@) @scope.project = {} @@ -74,17 +75,18 @@ class MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, tai @analytics.trackEvent("membership", "create", "create memberships on admin", 1) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.i_am_admin - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project + if not project.i_am_admin + @errorHandlingService.permissionDenied() - @scope.canAddUsers = project.max_memberships == null || project.max_memberships > project.total_memberships + @scope.projectId = project.id + @scope.project = project - @scope.$emit('project:loaded', project) - return project + @scope.canAddUsers = project.max_memberships == null || project.max_memberships > project.total_memberships + + @scope.$emit('project:loaded', project) + return project loadMembers: -> httpFilters = @.getUrlFilters() @@ -99,11 +101,12 @@ class MembershipsController extends mixOf(taiga.Controller, taiga.PageMixin, tai return data loadInitialData: -> - return @.loadProject().then () => - return @q.all([ - @.loadMembers(), - @auth.refresh() - ]) + @.loadProject() + + return @q.all([ + @.loadMembers(), + @auth.refresh() + ]) getUrlFilters: -> filters = _.pick(@location.search(), "page") diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index 65eb759c..61161508 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -54,15 +54,17 @@ class ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin) "$translate", "$tgAuth", "tgCurrentUserService", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService", + "$tgModel" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, - @appMetaService, @translate, @tgAuth, @currentUserService, @errorHandlingService) -> + @appMetaService, @translate, @tgAuth, @currentUserService, @errorHandlingService, @projectService, @model) -> @scope.project = {} - promise = @.loadInitialData() @scope.projectTags = [] + promise = @.loadInitialData() promise.then => sectionName = @translate.instant( @scope.sectionName) @@ -83,32 +85,33 @@ class ProjectProfileController extends mixOf(taiga.Controller, taiga.PageMixin) @appMetaService.setAll(title, description) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.i_am_admin - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() + project = @model.make_model("projects", project) - @scope.projectId = project.id - @scope.project = project - @scope.epicStatusList = _.sortBy(project.epic_statuses, "order") - @scope.usStatusList = _.sortBy(project.us_statuses, "order") - @scope.pointsList = _.sortBy(project.points, "order") - @scope.taskStatusList = _.sortBy(project.task_statuses, "order") - @scope.issueTypesList = _.sortBy(project.issue_types, "order") - @scope.issueStatusList = _.sortBy(project.issue_statuses, "order") - @scope.prioritiesList = _.sortBy(project.priorities, "order") - @scope.severitiesList = _.sortBy(project.severities, "order") - @scope.$emit('project:loaded', project) + if not project.i_am_admin + @errorHandlingService.permissionDenied() - @scope.projectTags = _.map @scope.project.tags, (it) => - return [it, @scope.project.tags_colors[it]] + @scope.projectId = project.id + @scope.project = project + @scope.epicStatusList = _.sortBy(project.epic_statuses, "order") + @scope.usStatusList = _.sortBy(project.us_statuses, "order") + @scope.pointsList = _.sortBy(project.points, "order") + @scope.taskStatusList = _.sortBy(project.task_statuses, "order") + @scope.issueTypesList = _.sortBy(project.issue_types, "order") + @scope.issueStatusList = _.sortBy(project.issue_statuses, "order") + @scope.prioritiesList = _.sortBy(project.priorities, "order") + @scope.severitiesList = _.sortBy(project.severities, "order") + @scope.$emit('project:loaded', project) - return project + @scope.projectTags = _.map @scope.project.tags, (it) => + return [it, @scope.project.tags_colors[it]] + + return project loadInitialData: -> - return @q.all([ - @.loadProject(), - @tgAuth.refresh() - ]) + @.loadProject() + + return @tgAuth.refresh() openDeleteLightbox: -> @rootscope.$broadcast("deletelightbox:new", @scope.project) @@ -158,9 +161,9 @@ ProjectProfileDirective = ($repo, $confirm, $loading, $navurls, $location, proje }) $location.path(newUrl) - $ctrl.loadInitialData() + projectService.fetchProject().then () => + $ctrl.loadInitialData() - projectService.fetchProject() currentUserService.loadProjects() promise.then null, (data) -> diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index 9d0413aa..80d26c82 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -53,36 +53,36 @@ class ProjectValuesSectionController extends mixOf(taiga.Controller, taiga.PageM "$tgNavUrls", "tgAppMetaService", "$translate", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, - @appMetaService, @translate, @errorHandlingService) -> + @appMetaService, @translate, @errorHandlingService, @projectService) -> @scope.project = {} - promise = @.loadInitialData() + @.loadInitialData() - promise.then () => - sectionName = @translate.instant(@scope.sectionName) + sectionName = @translate.instant(@scope.sectionName) - title = @translate.instant("ADMIN.PROJECT_VALUES.PAGE_TITLE", { - "sectionName": sectionName, - "projectName": @scope.project.name - }) - description = @scope.project.description - @appMetaService.setAll(title, description) + title = @translate.instant("ADMIN.PROJECT_VALUES.PAGE_TITLE", { + "sectionName": sectionName, + "projectName": @scope.project.name + }) - promise.then null, @.onInitialDataError.bind(@) + description = @scope.project.description + @appMetaService.setAll(title, description) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.i_am_admin - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - return project + if not project.i_am_admin + @errorHandlingService.permissionDenied() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + return project loadInitialData: -> promise = @.loadProject() @@ -106,8 +106,11 @@ class ProjectValuesController extends taiga.Controller constructor: (@scope, @rootscope, @repo, @confirm, @rs) -> @scope.$on("admin:project-values:move", @.moveValue) - @rootscope.$on("project:loaded", @.loadValues) + unwatch = @scope.$watch "resource", (resource) => + if resource + @.loadValues() + unwatch() loadValues: => return @rs[@scope.resource].listValues(@scope.projectId, @scope.type).then (values) => @scope.values = values diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index e60daa13..9d4348cb 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -49,11 +49,12 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil "$tgNavUrls", "tgAppMetaService", "$translate", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, - @appMetaService, @translate, @errorHandlingService) -> + @appMetaService, @translate, @errorHandlingService, @projectService) -> bindMethods(@) @scope.sectionName = "ADMIN.MENU.PERMISSIONS" @@ -70,17 +71,18 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.i_am_admin - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project + if not project.i_am_admin + @errorHandlingService.permissionDenied() - @scope.$emit('project:loaded', project) - @scope.anyComputableRole = _.some(_.map(project.roles, (point) -> point.computable)) + @scope.projectId = project.id + @scope.project = project - return project + @scope.$emit('project:loaded', project) + @scope.anyComputableRole = _.some(_.map(project.roles, (point) -> point.computable)) + + return project loadRoles: -> return @rs.roles.list(@scope.projectId).then (roles) => @@ -103,9 +105,12 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil return roles loadInitialData: -> - promise = @.loadProject() - promise.then(=> @.loadRoles()) - return promise + @.loadProject() + return @.loadRoles() + + forceLoadProject: () -> + @projectService.fetchProject () => + @.loadProject() setRole: (role) -> @scope.role = role @@ -126,7 +131,7 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil warning = @translate.instant("ADMIN.ROLES.WARNING_DELETE_ROLE") return @confirm.askChoice(title, subtitle, choices, replacement, warning).then (response) => onSuccess = => - @.loadProject() + @.forceLoadProject() @.loadRoles().finally => response.finish() onError = => @@ -137,7 +142,7 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil _enableComputable: => onSuccess = => @confirm.notify("success") - @.loadProject() + @.forceLoadProject() onError = => @confirm.notify("error") @@ -150,7 +155,7 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil onSuccess = => response.finish() @confirm.notify("success") - @.loadProject() + @.forceLoadProject() onError = => response.finish() @confirm.notify("error") @@ -264,7 +269,7 @@ NewRoleDirective = ($tgrepo, $confirm) -> $scope.roles.splice(insertPosition, 0, role) $ctrl.setRole(role) $el.find(".add-button").show() - $ctrl.loadProject() + $ctrl.forceLoadProject() onError = -> $confirm.notify("error") @@ -474,7 +479,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm, $compile) -> renderResume(target.parents(".category-config"), categories[categoryId]) $rootscope.$broadcast("projects:reload") $confirm.notify("success") - $ctrl.loadProject() + $ctrl.forceLoadProject() onError = -> $confirm.notify("error") diff --git a/app/coffee/modules/admin/third-parties.coffee b/app/coffee/modules/admin/third-parties.coffee index 74ea9ed7..7b250d24 100644 --- a/app/coffee/modules/admin/third-parties.coffee +++ b/app/coffee/modules/admin/third-parties.coffee @@ -46,10 +46,11 @@ class WebhooksController extends mixOf(taiga.Controller, taiga.PageMixin, taiga. "$tgNavUrls", "tgAppMetaService", "$translate", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] - constructor: (@scope, @repo, @rs, @params, @location, @navUrls, @appMetaService, @translate, @errorHandlingService) -> + constructor: (@scope, @repo, @rs, @params, @location, @navUrls, @appMetaService, @translate, @errorHandlingService, @projectService) -> bindMethods(@) @scope.sectionName = "ADMIN.WEBHOOKS.SECTION_NAME" @@ -71,21 +72,20 @@ class WebhooksController extends mixOf(taiga.Controller, taiga.PageMixin, taiga. @scope.webhooks = webhooks loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.i_am_admin - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - return project + if not project.i_am_admin + @errorHandlingService.permissionDenied() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + return project loadInitialData: -> - promise = @.loadProject() - promise.then => - @.loadWebhooks() + @.loadProject() - return promise + return @.loadWebhooks() module.controller("WebhooksController", WebhooksController) @@ -309,10 +309,11 @@ class GithubController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi "$tgResources", "$routeParams", "tgAppMetaService", - "$translate" + "$translate", + "tgProjectService" ] - constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) -> + constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate, @projectService) -> bindMethods(@) @scope.sectionName = @translate.instant("ADMIN.GITHUB.SECTION_NAME") @@ -332,16 +333,16 @@ class GithubController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @scope.github = github loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + return project loadInitialData: -> promise = @.loadProject() - promise.then(=> @.loadModules()) - return promise + return @.loadModules() module.controller("GithubController", GithubController) @@ -357,10 +358,11 @@ class GitlabController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi "$tgResources", "$routeParams", "tgAppMetaService", - "$translate" + "$translate", + "tgProjectService" ] - constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) -> + constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate, @projectService) -> bindMethods(@) @scope.sectionName = @translate.instant("ADMIN.GITLAB.SECTION_NAME") @@ -382,16 +384,16 @@ class GitlabController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @scope.gitlab = gitlab loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + return project loadInitialData: -> - promise = @.loadProject() - promise.then(=> @.loadModules()) - return promise + @.loadProject() + return @.loadModules() module.controller("GitlabController", GitlabController) @@ -407,10 +409,11 @@ class BitbucketController extends mixOf(taiga.Controller, taiga.PageMixin, taiga "$tgResources", "$routeParams", "tgAppMetaService", - "$translate" + "$translate", + "tgProjectService" ] - constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) -> + constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate, @projectService) -> bindMethods(@) @scope.sectionName = @translate.instant("ADMIN.BITBUCKET.SECTION_NAME") @@ -432,16 +435,16 @@ class BitbucketController extends mixOf(taiga.Controller, taiga.PageMixin, taiga @scope.bitbucket = bitbucket loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + return project loadInitialData: -> - promise = @.loadProject() - promise.then(=> @.loadModules()) - return promise + @.loadProject() + return @.loadModules() module.controller("BitbucketController", BitbucketController) @@ -598,10 +601,11 @@ class GogsController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Filt "$tgResources", "$routeParams", "tgAppMetaService", - "$translate" + "$translate", + "tgProjectService" ] - constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate) -> + constructor: (@scope, @repo, @rs, @params, @appMetaService, @translate, @projectService) -> bindMethods(@) @scope.sectionName = @translate.instant("ADMIN.GOGS.SECTION_NAME") @@ -621,15 +625,15 @@ class GogsController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Filt @scope.gogs = gogs loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + return project loadInitialData: -> - promise = @.loadProject() - promise.then(=> @.loadModules()) - return promise + @.loadProject() + return @.loadModules() module.controller("GogsController", GogsController) diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index 6099a528..4c783cd4 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -59,7 +59,8 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F "$tgQueueModelTransformation", "tgErrorHandlingService", "$tgStorage", - "tgFilterRemoteStorageService" + "tgFilterRemoteStorageService", + "tgProjectService" ] storeCustomFiltersName: 'backlog-custom-filters' @@ -69,7 +70,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @appMetaService, @navUrls, @events, @analytics, @translate, @loading, @rs2, @modelTransform, @errorHandlingService, - @storage, @filterRemoteStorageService) -> + @storage, @filterRemoteStorageService, @projectService) -> bindMethods(@) @.backlogOrder = {} @@ -341,28 +342,29 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F break loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.is_backlog_activated - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project - @scope.closedMilestones = !!project.total_closed_milestones - @scope.$emit('project:loaded', project) - @scope.points = _.sortBy(project.points, "order") - @scope.pointsById = groupBy(project.points, (x) -> x.id) - @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id) - @scope.usStatusList = _.sortBy(project.us_statuses, "id") - return project + if not project.is_backlog_activated + @errorHandlingService.permissionDenied() + + @scope.projectId = project.id + @scope.project = project + @scope.closedMilestones = !!project.total_closed_milestones + @scope.$emit('project:loaded', project) + @scope.points = _.sortBy(project.points, "order") + @scope.pointsById = groupBy(project.points, (x) -> x.id) + @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id) + @scope.usStatusList = _.sortBy(project.us_statuses, "id") + + return project loadInitialData: -> - promise = @.loadProject() - promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @.initializeSubscription() + project = @.loadProject() - return promise - .then(=> @.loadBacklog()) + @.fillUsersAndRoles(project.members, project.roles) + @.initializeSubscription() + + return @.loadBacklog() .then(=> @.generateFilters()) .then(=> @scope.$emit("backlog:loaded")) diff --git a/app/coffee/modules/base/contrib.coffee b/app/coffee/modules/base/contrib.coffee index e8607fef..ec0b40b9 100644 --- a/app/coffee/modules/base/contrib.coffee +++ b/app/coffee/modules/base/contrib.coffee @@ -32,25 +32,24 @@ class ContribController extends taiga.Controller "$routeParams", "$tgRepo", "$tgResources", - "$tgConfirm" + "$tgConfirm", + "tgProjectService" ] - constructor: (@rootScope, @scope, @params, @repo, @rs, @confirm) -> + constructor: (@rootScope, @scope, @params, @repo, @rs, @confirm, @projectService) -> @scope.currentPlugin = _.head(_.filter(@rootScope.adminPlugins, {"slug": @params.plugin})) @scope.projectSlug = @params.pslug - promise = @.loadInitialData() - - promise.then null, => - @confirm.notify("error") + @.loadInitialData() loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - @scope.$broadcast('project:loaded', project) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + @scope.$broadcast('project:loaded', project) + return project loadInitialData: -> return @.loadProject() diff --git a/app/coffee/modules/epics/detail.coffee b/app/coffee/modules/epics/detail.coffee index f5a35849..71512182 100644 --- a/app/coffee/modules/epics/detail.coffee +++ b/app/coffee/modules/epics/detail.coffee @@ -54,11 +54,12 @@ class EpicDetailController extends mixOf(taiga.Controller, taiga.PageMixin) "$tgNavUrls", "$translate", "$tgQueueModelTransformation", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @rs2, @params, @q, @location, - @log, @appMetaService, @analytics, @navUrls, @translate, @modelTransform, @errorHandlingService) -> + @log, @appMetaService, @analytics, @navUrls, @translate, @modelTransform, @errorHandlingService, @projectService) -> bindMethods(@) @scope.epicRef = @params.epicref @@ -102,14 +103,15 @@ class EpicDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project-epics", ctx) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.immutableProject = Immutable.fromJS(project._attrs) - @scope.$emit('project:loaded', project) - @scope.statusList = project.epic_statuses - @scope.statusById = groupBy(project.epic_statuses, (x) -> x.id) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.immutableProject = @projectService.project + @scope.$emit('project:loaded', project) + @scope.statusList = project.epic_statuses + @scope.statusById = groupBy(project.epic_statuses, (x) -> x.id) + return project loadEpic: -> return @rs.epics.getByRef(@scope.projectId, @params.epicref).then (epic) => @@ -139,10 +141,10 @@ class EpicDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.userstories = data loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @.loadEpic().then(=> @.loadUserstories()) + project = @.loadProject() + + @.fillUsersAndRoles(project.members, project.roles) + @.loadEpic().then(=> @.loadUserstories()) ### # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button. diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index bb65f413..20a7fc69 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -53,11 +53,12 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) "$tgNavUrls", "$translate", "$tgQueueModelTransformation", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, - @log, @appMetaService, @analytics, @navUrls, @translate, @modelTransform, @errorHandlingService) -> + @log, @appMetaService, @analytics, @navUrls, @translate, @modelTransform, @errorHandlingService, @projectService) -> bindMethods(@) @scope.issueRef = @params.issueref @@ -112,19 +113,20 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project", ctx) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - @scope.statusList = project.issue_statuses - @scope.statusById = groupBy(project.issue_statuses, (x) -> x.id) - @scope.typeById = groupBy(project.issue_types, (x) -> x.id) - @scope.typeList = _.sortBy(project.issue_types, "order") - @scope.severityList = project.severities - @scope.severityById = groupBy(project.severities, (x) -> x.id) - @scope.priorityList = project.priorities - @scope.priorityById = groupBy(project.priorities, (x) -> x.id) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + @scope.statusList = project.issue_statuses + @scope.statusById = groupBy(project.issue_statuses, (x) -> x.id) + @scope.typeById = groupBy(project.issue_types, (x) -> x.id) + @scope.typeList = _.sortBy(project.issue_types, "order") + @scope.severityList = project.severities + @scope.severityById = groupBy(project.severities, (x) -> x.id) + @scope.priorityList = project.priorities + @scope.priorityById = groupBy(project.priorities, (x) -> x.id) + return project loadIssue: -> return @rs.issues.getByRef(@scope.projectId, @params.issueref).then (issue) => @@ -149,10 +151,11 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.nextUrl = @navUrls.resolve("project-issues-detail", ctx) loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @.loadIssue() + project = @.loadProject() + + @.fillUsersAndRoles(project.members, project.roles) + + return @.loadIssue() ### # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button. diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 9a53e14e..0f149666 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -58,14 +58,16 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi "$translate", "tgErrorHandlingService", "$tgStorage", - "tgFilterRemoteStorageService" + "tgFilterRemoteStorageService", + "tgProjectService", + "tgUserActivityService" ] filtersHashSuffix: "issues-filters" myFiltersHashSuffix: "issues-my-filters" constructor: (@scope, @rootscope, @repo, @confirm, @rs, @urls, @params, @q, @location, @appMetaService, - @navUrls, @events, @analytics, @translate, @errorHandlingService, @storage, @filterRemoteStorageService) -> + @navUrls, @events, @analytics, @translate, @errorHandlingService, @storage, @filterRemoteStorageService, @projectService) -> bindMethods(@) @scope.sectionName = "Issues" @@ -286,24 +288,25 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.is_issues_activated - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) + if not project.is_issues_activated + @errorHandlingService.permissionDenied() - @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id) - @scope.issueStatusList = _.sortBy(project.issue_statuses, "order") - @scope.severityById = groupBy(project.severities, (x) -> x.id) - @scope.severityList = _.sortBy(project.severities, "order") - @scope.priorityById = groupBy(project.priorities, (x) -> x.id) - @scope.priorityList = _.sortBy(project.priorities, "order") - @scope.issueTypes = _.sortBy(project.issue_types, "order") - @scope.issueTypeById = groupBy(project.issue_types, (x) -> x.id) + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) - return project + @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id) + @scope.issueStatusList = _.sortBy(project.issue_statuses, "order") + @scope.severityById = groupBy(project.severities, (x) -> x.id) + @scope.severityList = _.sortBy(project.severities, "order") + @scope.priorityById = groupBy(project.priorities, (x) -> x.id) + @scope.priorityList = _.sortBy(project.priorities, "order") + @scope.issueTypes = _.sortBy(project.issue_types, "order") + @scope.issueTypeById = groupBy(project.issue_types, (x) -> x.id) + + return project # We need to guarantee that the last petition done here is the finally used # When searching by text loadIssues can be called fastly with different parameters and @@ -328,13 +331,13 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi return promise loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @.initializeSubscription() - @.generateFilters() + project = @.loadProject() - return @.loadIssues() + @.fillUsersAndRoles(project.members, project.roles) + @.initializeSubscription() + @.generateFilters() + + return @.loadIssues() # Functions used from templates addNewIssue: -> diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index 643472f5..be2a2ab2 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -58,7 +58,8 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi "$tgModel", "tgKanbanUserstories", "$tgStorage", - "tgFilterRemoteStorageService" + "tgFilterRemoteStorageService", + "tgProjectService" ] storeCustomFiltersName: 'kanban-custom-filters' @@ -66,7 +67,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi constructor: (@scope, @rootscope, @repo, @confirm, @rs, @rs2, @params, @q, @location, @appMetaService, @navUrls, @events, @analytics, @translate, @errorHandlingService, - @model, @kanbanUserstoriesService, @storage, @filterRemoteStorageService) -> + @model, @kanbanUserstoriesService, @storage, @filterRemoteStorageService, @projectService) -> bindMethods(@) @kanbanUserstoriesService.reset() @.openFilter = false @@ -237,20 +238,21 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi ]) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.is_kanban_activated - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project - @scope.projectId = project.id - @scope.points = _.sortBy(project.points, "order") - @scope.pointsById = groupBy(project.points, (x) -> x.id) - @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id) - @scope.usStatusList = _.sortBy(project.us_statuses, "order") + if not project.is_kanban_activated + @errorHandlingService.permissionDenied() - @scope.$emit("project:loaded", project) - return project + @scope.projectId = project.id + @scope.project = project + @scope.projectId = project.id + @scope.points = _.sortBy(project.points, "order") + @scope.pointsById = groupBy(project.points, (x) -> x.id) + @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id) + @scope.usStatusList = _.sortBy(project.us_statuses, "order") + + @scope.$emit("project:loaded", project) + return project initializeSubscription: -> routingKey1 = "changes.project.#{@scope.projectId}.userstories" @@ -258,12 +260,12 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @.loadUserstories() loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @.initializeSubscription() - @.loadKanban() - @.generateFilters() + project = @.loadProject() + + @.fillUsersAndRoles(project.members, project.roles) + @.initializeSubscription() + @.loadKanban() + @.generateFilters() # Utils methods diff --git a/app/coffee/modules/search.coffee b/app/coffee/modules/search.coffee index 37cf51bc..5eb43aa8 100644 --- a/app/coffee/modules/search.coffee +++ b/app/coffee/modules/search.coffee @@ -49,23 +49,22 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) "tgAppMetaService", "$tgNavUrls", "$translate", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] - constructor: (@scope, @repo, @rs, @params, @q, @location, @appMetaService, @navUrls, @translate, @errorHandlingService) -> + constructor: (@scope, @repo, @rs, @params, @q, @location, @appMetaService, @navUrls, @translate, @errorHandlingService, @projectService) -> @scope.sectionName = "Search" - promise = @.loadInitialData() + @.loadInitialData() - promise.then () => - title = @translate.instant("SEARCH.PAGE_TITLE", {projectName: @scope.project.name}) - description = @translate.instant("SEARCH.PAGE_DESCRIPTION", { - projectName: @scope.project.name, - projectDescription: @scope.project.description - }) - @appMetaService.setAll(title, description) + title = @translate.instant("SEARCH.PAGE_TITLE", {projectName: @scope.project.name}) + description = @translate.instant("SEARCH.PAGE_DESCRIPTION", { + projectName: @scope.project.name, + projectDescription: @scope.project.description + }) - promise.then null, @.onInitialDataError.bind(@) + @appMetaService.setAll(title, description) # Search input watcher @scope.searchTerm = null @@ -85,17 +84,18 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) return defered.promise loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.project = project - @scope.$emit('project:loaded', project) + project = @projectService.project.toJS() - @scope.epicStatusById = groupBy(project.epic_statuses, (x) -> x.id) - @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id) - @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id) - @scope.severityById = groupBy(project.severities, (x) -> x.id) - @scope.priorityById = groupBy(project.priorities, (x) -> x.id) - @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id) - return project + @scope.project = project + @scope.$emit('project:loaded', project) + + @scope.epicStatusById = groupBy(project.epic_statuses, (x) -> x.id) + @scope.issueStatusById = groupBy(project.issue_statuses, (x) -> x.id) + @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id) + @scope.severityById = groupBy(project.severities, (x) -> x.id) + @scope.priorityById = groupBy(project.priorities, (x) -> x.id) + @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id) + return project loadSearchData: (term = "") -> @scope.loading = true @@ -112,9 +112,10 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) return @._promise loadInitialData: -> - return @.loadProject().then (project) => - @scope.projectId = project.id - @.fillUsersAndRoles(project.members, project.roles) + project = @.loadProject() + + @scope.projectId = project.id + @.fillUsersAndRoles(project.members, project.roles) module.controller("SearchController", SearchController) diff --git a/app/coffee/modules/tasks/detail.coffee b/app/coffee/modules/tasks/detail.coffee index 2e9ae523..c3cc8339 100644 --- a/app/coffee/modules/tasks/detail.coffee +++ b/app/coffee/modules/tasks/detail.coffee @@ -51,11 +51,12 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) "$tgAnalytics", "$translate", "$tgQueueModelTransformation", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, - @log, @appMetaService, @navUrls, @analytics, @translate, @modelTransform, @errorHandlingService) -> + @log, @appMetaService, @navUrls, @analytics, @translate, @modelTransform, @errorHandlingService, @projectService) -> bindMethods(@) @scope.taskRef = @params.taskref @@ -106,13 +107,14 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project-userstories-detail", ctx) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - @scope.statusList = project.task_statuses - @scope.statusById = groupBy(project.task_statuses, (x) -> x.id) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + @scope.statusList = project.task_statuses + @scope.statusById = groupBy(project.task_statuses, (x) -> x.id) + return project loadTask: -> return @rs.tasks.getByRef(@scope.projectId, @params.taskref).then (task) => @@ -150,10 +152,10 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return us loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @.loadTask().then(=> @q.all([@.loadSprint(), @.loadUserStory()])) + project = @.loadProject() + + @.fillUsersAndRoles(project.members, project.roles) + return @.loadTask().then(=> @q.all([@.loadSprint(), @.loadUserStory()])) ### # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button. diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index e11a4769..becdf04a 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -88,17 +88,18 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.memberships = _.reject(@scope.activeUsers, {id: user?.id}) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) + project = @projectService.project.toJS() - @scope.issuesEnabled = project.is_issues_activated - @scope.tasksEnabled = project.is_kanban_activated or project.is_backlog_activated - @scope.wikiEnabled = project.is_wiki_activated - @scope.owner = project.owner.id + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) - return project + @scope.issuesEnabled = project.is_issues_activated + @scope.tasksEnabled = project.is_kanban_activated or project.is_backlog_activated + @scope.wikiEnabled = project.is_wiki_activated + @scope.owner = project.owner.id + + return project loadMemberStats: -> return @rs.projects.memberStats(@scope.projectId).then (stats) => @@ -132,16 +133,16 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) return stats loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @.loadMembers() + project = @.loadProject() - userRoles = _.map @scope.users, (user) -> user.role + @.fillUsersAndRoles(project.members, project.roles) + @.loadMembers() - @scope.roles = _.filter @scope.roles, (role) -> userRoles.indexOf(role.id) != -1 + userRoles = _.map @scope.users, (user) -> user.role - return @.loadMemberStats() + @scope.roles = _.filter @scope.roles, (role) -> userRoles.indexOf(role.id) != -1 + + return @.loadMemberStats() module.controller("TeamController", TeamController) diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 950185df..b75a10e0 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -52,11 +52,12 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) "$translate", "$tgQueueModelTransformation", "tgErrorHandlingService", - "$tgConfig" + "$tgConfig", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, - @log, @appMetaService, @navUrls, @analytics, @translate, @modelTransform, @errorHandlingService, @configService) -> + @log, @appMetaService, @navUrls, @analytics, @translate, @modelTransform, @errorHandlingService, @configService, @projectService) -> bindMethods(@) @scope.usRef = @params.usref @@ -123,16 +124,17 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.onDeleteGoToUrl = @navUrls.resolve("project-kanban", ctx) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - @scope.statusList = project.us_statuses - @scope.statusById = groupBy(project.us_statuses, (x) -> x.id) - @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id) - @scope.pointsList = _.sortBy(project.points, "order") - @scope.pointsById = groupBy(@scope.pointsList, (e) -> e.id) - return project + project = @projectService.project.toJS() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + @scope.statusList = project.us_statuses + @scope.statusById = groupBy(project.us_statuses, (x) -> x.id) + @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id) + @scope.pointsList = _.sortBy(project.points, "order") + @scope.pointsById = groupBy(@scope.pointsList, (e) -> e.id) + return project loadUs: -> httpParams = _.pick(@location.search(), "milestone", "no-milestone", "kanban-status") @@ -180,10 +182,9 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) return tasks loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @.loadUs().then(=> @q.all([@.loadSprint(), @.loadTasks()])) + project = @.loadProject() + @.fillUsersAndRoles(project.members, project.roles) + @.loadUs().then(=> @q.all([@.loadSprint(), @.loadTasks()])) ### # Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button. diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index 4100a233..daee9ada 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -52,11 +52,12 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) "$tgNavUrls", "$tgAnalytics", "$translate", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @model, @confirm, @rs, @params, @q, @location, - @filter, @log, @appMetaService, @navUrls, @analytics, @translate, @errorHandlingService) -> + @filter, @log, @appMetaService, @navUrls, @analytics, @translate, @errorHandlingService, @projectService) -> @scope.$on("wiki:links:move", @.moveLink) @scope.projectSlug = @params.pslug @scope.wikiSlug = @params.slug @@ -86,14 +87,15 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @appMetaService.setAll(title, description) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.is_wiki_activated - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - return project + if not project.is_wiki_activated + @errorHandlingService.permissionDenied() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + return project loadWiki: -> promise = @rs.wiki.getBySlug(@scope.projectId, @params.slug) @@ -130,10 +132,10 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.wikiTitle = selectedWikiLink.title if selectedWikiLink? loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @q.all([@.loadWikiLinks(), @.loadWiki()]).then @.checkLinksPerms.bind(this) + project = @.loadProject() + + @.fillUsersAndRoles(project.members, project.roles) + @q.all([@.loadWikiLinks(), @.loadWiki()]).then @.checkLinksPerms.bind(this) checkLinksPerms: -> if @scope.project.my_permissions.indexOf("add_wiki_link") != -1 || diff --git a/app/coffee/modules/wiki/pages-list.coffee b/app/coffee/modules/wiki/pages-list.coffee index 5aaddb8c..ea85317f 100644 --- a/app/coffee/modules/wiki/pages-list.coffee +++ b/app/coffee/modules/wiki/pages-list.coffee @@ -43,11 +43,12 @@ class WikiPagesListController extends mixOf(taiga.Controller, taiga.PageMixin) "$routeParams", "$q", "$tgNavUrls", - "tgErrorHandlingService" + "tgErrorHandlingService", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @model, @confirm, @rs, @params, @q, - @navUrls, @errorHandlingService) -> + @navUrls, @errorHandlingService, @projectService) -> @scope.projectSlug = @params.pslug @scope.wikiSlug = @params.slug @scope.wikiTitle = @scope.wikiSlug @@ -60,14 +61,16 @@ class WikiPagesListController extends mixOf(taiga.Controller, taiga.PageMixin) promise.then null, @.onInitialDataError.bind(@) loadProject: -> - return @rs.projects.getBySlug(@params.pslug).then (project) => - if not project.is_wiki_activated - @errorHandlingService.permissionDenied() + project = @projectService.project.toJS() - @scope.projectId = project.id - @scope.project = project - @scope.$emit('project:loaded', project) - return project + if not project.is_wiki_activated + @errorHandlingService.permissionDenied() + + @scope.projectId = project.id + @scope.project = project + @scope.$emit('project:loaded', project) + + return project loadWikiPages: -> promise = @rs.wiki.list(@scope.projectId).then (wikipages) => @@ -87,10 +90,11 @@ class WikiPagesListController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.wikiTitle = selectedWikiLink.title if selectedWikiLink? loadInitialData: -> - promise = @.loadProject() - return promise.then (project) => - @.fillUsersAndRoles(project.members, project.roles) - @q.all([@.loadWikiLinks(), @.loadWikiPages()]).then @.checkLinksPerms.bind(this) + project = @.loadProject() + + @.fillUsersAndRoles(project.members, project.roles) + + @q.all([@.loadWikiLinks(), @.loadWikiPages()]).then(@.checkLinksPerms.bind(this)) checkLinksPerms: -> if @scope.project.my_permissions.indexOf("add_wiki_link") != -1 || diff --git a/app/modules/services/project.service.coffee b/app/modules/services/project.service.coffee index 649147b4..8e2e1906 100644 --- a/app/modules/services/project.service.coffee +++ b/app/modules/services/project.service.coffee @@ -22,10 +22,12 @@ taiga = @.taiga class ProjectService @.$inject = [ "tgProjectsService", - "tgXhrErrorService" + "tgXhrErrorService", + "tgUserActivityService", + "$interval" ] - constructor: (@projectsService, @xhrError) -> + constructor: (@projectsService, @xhrError, @userActivityService, @interval) -> @._project = null @._section = null @._sectionsBreadcrumb = Immutable.List() @@ -36,12 +38,24 @@ class ProjectService taiga.defineImmutableProperty @, "sectionsBreadcrumb", () => return @._sectionsBreadcrumb taiga.defineImmutableProperty @, "activeMembers", () => return @._activeMembers + @.autoRefresh() + cleanProject: () -> @._project = null @._activeMembers = Immutable.List() @._section = null @._sectionsBreadcrumb = Immutable.List() + autoRefresh: () -> + intervalId = @interval () => + @.fetchProject() + , 60 * 10 * 1000 + + @userActivityService.onInactive () => @interval.cancel(intervalId) + @userActivityService.onActive () => + @.fetchProject() + @.autoRefresh() + setSection: (section) -> @._section = section @@ -68,6 +82,8 @@ class ProjectService else resolve() fetchProject: () -> + return if !@.project + pslug = @.project.get('slug') return @projectsService.getProjectBySlug(pslug).then (project) => @.setProject(project) diff --git a/app/modules/services/project.service.spec.coffee b/app/modules/services/project.service.spec.coffee index 20f529d1..52480b05 100644 --- a/app/modules/services/project.service.spec.coffee +++ b/app/modules/services/project.service.spec.coffee @@ -19,6 +19,7 @@ describe "tgProjectService", -> $provide = null + $interval = null mocks = {} projectService = null @@ -29,6 +30,14 @@ describe "tgProjectService", -> $provide.value "tgProjectsService", mocks.projectsService + _mockUserActivityService = () -> + mocks.userActivityService = { + onInactive: sinon.stub(), + onActive: sinon.stub() + } + + $provide.value "tgUserActivityService", mocks.userActivityService + _mockXhrErrorService = () -> mocks.xhrErrorService = { response: sinon.stub() @@ -42,6 +51,7 @@ describe "tgProjectService", -> _mockProjectsService() _mockXhrErrorService() + _mockUserActivityService() return null @@ -49,8 +59,9 @@ describe "tgProjectService", -> _mocks() _inject = () -> - inject (_tgProjectService_) -> + inject (_tgProjectService_, _$interval_) -> projectService = _tgProjectService_ + $interval = _$interval_ beforeEach -> module "taigaCommon" @@ -157,3 +168,35 @@ describe "tgProjectService", -> expect(perm1).to.be.true expect(perm2).to.be.false + + it "autorefresh project interval", () -> + projectService.fetchProject = sinon.spy() + + expect(projectService.fetchProject).not.to.have.been.called + + $interval.flush(60 * 11 * 1000) + + expect(projectService.fetchProject).to.have.been.called + + it "cancel interval on user inactivity", () -> + $interval.cancel = sinon.spy() + + projectService.fetchProject = sinon.spy() + + expect($interval.cancel).not.to.have.been.called + + mocks.userActivityService.onInactive.callArg(0) + + expect($interval.cancel).to.have.been.called + + it "fech project if the user restars the activity", () -> + projectService.fetchProject = sinon.spy() + projectService.autoRefresh = sinon.spy() + + expect(projectService.fetchProject).not.to.have.been.called + expect(projectService.autoRefresh).not.to.have.been.called + + mocks.userActivityService.onActive.callArg(0) + + expect(projectService.fetchProject).to.have.been.called + expect(projectService.autoRefresh).to.have.been.called diff --git a/app/modules/services/user-activity.service.coffee b/app/modules/services/user-activity.service.coffee new file mode 100644 index 00000000..07e4afd6 --- /dev/null +++ b/app/modules/services/user-activity.service.coffee @@ -0,0 +1,77 @@ +### +# Copyright (C) 2014-2016 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: user-activity.service.coffee +### + +taiga = @.taiga + +groupBy = @.taiga.groupBy + +class UserActivityService + @.$inject = ['$timeout'] + + idleTimeout: 60 * 5 * 1000 + + constructor: (@timeout) -> + window.addEventListener('mousemove', @.resetTimer.bind(this), false) + window.addEventListener('mousedown', @.resetTimer.bind(this), false) + window.addEventListener('keypress', @.resetTimer.bind(this), false) + window.addEventListener('mousewheel', @.resetTimer.bind(this), false) + window.addEventListener('touchmove', @.resetTimer.bind(this), false) + + @.subscriptionsActive = [] + @.subscriptionsInactive = [] + @.isActive = true + + @.startTimer() + + startTimer: () -> + @.timerId = @timeout(@._fireInactive.bind(this), @.idleTimeout) + + resetTimer: () -> + if !@.isActive + @._fireActive() + + @timeout.cancel(@.timerId) + @.startTimer() + + @.isActive = true + + onActive: (cb) -> + @.subscriptionsActive.push(cb) + + return @._unSubscriptionsActive.bind(this, cb) + + onInactive: (cb) -> + @.subscriptionsInactive.push(cb) + + return @._unSubscriptionsInactive.bind(this, cb) + + _fireActive: () -> + @.subscriptionsActive.forEach (it) -> it() + + _fireInactive: () -> + @.isActive = false + @.subscriptionsInactive.forEach (it) -> it() + + _unSubscriptionsActive: (cb) -> + @.subscriptionsActive = @.subscriptionsActive.filter (fn) -> fn != cb + + _unSubscriptionsInactive: (cb) -> + @.subscriptionsInactive = @.subscriptionsInactive.filter (fn) -> fn != cb + +angular.module("taigaCommon").service("tgUserActivityService", UserActivityService) diff --git a/app/modules/services/user-activity.service.spec.coffee b/app/modules/services/user-activity.service.spec.coffee new file mode 100644 index 00000000..7b4309e4 --- /dev/null +++ b/app/modules/services/user-activity.service.spec.coffee @@ -0,0 +1,79 @@ +### +# Copyright (C) 2014-2016 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: app-meta.service.spec.coffee +### + +angular.module("taigaCommon").provider("$exceptionHandler", angular.mock.$ExceptionHandlerProvider) + +describe "UserActivityService", -> + userActivityService = null + $timeout = null + + _inject = () -> + inject (_tgUserActivityService_, _$timeout_) -> + userActivityService = _tgUserActivityService_ + $timeout = _$timeout_ + + beforeEach -> + module "taigaCommon" + _inject() + + it "inactive", (done) -> + active = sinon.spy() + userActivityService.onInactive () -> + expect(active).not.to.have.been.called; + done() + + userActivityService.onActive(active) + + $timeout.flush() + + it "unsubscribe inactive", (done) -> + unsubscribe = userActivityService.onInactive () -> + unsubscribe() + + expect(userActivityService.subscriptionsInactive).to.have.length(0) + + done() + + expect(userActivityService.subscriptionsInactive).to.have.length(1) + + $timeout.flush() + + it "active", (done) -> + inactive = sinon.spy() + userActivityService.onInactive(inactive) + + userActivityService.onActive () -> + expect(inactive).to.have.been.called; + done() + + $timeout.flush() + userActivityService.resetTimer() + + it "unsubscribe active", (done) -> + unsubscribe = userActivityService.onActive () -> + unsubscribe() + + expect(userActivityService.subscriptionsActive).to.have.length(0) + + done() + + expect(userActivityService.subscriptionsActive).to.have.length(1) + + $timeout.flush() + userActivityService.resetTimer() From 900ce3c218cb32a4e58b6bfb1c7755ddbb52d1c8 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 21 Nov 2016 09:52:34 +0100 Subject: [PATCH 062/175] fix firefox performance drag & drop --- app/coffee/modules/kanban/sortable.coffee | 1 - app/coffee/modules/taskboard/sortable.coffee | 1 - 2 files changed, 2 deletions(-) diff --git a/app/coffee/modules/kanban/sortable.coffee b/app/coffee/modules/kanban/sortable.coffee index fda8e063..e3e72876 100644 --- a/app/coffee/modules/kanban/sortable.coffee +++ b/app/coffee/modules/kanban/sortable.coffee @@ -65,7 +65,6 @@ KanbanSortableDirective = ($repo, $rs, $rootscope) -> drake = dragula(containers, { copySortSource: false, copy: false, - mirrorContainer: tdom[0], moves: (item) -> return $(item).is('tg-card') }) diff --git a/app/coffee/modules/taskboard/sortable.coffee b/app/coffee/modules/taskboard/sortable.coffee index 9b92eb51..119fcae0 100644 --- a/app/coffee/modules/taskboard/sortable.coffee +++ b/app/coffee/modules/taskboard/sortable.coffee @@ -68,7 +68,6 @@ TaskboardSortableDirective = ($repo, $rs, $rootscope, $translate) -> drake = dragula(containers, { copySortSource: false, copy: false, - mirrorContainer: $el[0], accepts: (el, target) -> return !$(target).hasClass('taskboard-userstory-box') moves: (item) -> return $(item).is('tg-card') From 451a2d0d01982aceaef7be9e41db1098a7ff4f4c Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 22 Nov 2016 08:44:57 +0100 Subject: [PATCH 063/175] Issue 4753: Custom url attributes doesn't support urls without domain --- app/partials/custom-attributes/custom-attribute-value-edit.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/partials/custom-attributes/custom-attribute-value-edit.jade b/app/partials/custom-attributes/custom-attribute-value-edit.jade index a716304a..e00fc04f 100644 --- a/app/partials/custom-attributes/custom-attribute-value-edit.jade +++ b/app/partials/custom-attributes/custom-attribute-value-edit.jade @@ -16,7 +16,7 @@ form.custom-field-single.editable <% } else if (type=="date") { %> input#custom-field-value(name="value", type="text", data-pikaday, value!="<%- value %>") <% } else if (type=="url") { %> - input#custom-field-value(name="value", type="url", data-type="url", value!="<%- value %>") + input#custom-field-value(name="value", type="url", value!="<%- value %>") <% } else { %> input#custom-field-value(name="value", type="text", value!="<%- value %>") <% } %> From 41411de3a20ae3637a3bba6a4748db9949bc53a4 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 23 Aug 2016 12:41:28 +0200 Subject: [PATCH 064/175] New wysiwyg editor (like Medium editor) --- .bowerrc | 3 - .travis.yml | 2 - CHANGELOG.md | 2 + README.md | 7 +- app/coffee/modules/base/model.coffee | 2 +- app/coffee/modules/common.coffee | 16 +- app/coffee/modules/common/components.coffee | 161 ++---- app/coffee/modules/common/filters.coffee | 10 +- app/coffee/modules/common/loader.coffee | 5 +- app/coffee/modules/common/wisiwyg.coffee | 489 ----------------- app/coffee/modules/userstories/detail.coffee | 8 +- app/coffee/modules/wiki/main.coffee | 160 ++---- app/coffee/utils.coffee | 11 + app/js/medium-mention.js | 270 ++++++++++ app/locales/taiga/locale-en.json | 27 +- .../components/bind-code.directive.coffee | 54 ++ .../comment-edit-wysiwyg.directive.coffee | 59 +++ .../wysiwyg/comment-wysiwyg.directive.coffee | 77 +++ .../wysiwyg/item-wysiwyg.directive.coffee | 100 ++++ .../wysiwyg-code-hightlighter.service.coffee | 180 +++++++ .../wysiwyg/wysiwyg-mention.service.coffee | 117 ++++ .../wysiwyg/wysiwyg.directive.coffee | 401 ++++++++++++++ .../components/wysiwyg}/wysiwyg.scss | 123 ++++- .../components/wysiwyg/wysiwyg.service.coffee | 121 +++++ .../comments/comment.controller.coffee | 4 +- app/modules/history/comments/comment.jade | 29 +- app/modules/history/comments/comment.scss | 18 +- app/modules/history/comments/comments.jade | 26 +- .../history-lightbox/history-entry.jade | 2 +- app/modules/history/history.controller.coffee | 8 +- .../history/history.controller.spec.coffee | 20 +- app/modules/history/history.jade | 4 +- .../components/editable-description.jade | 15 - .../common/components/wysiwyg-toolbar.jade | 58 ++ app/partials/common/components/wysiwyg.jade | 11 - app/partials/epic/epic-detail.jade | 12 +- app/partials/issue/issues-detail.jade | 14 +- app/partials/task/task-detail.jade | 7 +- app/partials/us/us-detail.jade | 7 +- app/partials/wiki/editable-wiki-content.jade | 29 - app/partials/wiki/wiki.jade | 7 +- app/styles/components/markitup.scss | 42 -- app/styles/extras/dependencies.scss | 12 +- app/styles/layout/wiki.scss | 70 --- app/styles/vendor/markitup.css | 175 ------ bower.json | 90 ---- e2e/helpers/detail-helper.js | 36 +- e2e/shared/detail.js | 103 +--- e2e/shared/wysiwyg.js | 500 ++++++++++++++++++ e2e/suites/epics/epic-detail.e2e.js | 7 +- e2e/suites/issues/issue-detail.e2e.js | 7 +- e2e/suites/tasks/task-detail.e2e.js | 7 +- .../user-stories/user-story-detail.e2e.js | 7 +- e2e/suites/wiki.e2e.js | 26 +- emojis/0023-20e3.png | Bin 0 -> 491 bytes emojis/002a-20e3.png | Bin 0 -> 460 bytes emojis/0030-20e3.png | Bin 0 -> 435 bytes emojis/0031-20e3.png | Bin 0 -> 277 bytes emojis/0032-20e3.png | Bin 0 -> 455 bytes emojis/0033-20e3.png | Bin 0 -> 468 bytes emojis/0034-20e3.png | Bin 0 -> 424 bytes emojis/0035-20e3.png | Bin 0 -> 469 bytes emojis/0036-20e3.png | Bin 0 -> 443 bytes emojis/0037-20e3.png | Bin 0 -> 392 bytes emojis/0038-20e3.png | Bin 0 -> 458 bytes emojis/0039-20e3.png | Bin 0 -> 446 bytes emojis/1f004.png | Bin 0 -> 467 bytes emojis/1f0cf.png | Bin 0 -> 607 bytes emojis/1f170.png | Bin 0 -> 469 bytes emojis/1f171.png | Bin 0 -> 436 bytes emojis/1f17e.png | Bin 0 -> 512 bytes emojis/1f17f.png | Bin 0 -> 404 bytes emojis/1f18e.png | Bin 0 -> 596 bytes emojis/1f191.png | Bin 0 -> 532 bytes emojis/1f192.png | Bin 0 -> 482 bytes emojis/1f193.png | Bin 0 -> 531 bytes emojis/1f194.png | Bin 0 -> 472 bytes emojis/1f195.png | Bin 0 -> 486 bytes emojis/1f196.png | Bin 0 -> 591 bytes emojis/1f197.png | Bin 0 -> 596 bytes emojis/1f198.png | Bin 0 -> 587 bytes emojis/1f199.png | Bin 0 -> 513 bytes emojis/1f19a.png | Bin 0 -> 650 bytes emojis/1f1e6-1f1e8.png | Bin 0 -> 571 bytes emojis/1f1e6-1f1e9.png | Bin 0 -> 346 bytes emojis/1f1e6-1f1ea.png | Bin 0 -> 229 bytes emojis/1f1e6-1f1eb.png | Bin 0 -> 346 bytes emojis/1f1e6-1f1ec.png | Bin 0 -> 529 bytes emojis/1f1e6-1f1ee.png | Bin 0 -> 573 bytes emojis/1f1e6-1f1f1.png | Bin 0 -> 343 bytes emojis/1f1e6-1f1f2.png | Bin 0 -> 203 bytes emojis/1f1e6-1f1f4.png | Bin 0 -> 360 bytes emojis/1f1e6-1f1f6.png | Bin 0 -> 409 bytes emojis/1f1e6-1f1f7.png | Bin 0 -> 291 bytes emojis/1f1e6-1f1f8.png | Bin 0 -> 566 bytes emojis/1f1e6-1f1f9.png | Bin 0 -> 187 bytes emojis/1f1e6-1f1fa.png | Bin 0 -> 559 bytes emojis/1f1e6-1f1fc.png | Bin 0 -> 274 bytes emojis/1f1e6-1f1fd.png | Bin 0 -> 302 bytes emojis/1f1e6-1f1ff.png | Bin 0 -> 281 bytes emojis/1f1e7-1f1e6.png | Bin 0 -> 399 bytes emojis/1f1e7-1f1e7.png | Bin 0 -> 307 bytes emojis/1f1e7-1f1e9.png | Bin 0 -> 307 bytes emojis/1f1e7-1f1ea.png | Bin 0 -> 197 bytes emojis/1f1e7-1f1eb.png | Bin 0 -> 263 bytes emojis/1f1e7-1f1ec.png | Bin 0 -> 195 bytes emojis/1f1e7-1f1ed.png | Bin 0 -> 387 bytes emojis/1f1e7-1f1ee.png | Bin 0 -> 658 bytes emojis/1f1e7-1f1ef.png | Bin 0 -> 210 bytes emojis/1f1e7-1f1f1.png | Bin 0 -> 556 bytes emojis/1f1e7-1f1f2.png | Bin 0 -> 550 bytes emojis/1f1e7-1f1f3.png | Bin 0 -> 547 bytes emojis/1f1e7-1f1f4.png | Bin 0 -> 317 bytes emojis/1f1e7-1f1f6.png | Bin 0 -> 484 bytes emojis/1f1e7-1f1f7.png | Bin 0 -> 539 bytes emojis/1f1e7-1f1f8.png | Bin 0 -> 368 bytes emojis/1f1e7-1f1f9.png | Bin 0 -> 465 bytes emojis/1f1e7-1f1fb.png | Bin 0 -> 303 bytes emojis/1f1e7-1f1fc.png | Bin 0 -> 210 bytes emojis/1f1e7-1f1fe.png | Bin 0 -> 315 bytes emojis/1f1e7-1f1ff.png | Bin 0 -> 520 bytes emojis/1f1e8-1f1e6.png | Bin 0 -> 357 bytes emojis/1f1e8-1f1e8.png | Bin 0 -> 410 bytes emojis/1f1e8-1f1e9.png | Bin 0 -> 624 bytes emojis/1f1e8-1f1eb.png | Bin 0 -> 383 bytes emojis/1f1e8-1f1ec.png | Bin 0 -> 401 bytes emojis/1f1e8-1f1ed.png | Bin 0 -> 300 bytes emojis/1f1e8-1f1ee.png | Bin 0 -> 198 bytes emojis/1f1e8-1f1f0.png | Bin 0 -> 567 bytes emojis/1f1e8-1f1f1.png | Bin 0 -> 284 bytes emojis/1f1e8-1f1f2.png | Bin 0 -> 250 bytes emojis/1f1e8-1f1f3.png | Bin 0 -> 292 bytes emojis/1f1e8-1f1f4.png | Bin 0 -> 198 bytes emojis/1f1e8-1f1f5.png | Bin 0 -> 195 bytes emojis/1f1e8-1f1f7.png | Bin 0 -> 288 bytes emojis/1f1e8-1f1fa.png | Bin 0 -> 398 bytes emojis/1f1e8-1f1fb.png | Bin 0 -> 347 bytes emojis/1f1e8-1f1fc.png | Bin 0 -> 260 bytes emojis/1f1e8-1f1fd.png | Bin 0 -> 510 bytes emojis/1f1e8-1f1fe.png | Bin 0 -> 333 bytes emojis/1f1e8-1f1ff.png | Bin 0 -> 385 bytes emojis/1f1e9-1f1ea.png | Bin 0 -> 205 bytes emojis/1f1e9-1f1ec.png | Bin 0 -> 805 bytes emojis/1f1e9-1f1ef.png | Bin 0 -> 401 bytes emojis/1f1e9-1f1f0.png | Bin 0 -> 258 bytes emojis/1f1e9-1f1f2.png | Bin 0 -> 360 bytes emojis/1f1e9-1f1f4.png | Bin 0 -> 328 bytes emojis/1f1e9-1f1ff.png | Bin 0 -> 397 bytes emojis/1f1ea-1f1e6.png | Bin 0 -> 321 bytes emojis/1f1ea-1f1e8.png | Bin 0 -> 381 bytes emojis/1f1ea-1f1ea.png | Bin 0 -> 209 bytes emojis/1f1ea-1f1ec.png | Bin 0 -> 286 bytes emojis/1f1ea-1f1ed.png | Bin 0 -> 351 bytes emojis/1f1ea-1f1f7.png | Bin 0 -> 511 bytes emojis/1f1ea-1f1f8.png | Bin 0 -> 321 bytes emojis/1f1ea-1f1f9.png | Bin 0 -> 498 bytes emojis/1f1ea-1f1fa.png | Bin 0 -> 366 bytes emojis/1f1eb-1f1ee.png | Bin 0 -> 264 bytes emojis/1f1eb-1f1ef.png | Bin 0 -> 549 bytes emojis/1f1eb-1f1f0.png | Bin 0 -> 576 bytes emojis/1f1eb-1f1f2.png | Bin 0 -> 360 bytes emojis/1f1eb-1f1f4.png | Bin 0 -> 301 bytes emojis/1f1eb-1f1f7.png | Bin 0 -> 195 bytes emojis/1f1ec-1f1e6.png | Bin 0 -> 208 bytes emojis/1f1ec-1f1e7.png | Bin 0 -> 638 bytes emojis/1f1ec-1f1e9.png | Bin 0 -> 555 bytes emojis/1f1ec-1f1ea.png | Bin 0 -> 418 bytes emojis/1f1ec-1f1eb.png | Bin 0 -> 408 bytes emojis/1f1ec-1f1ec.png | Bin 0 -> 324 bytes emojis/1f1ec-1f1ed.png | Bin 0 -> 286 bytes emojis/1f1ec-1f1ee.png | Bin 0 -> 423 bytes emojis/1f1ec-1f1f1.png | Bin 0 -> 377 bytes emojis/1f1ec-1f1f2.png | Bin 0 -> 205 bytes emojis/1f1ec-1f1f3.png | Bin 0 -> 199 bytes emojis/1f1ec-1f1f5.png | Bin 0 -> 560 bytes emojis/1f1ec-1f1f6.png | Bin 0 -> 401 bytes emojis/1f1ec-1f1f7.png | Bin 0 -> 328 bytes emojis/1f1ec-1f1f8.png | Bin 0 -> 566 bytes emojis/1f1ec-1f1f9.png | Bin 0 -> 304 bytes emojis/1f1ec-1f1fa.png | Bin 0 -> 375 bytes emojis/1f1ec-1f1fc.png | Bin 0 -> 282 bytes emojis/1f1ec-1f1fe.png | Bin 0 -> 575 bytes emojis/1f1ed-1f1f0.png | Bin 0 -> 459 bytes emojis/1f1ed-1f1f2.png | Bin 0 -> 559 bytes emojis/1f1ed-1f1f3.png | Bin 0 -> 281 bytes emojis/1f1ed-1f1f7.png | Bin 0 -> 338 bytes emojis/1f1ed-1f1f9.png | Bin 0 -> 364 bytes emojis/1f1ed-1f1fa.png | Bin 0 -> 195 bytes emojis/1f1ee-1f1e8.png | Bin 0 -> 304 bytes emojis/1f1ee-1f1e9.png | Bin 0 -> 196 bytes emojis/1f1ee-1f1ea.png | Bin 0 -> 200 bytes emojis/1f1ee-1f1f1.png | Bin 0 -> 302 bytes emojis/1f1ee-1f1f2.png | Bin 0 -> 342 bytes emojis/1f1ee-1f1f3.png | Bin 0 -> 270 bytes emojis/1f1ee-1f1f4.png | Bin 0 -> 805 bytes emojis/1f1ee-1f1f6.png | Bin 0 -> 345 bytes emojis/1f1ee-1f1f7.png | Bin 0 -> 286 bytes emojis/1f1ee-1f1f8.png | Bin 0 -> 305 bytes emojis/1f1ee-1f1f9.png | Bin 0 -> 197 bytes emojis/1f1ef-1f1ea.png | Bin 0 -> 600 bytes emojis/1f1ef-1f1f2.png | Bin 0 -> 634 bytes emojis/1f1ef-1f1f4.png | Bin 0 -> 360 bytes emojis/1f1ef-1f1f5.png | Bin 0 -> 288 bytes emojis/1f1f0-1f1ea.png | Bin 0 -> 344 bytes emojis/1f1f0-1f1ec.png | Bin 0 -> 401 bytes emojis/1f1f0-1f1ed.png | Bin 0 -> 360 bytes emojis/1f1f0-1f1ee.png | Bin 0 -> 609 bytes emojis/1f1f0-1f1f2.png | Bin 0 -> 472 bytes emojis/1f1f0-1f1f3.png | Bin 0 -> 590 bytes emojis/1f1f0-1f1f5.png | Bin 0 -> 374 bytes emojis/1f1f0-1f1f7.png | Bin 0 -> 582 bytes emojis/1f1f0-1f1fc.png | Bin 0 -> 271 bytes emojis/1f1f0-1f1fe.png | Bin 0 -> 577 bytes emojis/1f1f0-1f1ff.png | Bin 0 -> 378 bytes emojis/1f1f1-1f1e6.png | Bin 0 -> 303 bytes emojis/1f1f1-1f1e7.png | Bin 0 -> 307 bytes emojis/1f1f1-1f1e8.png | Bin 0 -> 403 bytes emojis/1f1f1-1f1ee.png | Bin 0 -> 303 bytes emojis/1f1f1-1f1f0.png | Bin 0 -> 488 bytes emojis/1f1f1-1f1f7.png | Bin 0 -> 329 bytes emojis/1f1f1-1f1f8.png | Bin 0 -> 283 bytes emojis/1f1f1-1f1f9.png | Bin 0 -> 201 bytes emojis/1f1f1-1f1fa.png | Bin 0 -> 210 bytes emojis/1f1f1-1f1fb.png | Bin 0 -> 191 bytes emojis/1f1f1-1f1fe.png | Bin 0 -> 279 bytes emojis/1f1f2-1f1e6.png | Bin 0 -> 246 bytes emojis/1f1f2-1f1e8.png | Bin 0 -> 198 bytes emojis/1f1f2-1f1e9.png | Bin 0 -> 348 bytes emojis/1f1f2-1f1ea.png | Bin 0 -> 332 bytes emojis/1f1f2-1f1eb.png | Bin 0 -> 195 bytes emojis/1f1f2-1f1ec.png | Bin 0 -> 230 bytes emojis/1f1f2-1f1ed.png | Bin 0 -> 545 bytes emojis/1f1f2-1f1f0.png | Bin 0 -> 591 bytes emojis/1f1f2-1f1f1.png | Bin 0 -> 200 bytes emojis/1f1f2-1f1f2.png | Bin 0 -> 440 bytes emojis/1f1f2-1f1f3.png | Bin 0 -> 331 bytes emojis/1f1f2-1f1f4.png | Bin 0 -> 438 bytes emojis/1f1f2-1f1f5.png | Bin 0 -> 417 bytes emojis/1f1f2-1f1f6.png | Bin 0 -> 554 bytes emojis/1f1f2-1f1f7.png | Bin 0 -> 326 bytes emojis/1f1f2-1f1f8.png | Bin 0 -> 535 bytes emojis/1f1f2-1f1f9.png | Bin 0 -> 306 bytes emojis/1f1f2-1f1fa.png | Bin 0 -> 222 bytes emojis/1f1f2-1f1fb.png | Bin 0 -> 303 bytes emojis/1f1f2-1f1fc.png | Bin 0 -> 325 bytes emojis/1f1f2-1f1fd.png | Bin 0 -> 367 bytes emojis/1f1f2-1f1fe.png | Bin 0 -> 429 bytes emojis/1f1f2-1f1ff.png | Bin 0 -> 407 bytes emojis/1f1f3-1f1e6.png | Bin 0 -> 584 bytes emojis/1f1f3-1f1e8.png | Bin 0 -> 488 bytes emojis/1f1f3-1f1ea.png | Bin 0 -> 246 bytes emojis/1f1f3-1f1eb.png | Bin 0 -> 315 bytes emojis/1f1f3-1f1ec.png | Bin 0 -> 192 bytes emojis/1f1f3-1f1ee.png | Bin 0 -> 283 bytes emojis/1f1f3-1f1f1.png | Bin 0 -> 198 bytes emojis/1f1f3-1f1f4.png | Bin 0 -> 300 bytes emojis/1f1f3-1f1f5.png | Bin 0 -> 452 bytes emojis/1f1f3-1f1f7.png | Bin 0 -> 257 bytes emojis/1f1f3-1f1fa.png | Bin 0 -> 414 bytes emojis/1f1f3-1f1ff.png | Bin 0 -> 497 bytes emojis/1f1f4-1f1f2.png | Bin 0 -> 274 bytes emojis/1f1f5-1f1e6.png | Bin 0 -> 316 bytes emojis/1f1f5-1f1ea.png | Bin 0 -> 197 bytes emojis/1f1f5-1f1eb.png | Bin 0 -> 317 bytes emojis/1f1f5-1f1ec.png | Bin 0 -> 525 bytes emojis/1f1f5-1f1ed.png | Bin 0 -> 430 bytes emojis/1f1f5-1f1f0.png | Bin 0 -> 422 bytes emojis/1f1f5-1f1f1.png | Bin 0 -> 183 bytes emojis/1f1f5-1f1f2.png | Bin 0 -> 741 bytes emojis/1f1f5-1f1f3.png | Bin 0 -> 536 bytes emojis/1f1f5-1f1f7.png | Bin 0 -> 385 bytes emojis/1f1f5-1f1f8.png | Bin 0 -> 326 bytes emojis/1f1f5-1f1f9.png | Bin 0 -> 445 bytes emojis/1f1f5-1f1fc.png | Bin 0 -> 365 bytes emojis/1f1f5-1f1fe.png | Bin 0 -> 283 bytes emojis/1f1f6-1f1e6.png | Bin 0 -> 343 bytes emojis/1f1f7-1f1ea.png | Bin 0 -> 486 bytes emojis/1f1f7-1f1f4.png | Bin 0 -> 199 bytes emojis/1f1f7-1f1f8.png | Bin 0 -> 455 bytes emojis/1f1f7-1f1fa.png | Bin 0 -> 192 bytes emojis/1f1f7-1f1fc.png | Bin 0 -> 390 bytes emojis/1f1f8-1f1e6.png | Bin 0 -> 411 bytes emojis/1f1f8-1f1e7.png | Bin 0 -> 585 bytes emojis/1f1f8-1f1e8.png | Bin 0 -> 592 bytes emojis/1f1f8-1f1e9.png | Bin 0 -> 344 bytes emojis/1f1f8-1f1ea.png | Bin 0 -> 261 bytes emojis/1f1f8-1f1ec.png | Bin 0 -> 349 bytes emojis/1f1f8-1f1ed.png | Bin 0 -> 536 bytes emojis/1f1f8-1f1ee.png | Bin 0 -> 332 bytes emojis/1f1f8-1f1ef.png | Bin 0 -> 300 bytes emojis/1f1f8-1f1f0.png | Bin 0 -> 409 bytes emojis/1f1f8-1f1f1.png | Bin 0 -> 197 bytes emojis/1f1f8-1f1f2.png | Bin 0 -> 397 bytes emojis/1f1f8-1f1f3.png | Bin 0 -> 248 bytes emojis/1f1f8-1f1f4.png | Bin 0 -> 326 bytes emojis/1f1f8-1f1f7.png | Bin 0 -> 302 bytes emojis/1f1f8-1f1f8.png | Bin 0 -> 368 bytes emojis/1f1f8-1f1f9.png | Bin 0 -> 375 bytes emojis/1f1f8-1f1fb.png | Bin 0 -> 281 bytes emojis/1f1f8-1f1fd.png | Bin 0 -> 406 bytes emojis/1f1f8-1f1fe.png | Bin 0 -> 275 bytes emojis/1f1f8-1f1ff.png | Bin 0 -> 452 bytes emojis/1f1f9-1f1e6.png | Bin 0 -> 577 bytes emojis/1f1f9-1f1e8.png | Bin 0 -> 535 bytes emojis/1f1f9-1f1e9.png | Bin 0 -> 196 bytes emojis/1f1f9-1f1eb.png | Bin 0 -> 420 bytes emojis/1f1f9-1f1ec.png | Bin 0 -> 365 bytes emojis/1f1f9-1f1ed.png | Bin 0 -> 202 bytes emojis/1f1f9-1f1ef.png | Bin 0 -> 275 bytes emojis/1f1f9-1f1f0.png | Bin 0 -> 496 bytes emojis/1f1f9-1f1f1.png | Bin 0 -> 445 bytes emojis/1f1f9-1f1f2.png | Bin 0 -> 402 bytes emojis/1f1f9-1f1f3.png | Bin 0 -> 325 bytes emojis/1f1f9-1f1f4.png | Bin 0 -> 285 bytes emojis/1f1f9-1f1f7.png | Bin 0 -> 378 bytes emojis/1f1f9-1f1f9.png | Bin 0 -> 588 bytes emojis/1f1f9-1f1fb.png | Bin 0 -> 634 bytes emojis/1f1f9-1f1fc.png | Bin 0 -> 316 bytes emojis/1f1f9-1f1ff.png | Bin 0 -> 568 bytes emojis/1f1fa-1f1e6.png | Bin 0 -> 195 bytes emojis/1f1fa-1f1ec.png | Bin 0 -> 308 bytes emojis/1f1fa-1f1f2.png | Bin 0 -> 381 bytes emojis/1f1fa-1f1f8.png | Bin 0 -> 381 bytes emojis/1f1fa-1f1fe.png | Bin 0 -> 365 bytes emojis/1f1fa-1f1ff.png | Bin 0 -> 286 bytes emojis/1f1fb-1f1e6.png | Bin 0 -> 345 bytes emojis/1f1fb-1f1e8.png | Bin 0 -> 294 bytes emojis/1f1fb-1f1ea.png | Bin 0 -> 311 bytes emojis/1f1fb-1f1ec.png | Bin 0 -> 563 bytes emojis/1f1fb-1f1ee.png | Bin 0 -> 578 bytes emojis/1f1fb-1f1f3.png | Bin 0 -> 252 bytes emojis/1f1fb-1f1fa.png | Bin 0 -> 414 bytes emojis/1f1fc-1f1eb.png | Bin 0 -> 341 bytes emojis/1f1fc-1f1f8.png | Bin 0 -> 337 bytes emojis/1f1fd-1f1f0.png | Bin 0 -> 422 bytes emojis/1f1fe-1f1ea.png | Bin 0 -> 194 bytes emojis/1f1fe-1f1f9.png | Bin 0 -> 532 bytes emojis/1f1ff-1f1e6.png | Bin 0 -> 529 bytes emojis/1f1ff-1f1f2.png | Bin 0 -> 278 bytes emojis/1f1ff-1f1fc.png | Bin 0 -> 413 bytes emojis/1f201.png | Bin 0 -> 345 bytes emojis/1f202.png | Bin 0 -> 479 bytes emojis/1f21a.png | Bin 0 -> 593 bytes emojis/1f22f.png | Bin 0 -> 584 bytes emojis/1f232.png | Bin 0 -> 623 bytes emojis/1f233.png | Bin 0 -> 529 bytes emojis/1f234.png | Bin 0 -> 457 bytes emojis/1f235.png | Bin 0 -> 627 bytes emojis/1f236.png | Bin 0 -> 466 bytes emojis/1f237.png | Bin 0 -> 408 bytes emojis/1f238.png | Bin 0 -> 432 bytes emojis/1f239.png | Bin 0 -> 544 bytes emojis/1f23a.png | Bin 0 -> 507 bytes emojis/1f250.png | Bin 0 -> 613 bytes emojis/1f251.png | Bin 0 -> 521 bytes emojis/1f300.png | Bin 0 -> 598 bytes emojis/1f301.png | Bin 0 -> 592 bytes emojis/1f302.png | Bin 0 -> 667 bytes emojis/1f303.png | Bin 0 -> 653 bytes emojis/1f304.png | Bin 0 -> 565 bytes emojis/1f305.png | Bin 0 -> 564 bytes emojis/1f306.png | Bin 0 -> 556 bytes emojis/1f307.png | Bin 0 -> 706 bytes emojis/1f308.png | Bin 0 -> 718 bytes emojis/1f309.png | Bin 0 -> 639 bytes emojis/1f30a.png | Bin 0 -> 552 bytes emojis/1f30b.png | Bin 0 -> 639 bytes emojis/1f30c.png | Bin 0 -> 703 bytes emojis/1f30d.png | Bin 0 -> 725 bytes emojis/1f30e.png | Bin 0 -> 666 bytes emojis/1f30f.png | Bin 0 -> 665 bytes emojis/1f310.png | Bin 0 -> 521 bytes emojis/1f311.png | Bin 0 -> 680 bytes emojis/1f312.png | Bin 0 -> 710 bytes emojis/1f313.png | Bin 0 -> 715 bytes emojis/1f314.png | Bin 0 -> 740 bytes emojis/1f315.png | Bin 0 -> 713 bytes emojis/1f316.png | Bin 0 -> 731 bytes emojis/1f317.png | Bin 0 -> 727 bytes emojis/1f318.png | Bin 0 -> 742 bytes emojis/1f319.png | Bin 0 -> 385 bytes emojis/1f31a.png | Bin 0 -> 737 bytes emojis/1f31b.png | Bin 0 -> 505 bytes emojis/1f31c.png | Bin 0 -> 539 bytes emojis/1f31d.png | Bin 0 -> 800 bytes emojis/1f31e.png | Bin 0 -> 648 bytes emojis/1f31f.png | Bin 0 -> 560 bytes emojis/1f320.png | Bin 0 -> 551 bytes emojis/1f321.png | Bin 0 -> 655 bytes emojis/1f324.png | Bin 0 -> 507 bytes emojis/1f325.png | Bin 0 -> 440 bytes emojis/1f326.png | Bin 0 -> 541 bytes emojis/1f327.png | Bin 0 -> 460 bytes emojis/1f328.png | Bin 0 -> 517 bytes emojis/1f329.png | Bin 0 -> 409 bytes emojis/1f32a.png | Bin 0 -> 728 bytes emojis/1f32b.png | Bin 0 -> 658 bytes emojis/1f32c.png | Bin 0 -> 550 bytes emojis/1f32d.png | Bin 0 -> 794 bytes emojis/1f32e.png | Bin 0 -> 599 bytes emojis/1f32f.png | Bin 0 -> 837 bytes emojis/1f330.png | Bin 0 -> 705 bytes emojis/1f331.png | Bin 0 -> 362 bytes emojis/1f332.png | Bin 0 -> 614 bytes emojis/1f333.png | Bin 0 -> 597 bytes emojis/1f334.png | Bin 0 -> 637 bytes emojis/1f335.png | Bin 0 -> 609 bytes emojis/1f336.png | Bin 0 -> 445 bytes emojis/1f337.png | Bin 0 -> 582 bytes emojis/1f338.png | Bin 0 -> 647 bytes emojis/1f339.png | Bin 0 -> 527 bytes emojis/1f33a.png | Bin 0 -> 778 bytes emojis/1f33b.png | Bin 0 -> 643 bytes emojis/1f33c.png | Bin 0 -> 664 bytes emojis/1f33d.png | Bin 0 -> 722 bytes emojis/1f33e.png | Bin 0 -> 592 bytes emojis/1f33f.png | Bin 0 -> 810 bytes emojis/1f340.png | Bin 0 -> 502 bytes emojis/1f341.png | Bin 0 -> 434 bytes emojis/1f342.png | Bin 0 -> 771 bytes emojis/1f343.png | Bin 0 -> 784 bytes emojis/1f344.png | Bin 0 -> 672 bytes emojis/1f345.png | Bin 0 -> 445 bytes emojis/1f346.png | Bin 0 -> 449 bytes emojis/1f347.png | Bin 0 -> 676 bytes emojis/1f348.png | Bin 0 -> 682 bytes emojis/1f349.png | Bin 0 -> 663 bytes emojis/1f34a.png | Bin 0 -> 452 bytes emojis/1f34b.png | Bin 0 -> 461 bytes emojis/1f34c.png | Bin 0 -> 728 bytes emojis/1f34d.png | Bin 0 -> 622 bytes emojis/1f34e.png | Bin 0 -> 460 bytes emojis/1f34f.png | Bin 0 -> 507 bytes emojis/1f350.png | Bin 0 -> 451 bytes emojis/1f351.png | Bin 0 -> 572 bytes emojis/1f352.png | Bin 0 -> 633 bytes emojis/1f353.png | Bin 0 -> 699 bytes emojis/1f354.png | Bin 0 -> 720 bytes emojis/1f355.png | Bin 0 -> 722 bytes emojis/1f356.png | Bin 0 -> 598 bytes emojis/1f357.png | Bin 0 -> 493 bytes emojis/1f358.png | Bin 0 -> 556 bytes emojis/1f359.png | Bin 0 -> 554 bytes emojis/1f35a.png | Bin 0 -> 665 bytes emojis/1f35b.png | Bin 0 -> 668 bytes emojis/1f35c.png | Bin 0 -> 842 bytes emojis/1f35d.png | Bin 0 -> 857 bytes emojis/1f35e.png | Bin 0 -> 386 bytes emojis/1f35f.png | Bin 0 -> 700 bytes emojis/1f360.png | Bin 0 -> 596 bytes emojis/1f361.png | Bin 0 -> 570 bytes emojis/1f362.png | Bin 0 -> 612 bytes emojis/1f363.png | Bin 0 -> 883 bytes emojis/1f364.png | Bin 0 -> 630 bytes emojis/1f365.png | Bin 0 -> 642 bytes emojis/1f366.png | Bin 0 -> 563 bytes emojis/1f367.png | Bin 0 -> 673 bytes emojis/1f368.png | Bin 0 -> 676 bytes emojis/1f369.png | Bin 0 -> 721 bytes emojis/1f36a.png | Bin 0 -> 604 bytes emojis/1f36b.png | Bin 0 -> 710 bytes emojis/1f36c.png | Bin 0 -> 692 bytes emojis/1f36d.png | Bin 0 -> 800 bytes emojis/1f36e.png | Bin 0 -> 652 bytes emojis/1f36f.png | Bin 0 -> 720 bytes emojis/1f370.png | Bin 0 -> 782 bytes emojis/1f371.png | Bin 0 -> 682 bytes emojis/1f372.png | Bin 0 -> 670 bytes emojis/1f373.png | Bin 0 -> 682 bytes emojis/1f374.png | Bin 0 -> 412 bytes emojis/1f375.png | Bin 0 -> 823 bytes emojis/1f376.png | Bin 0 -> 620 bytes emojis/1f377.png | Bin 0 -> 558 bytes emojis/1f378.png | Bin 0 -> 645 bytes emojis/1f379.png | Bin 0 -> 724 bytes emojis/1f37a.png | Bin 0 -> 492 bytes emojis/1f37b.png | Bin 0 -> 589 bytes emojis/1f37c.png | Bin 0 -> 747 bytes emojis/1f37d.png | Bin 0 -> 583 bytes emojis/1f37e.png | Bin 0 -> 745 bytes emojis/1f37f.png | Bin 0 -> 655 bytes emojis/1f380.png | Bin 0 -> 618 bytes emojis/1f381.png | Bin 0 -> 513 bytes emojis/1f382.png | Bin 0 -> 790 bytes emojis/1f383.png | Bin 0 -> 675 bytes emojis/1f384.png | Bin 0 -> 684 bytes emojis/1f385.png | Bin 0 -> 722 bytes emojis/1f386.png | Bin 0 -> 788 bytes emojis/1f387.png | Bin 0 -> 800 bytes emojis/1f388.png | Bin 0 -> 455 bytes emojis/1f389.png | Bin 0 -> 965 bytes emojis/1f38a.png | Bin 0 -> 857 bytes emojis/1f38b.png | Bin 0 -> 909 bytes emojis/1f38c.png | Bin 0 -> 658 bytes emojis/1f38d.png | Bin 0 -> 646 bytes emojis/1f38e.png | Bin 0 -> 844 bytes emojis/1f38f.png | Bin 0 -> 767 bytes emojis/1f390.png | Bin 0 -> 521 bytes emojis/1f391.png | Bin 0 -> 756 bytes emojis/1f392.png | Bin 0 -> 630 bytes emojis/1f393.png | Bin 0 -> 719 bytes emojis/1f396.png | Bin 0 -> 484 bytes emojis/1f397.png | Bin 0 -> 706 bytes emojis/1f399.png | Bin 0 -> 733 bytes emojis/1f39a.png | Bin 0 -> 494 bytes emojis/1f39b.png | Bin 0 -> 813 bytes emojis/1f39e.png | Bin 0 -> 505 bytes emojis/1f39f.png | Bin 0 -> 755 bytes emojis/1f3a0.png | Bin 0 -> 574 bytes emojis/1f3a1.png | Bin 0 -> 733 bytes emojis/1f3a2.png | Bin 0 -> 496 bytes emojis/1f3a3.png | Bin 0 -> 814 bytes emojis/1f3a4.png | Bin 0 -> 618 bytes emojis/1f3a5.png | Bin 0 -> 635 bytes emojis/1f3a6.png | Bin 0 -> 494 bytes emojis/1f3a7.png | Bin 0 -> 626 bytes emojis/1f3a8.png | Bin 0 -> 572 bytes emojis/1f3a9.png | Bin 0 -> 574 bytes emojis/1f3aa.png | Bin 0 -> 691 bytes emojis/1f3ab.png | Bin 0 -> 661 bytes emojis/1f3ac.png | Bin 0 -> 661 bytes emojis/1f3ad.png | Bin 0 -> 693 bytes emojis/1f3ae.png | Bin 0 -> 577 bytes emojis/1f3af.png | Bin 0 -> 866 bytes emojis/1f3b0.png | Bin 0 -> 608 bytes emojis/1f3b1.png | Bin 0 -> 570 bytes emojis/1f3b2.png | Bin 0 -> 783 bytes emojis/1f3b3.png | Bin 0 -> 716 bytes emojis/1f3b4.png | Bin 0 -> 662 bytes emojis/1f3b5.png | Bin 0 -> 336 bytes emojis/1f3b6.png | Bin 0 -> 425 bytes emojis/1f3b7.png | Bin 0 -> 558 bytes emojis/1f3b8.png | Bin 0 -> 542 bytes emojis/1f3b9.png | Bin 0 -> 297 bytes emojis/1f3ba.png | Bin 0 -> 636 bytes emojis/1f3bb.png | Bin 0 -> 597 bytes emojis/1f3bc.png | Bin 0 -> 606 bytes emojis/1f3bd.png | Bin 0 -> 745 bytes emojis/1f3be.png | Bin 0 -> 602 bytes emojis/1f3bf.png | Bin 0 -> 701 bytes emojis/1f3c0.png | Bin 0 -> 652 bytes emojis/1f3c1.png | Bin 0 -> 637 bytes emojis/1f3c2.png | Bin 0 -> 793 bytes emojis/1f3c3.png | Bin 0 -> 686 bytes emojis/1f3c4.png | Bin 0 -> 802 bytes emojis/1f3c5.png | Bin 0 -> 631 bytes emojis/1f3c6.png | Bin 0 -> 537 bytes emojis/1f3c7.png | Bin 0 -> 880 bytes emojis/1f3c8.png | Bin 0 -> 717 bytes emojis/1f3c9.png | Bin 0 -> 706 bytes emojis/1f3ca.png | Bin 0 -> 534 bytes emojis/1f3cb.png | Bin 0 -> 653 bytes emojis/1f3cc.png | Bin 0 -> 691 bytes emojis/1f3cd.png | Bin 0 -> 701 bytes emojis/1f3ce.png | Bin 0 -> 573 bytes emojis/1f3cf.png | Bin 0 -> 613 bytes emojis/1f3d0.png | Bin 0 -> 888 bytes emojis/1f3d1.png | Bin 0 -> 557 bytes emojis/1f3d2.png | Bin 0 -> 481 bytes emojis/1f3d3.png | Bin 0 -> 601 bytes emojis/1f3d4.png | Bin 0 -> 509 bytes emojis/1f3d5.png | Bin 0 -> 651 bytes emojis/1f3d6.png | Bin 0 -> 612 bytes emojis/1f3d7.png | Bin 0 -> 726 bytes emojis/1f3d8.png | Bin 0 -> 784 bytes emojis/1f3d9.png | Bin 0 -> 554 bytes emojis/1f3da.png | Bin 0 -> 626 bytes emojis/1f3db.png | Bin 0 -> 506 bytes emojis/1f3dc.png | Bin 0 -> 643 bytes emojis/1f3dd.png | Bin 0 -> 676 bytes emojis/1f3de.png | Bin 0 -> 667 bytes emojis/1f3df.png | Bin 0 -> 754 bytes emojis/1f3e0.png | Bin 0 -> 605 bytes emojis/1f3e1.png | Bin 0 -> 751 bytes emojis/1f3e2.png | Bin 0 -> 525 bytes emojis/1f3e3.png | Bin 0 -> 665 bytes emojis/1f3e4.png | Bin 0 -> 493 bytes emojis/1f3e5.png | Bin 0 -> 575 bytes emojis/1f3e6.png | Bin 0 -> 611 bytes emojis/1f3e7.png | Bin 0 -> 476 bytes emojis/1f3e8.png | Bin 0 -> 719 bytes emojis/1f3e9.png | Bin 0 -> 769 bytes emojis/1f3ea.png | Bin 0 -> 715 bytes emojis/1f3eb.png | Bin 0 -> 813 bytes emojis/1f3ec.png | Bin 0 -> 544 bytes emojis/1f3ed.png | Bin 0 -> 746 bytes emojis/1f3ee.png | Bin 0 -> 459 bytes emojis/1f3ef.png | Bin 0 -> 553 bytes emojis/1f3f0.png | Bin 0 -> 551 bytes emojis/1f3f3.png | Bin 0 -> 370 bytes emojis/1f3f4.png | Bin 0 -> 354 bytes emojis/1f3f5.png | Bin 0 -> 667 bytes emojis/1f3f7.png | Bin 0 -> 469 bytes emojis/1f3f8.png | Bin 0 -> 718 bytes emojis/1f3f9.png | Bin 0 -> 745 bytes emojis/1f3fa.png | Bin 0 -> 642 bytes emojis/1f3fb.png | Bin 0 -> 197 bytes emojis/1f3fc.png | Bin 0 -> 197 bytes emojis/1f3fd.png | Bin 0 -> 189 bytes emojis/1f3fe.png | Bin 0 -> 195 bytes emojis/1f3ff.png | Bin 0 -> 192 bytes emojis/1f400.png | Bin 0 -> 454 bytes emojis/1f401.png | Bin 0 -> 395 bytes emojis/1f402.png | Bin 0 -> 361 bytes emojis/1f403.png | Bin 0 -> 442 bytes emojis/1f404.png | Bin 0 -> 662 bytes emojis/1f405.png | Bin 0 -> 515 bytes emojis/1f406.png | Bin 0 -> 513 bytes emojis/1f407.png | Bin 0 -> 511 bytes emojis/1f408.png | Bin 0 -> 474 bytes emojis/1f409.png | Bin 0 -> 796 bytes emojis/1f40a.png | Bin 0 -> 461 bytes emojis/1f40b.png | Bin 0 -> 540 bytes emojis/1f40c.png | Bin 0 -> 638 bytes emojis/1f40d.png | Bin 0 -> 575 bytes emojis/1f40e.png | Bin 0 -> 701 bytes emojis/1f40f.png | Bin 0 -> 589 bytes emojis/1f410.png | Bin 0 -> 513 bytes emojis/1f411.png | Bin 0 -> 496 bytes emojis/1f412.png | Bin 0 -> 628 bytes emojis/1f413.png | Bin 0 -> 562 bytes emojis/1f414.png | Bin 0 -> 508 bytes emojis/1f415.png | Bin 0 -> 597 bytes emojis/1f416.png | Bin 0 -> 372 bytes emojis/1f417.png | Bin 0 -> 724 bytes emojis/1f418.png | Bin 0 -> 441 bytes emojis/1f419.png | Bin 0 -> 561 bytes emojis/1f41a.png | Bin 0 -> 629 bytes emojis/1f41b.png | Bin 0 -> 700 bytes emojis/1f41c.png | Bin 0 -> 528 bytes emojis/1f41d.png | Bin 0 -> 652 bytes emojis/1f41e.png | Bin 0 -> 697 bytes emojis/1f41f.png | Bin 0 -> 610 bytes emojis/1f420.png | Bin 0 -> 647 bytes emojis/1f421.png | Bin 0 -> 603 bytes emojis/1f422.png | Bin 0 -> 548 bytes emojis/1f423.png | Bin 0 -> 628 bytes emojis/1f424.png | Bin 0 -> 574 bytes emojis/1f425.png | Bin 0 -> 486 bytes emojis/1f426.png | Bin 0 -> 592 bytes emojis/1f427.png | Bin 0 -> 646 bytes emojis/1f428.png | Bin 0 -> 526 bytes emojis/1f429.png | Bin 0 -> 699 bytes emojis/1f42a.png | Bin 0 -> 455 bytes emojis/1f42b.png | Bin 0 -> 478 bytes emojis/1f42c.png | Bin 0 -> 446 bytes emojis/1f42d.png | Bin 0 -> 678 bytes emojis/1f42e.png | Bin 0 -> 646 bytes emojis/1f42f.png | Bin 0 -> 889 bytes emojis/1f430.png | Bin 0 -> 632 bytes emojis/1f431.png | Bin 0 -> 809 bytes emojis/1f432.png | Bin 0 -> 682 bytes emojis/1f433.png | Bin 0 -> 621 bytes emojis/1f434.png | Bin 0 -> 583 bytes emojis/1f435.png | Bin 0 -> 662 bytes emojis/1f436.png | Bin 0 -> 699 bytes emojis/1f437.png | Bin 0 -> 632 bytes emojis/1f438.png | Bin 0 -> 649 bytes emojis/1f439.png | Bin 0 -> 800 bytes emojis/1f43a.png | Bin 0 -> 705 bytes emojis/1f43b.png | Bin 0 -> 658 bytes emojis/1f43c.png | Bin 0 -> 801 bytes emojis/1f43d.png | Bin 0 -> 515 bytes emojis/1f43e.png | Bin 0 -> 529 bytes emojis/1f43f.png | Bin 0 -> 736 bytes emojis/1f440.png | Bin 0 -> 424 bytes emojis/1f441.png | Bin 0 -> 602 bytes emojis/1f442.png | Bin 0 -> 589 bytes emojis/1f443.png | Bin 0 -> 483 bytes emojis/1f444.png | Bin 0 -> 523 bytes emojis/1f445.png | Bin 0 -> 423 bytes emojis/1f446.png | Bin 0 -> 343 bytes emojis/1f447.png | Bin 0 -> 357 bytes emojis/1f448.png | Bin 0 -> 445 bytes emojis/1f449.png | Bin 0 -> 416 bytes emojis/1f44a.png | Bin 0 -> 496 bytes emojis/1f44b.png | Bin 0 -> 775 bytes emojis/1f44c.png | Bin 0 -> 546 bytes emojis/1f44d.png | Bin 0 -> 523 bytes emojis/1f44e.png | Bin 0 -> 535 bytes emojis/1f44f.png | Bin 0 -> 742 bytes emojis/1f450.png | Bin 0 -> 549 bytes emojis/1f451.png | Bin 0 -> 554 bytes emojis/1f452.png | Bin 0 -> 469 bytes emojis/1f453.png | Bin 0 -> 580 bytes emojis/1f454.png | Bin 0 -> 537 bytes emojis/1f455.png | Bin 0 -> 444 bytes emojis/1f456.png | Bin 0 -> 477 bytes emojis/1f457.png | Bin 0 -> 506 bytes emojis/1f458.png | Bin 0 -> 550 bytes emojis/1f459.png | Bin 0 -> 577 bytes emojis/1f45a.png | Bin 0 -> 488 bytes emojis/1f45b.png | Bin 0 -> 520 bytes emojis/1f45c.png | Bin 0 -> 459 bytes emojis/1f45d.png | Bin 0 -> 359 bytes emojis/1f45e.png | Bin 0 -> 354 bytes emojis/1f45f.png | Bin 0 -> 298 bytes emojis/1f460.png | Bin 0 -> 522 bytes emojis/1f461.png | Bin 0 -> 435 bytes emojis/1f462.png | Bin 0 -> 463 bytes emojis/1f463.png | Bin 0 -> 514 bytes emojis/1f464.png | Bin 0 -> 412 bytes emojis/1f465.png | Bin 0 -> 514 bytes emojis/1f466.png | Bin 0 -> 594 bytes emojis/1f467.png | Bin 0 -> 623 bytes ...1f468-200d-1f468-200d-1f466-200d-1f466.png | Bin 0 -> 846 bytes emojis/1f468-200d-1f468-200d-1f466.png | Bin 0 -> 752 bytes ...1f468-200d-1f468-200d-1f467-200d-1f466.png | Bin 0 -> 852 bytes ...1f468-200d-1f468-200d-1f467-200d-1f467.png | Bin 0 -> 846 bytes emojis/1f468-200d-1f468-200d-1f467.png | Bin 0 -> 761 bytes ...1f468-200d-1f469-200d-1f466-200d-1f466.png | Bin 0 -> 838 bytes ...1f468-200d-1f469-200d-1f467-200d-1f466.png | Bin 0 -> 836 bytes ...1f468-200d-1f469-200d-1f467-200d-1f467.png | Bin 0 -> 832 bytes emojis/1f468-200d-1f469-200d-1f467.png | Bin 0 -> 767 bytes emojis/1f468-200d-2764-fe0f-200d-1f468.png | Bin 0 -> 727 bytes ...8-200d-2764-fe0f-200d-1f48b-200d-1f468.png | Bin 0 -> 629 bytes emojis/1f468.png | Bin 0 -> 588 bytes ...1f469-200d-1f469-200d-1f466-200d-1f466.png | Bin 0 -> 776 bytes emojis/1f469-200d-1f469-200d-1f466.png | Bin 0 -> 717 bytes ...1f469-200d-1f469-200d-1f467-200d-1f466.png | Bin 0 -> 781 bytes ...1f469-200d-1f469-200d-1f467-200d-1f467.png | Bin 0 -> 767 bytes emojis/1f469-200d-1f469-200d-1f467.png | Bin 0 -> 724 bytes emojis/1f469-200d-2764-fe0f-200d-1f469.png | Bin 0 -> 685 bytes ...9-200d-2764-fe0f-200d-1f48b-200d-1f469.png | Bin 0 -> 692 bytes emojis/1f469.png | Bin 0 -> 574 bytes emojis/1f46a.png | Bin 0 -> 746 bytes emojis/1f46b.png | Bin 0 -> 855 bytes emojis/1f46c.png | Bin 0 -> 816 bytes emojis/1f46d.png | Bin 0 -> 865 bytes emojis/1f46e.png | Bin 0 -> 737 bytes emojis/1f46f.png | Bin 0 -> 969 bytes emojis/1f470.png | Bin 0 -> 694 bytes emojis/1f471.png | Bin 0 -> 612 bytes emojis/1f472.png | Bin 0 -> 775 bytes emojis/1f473.png | Bin 0 -> 700 bytes emojis/1f474.png | Bin 0 -> 614 bytes emojis/1f475.png | Bin 0 -> 707 bytes emojis/1f476.png | Bin 0 -> 615 bytes emojis/1f477.png | Bin 0 -> 715 bytes emojis/1f478.png | Bin 0 -> 616 bytes emojis/1f479.png | Bin 0 -> 749 bytes emojis/1f47a.png | Bin 0 -> 802 bytes emojis/1f47b.png | Bin 0 -> 637 bytes emojis/1f47c.png | Bin 0 -> 778 bytes emojis/1f47d.png | Bin 0 -> 610 bytes emojis/1f47e.png | Bin 0 -> 619 bytes emojis/1f47f.png | Bin 0 -> 533 bytes emojis/1f480.png | Bin 0 -> 615 bytes emojis/1f481.png | Bin 0 -> 605 bytes emojis/1f482.png | Bin 0 -> 491 bytes emojis/1f483.png | Bin 0 -> 599 bytes emojis/1f484.png | Bin 0 -> 412 bytes emojis/1f485.png | Bin 0 -> 548 bytes emojis/1f486.png | Bin 0 -> 674 bytes emojis/1f487.png | Bin 0 -> 751 bytes emojis/1f488.png | Bin 0 -> 596 bytes emojis/1f489.png | Bin 0 -> 686 bytes emojis/1f48a.png | Bin 0 -> 492 bytes emojis/1f48b.png | Bin 0 -> 439 bytes emojis/1f48c.png | Bin 0 -> 494 bytes emojis/1f48d.png | Bin 0 -> 547 bytes emojis/1f48e.png | Bin 0 -> 653 bytes emojis/1f48f.png | Bin 0 -> 652 bytes emojis/1f490.png | Bin 0 -> 768 bytes emojis/1f491.png | Bin 0 -> 675 bytes emojis/1f492.png | Bin 0 -> 737 bytes emojis/1f493.png | Bin 0 -> 471 bytes emojis/1f494.png | Bin 0 -> 471 bytes emojis/1f495.png | Bin 0 -> 416 bytes emojis/1f496.png | Bin 0 -> 547 bytes emojis/1f497.png | Bin 0 -> 661 bytes emojis/1f498.png | Bin 0 -> 658 bytes emojis/1f499.png | Bin 0 -> 363 bytes emojis/1f49a.png | Bin 0 -> 364 bytes emojis/1f49b.png | Bin 0 -> 347 bytes emojis/1f49c.png | Bin 0 -> 479 bytes emojis/1f49d.png | Bin 0 -> 513 bytes emojis/1f49e.png | Bin 0 -> 586 bytes emojis/1f49f.png | Bin 0 -> 456 bytes emojis/1f4a0.png | Bin 0 -> 715 bytes emojis/1f4a1.png | Bin 0 -> 506 bytes emojis/1f4a2.png | Bin 0 -> 577 bytes emojis/1f4a3.png | Bin 0 -> 453 bytes emojis/1f4a4.png | Bin 0 -> 418 bytes emojis/1f4a5.png | Bin 0 -> 680 bytes emojis/1f4a6.png | Bin 0 -> 456 bytes emojis/1f4a7.png | Bin 0 -> 404 bytes emojis/1f4a8.png | Bin 0 -> 432 bytes emojis/1f4a9.png | Bin 0 -> 634 bytes emojis/1f4aa.png | Bin 0 -> 469 bytes emojis/1f4ab.png | Bin 0 -> 623 bytes emojis/1f4ac.png | Bin 0 -> 453 bytes emojis/1f4ad.png | Bin 0 -> 370 bytes emojis/1f4ae.png | Bin 0 -> 794 bytes emojis/1f4af.png | Bin 0 -> 583 bytes emojis/1f4b0.png | Bin 0 -> 574 bytes emojis/1f4b1.png | Bin 0 -> 717 bytes emojis/1f4b2.png | Bin 0 -> 551 bytes emojis/1f4b3.png | Bin 0 -> 378 bytes emojis/1f4b4.png | Bin 0 -> 304 bytes emojis/1f4b5.png | Bin 0 -> 312 bytes emojis/1f4b6.png | Bin 0 -> 298 bytes emojis/1f4b7.png | Bin 0 -> 315 bytes emojis/1f4b8.png | Bin 0 -> 820 bytes emojis/1f4b9.png | Bin 0 -> 632 bytes emojis/1f4ba.png | Bin 0 -> 487 bytes emojis/1f4bb.png | Bin 0 -> 359 bytes emojis/1f4bc.png | Bin 0 -> 373 bytes emojis/1f4bd.png | Bin 0 -> 654 bytes emojis/1f4be.png | Bin 0 -> 385 bytes emojis/1f4bf.png | Bin 0 -> 591 bytes emojis/1f4c0.png | Bin 0 -> 496 bytes emojis/1f4c1.png | Bin 0 -> 356 bytes emojis/1f4c2.png | Bin 0 -> 346 bytes emojis/1f4c3.png | Bin 0 -> 386 bytes emojis/1f4c4.png | Bin 0 -> 456 bytes emojis/1f4c5.png | Bin 0 -> 670 bytes emojis/1f4c6.png | Bin 0 -> 689 bytes emojis/1f4c7.png | Bin 0 -> 536 bytes emojis/1f4c8.png | Bin 0 -> 662 bytes emojis/1f4c9.png | Bin 0 -> 659 bytes emojis/1f4ca.png | Bin 0 -> 542 bytes emojis/1f4cb.png | Bin 0 -> 482 bytes emojis/1f4cc.png | Bin 0 -> 621 bytes emojis/1f4cd.png | Bin 0 -> 420 bytes emojis/1f4ce.png | Bin 0 -> 508 bytes emojis/1f4cf.png | Bin 0 -> 697 bytes emojis/1f4d0.png | Bin 0 -> 267 bytes emojis/1f4d1.png | Bin 0 -> 513 bytes emojis/1f4d2.png | Bin 0 -> 530 bytes emojis/1f4d3.png | Bin 0 -> 768 bytes emojis/1f4d4.png | Bin 0 -> 417 bytes emojis/1f4d5.png | Bin 0 -> 363 bytes emojis/1f4d6.png | Bin 0 -> 422 bytes emojis/1f4d7.png | Bin 0 -> 361 bytes emojis/1f4d8.png | Bin 0 -> 354 bytes emojis/1f4d9.png | Bin 0 -> 347 bytes emojis/1f4da.png | Bin 0 -> 530 bytes emojis/1f4db.png | Bin 0 -> 469 bytes emojis/1f4dc.png | Bin 0 -> 436 bytes emojis/1f4dd.png | Bin 0 -> 623 bytes emojis/1f4de.png | Bin 0 -> 505 bytes emojis/1f4df.png | Bin 0 -> 423 bytes emojis/1f4e0.png | Bin 0 -> 613 bytes emojis/1f4e1.png | Bin 0 -> 817 bytes emojis/1f4e2.png | Bin 0 -> 650 bytes emojis/1f4e3.png | Bin 0 -> 474 bytes emojis/1f4e4.png | Bin 0 -> 513 bytes emojis/1f4e5.png | Bin 0 -> 517 bytes emojis/1f4e6.png | Bin 0 -> 745 bytes emojis/1f4e7.png | Bin 0 -> 516 bytes emojis/1f4e8.png | Bin 0 -> 520 bytes emojis/1f4e9.png | Bin 0 -> 601 bytes emojis/1f4ea.png | Bin 0 -> 443 bytes emojis/1f4eb.png | Bin 0 -> 443 bytes emojis/1f4ec.png | Bin 0 -> 560 bytes emojis/1f4ed.png | Bin 0 -> 438 bytes emojis/1f4ee.png | Bin 0 -> 481 bytes emojis/1f4ef.png | Bin 0 -> 598 bytes emojis/1f4f0.png | Bin 0 -> 456 bytes emojis/1f4f1.png | Bin 0 -> 234 bytes emojis/1f4f2.png | Bin 0 -> 383 bytes emojis/1f4f3.png | Bin 0 -> 477 bytes emojis/1f4f4.png | Bin 0 -> 537 bytes emojis/1f4f5.png | Bin 0 -> 752 bytes emojis/1f4f6.png | Bin 0 -> 349 bytes emojis/1f4f7.png | Bin 0 -> 616 bytes emojis/1f4f8.png | Bin 0 -> 686 bytes emojis/1f4f9.png | Bin 0 -> 405 bytes emojis/1f4fa.png | Bin 0 -> 494 bytes emojis/1f4fb.png | Bin 0 -> 694 bytes emojis/1f4fc.png | Bin 0 -> 440 bytes emojis/1f4fd.png | Bin 0 -> 584 bytes emojis/1f4ff.png | Bin 0 -> 636 bytes emojis/1f500.png | Bin 0 -> 558 bytes emojis/1f501.png | Bin 0 -> 543 bytes emojis/1f502.png | Bin 0 -> 564 bytes emojis/1f503.png | Bin 0 -> 558 bytes emojis/1f504.png | Bin 0 -> 679 bytes emojis/1f505.png | Bin 0 -> 656 bytes emojis/1f506.png | Bin 0 -> 731 bytes emojis/1f507.png | Bin 0 -> 803 bytes emojis/1f508.png | Bin 0 -> 360 bytes emojis/1f509.png | Bin 0 -> 444 bytes emojis/1f50a.png | Bin 0 -> 570 bytes emojis/1f50b.png | Bin 0 -> 488 bytes emojis/1f50c.png | Bin 0 -> 602 bytes emojis/1f50d.png | Bin 0 -> 614 bytes emojis/1f50e.png | Bin 0 -> 540 bytes emojis/1f50f.png | Bin 0 -> 665 bytes emojis/1f510.png | Bin 0 -> 477 bytes emojis/1f511.png | Bin 0 -> 384 bytes emojis/1f512.png | Bin 0 -> 452 bytes emojis/1f513.png | Bin 0 -> 432 bytes emojis/1f514.png | Bin 0 -> 417 bytes emojis/1f515.png | Bin 0 -> 803 bytes emojis/1f516.png | Bin 0 -> 453 bytes emojis/1f517.png | Bin 0 -> 503 bytes emojis/1f518.png | Bin 0 -> 621 bytes emojis/1f519.png | Bin 0 -> 436 bytes emojis/1f51a.png | Bin 0 -> 450 bytes emojis/1f51b.png | Bin 0 -> 546 bytes emojis/1f51c.png | Bin 0 -> 436 bytes emojis/1f51d.png | Bin 0 -> 516 bytes emojis/1f51e.png | Bin 0 -> 857 bytes emojis/1f51f.png | Bin 0 -> 570 bytes emojis/1f520.png | Bin 0 -> 692 bytes emojis/1f521.png | Bin 0 -> 612 bytes emojis/1f522.png | Bin 0 -> 602 bytes emojis/1f523.png | Bin 0 -> 673 bytes emojis/1f524.png | Bin 0 -> 482 bytes emojis/1f525.png | Bin 0 -> 594 bytes emojis/1f526.png | Bin 0 -> 603 bytes emojis/1f527.png | Bin 0 -> 521 bytes emojis/1f528.png | Bin 0 -> 563 bytes emojis/1f529.png | Bin 0 -> 740 bytes emojis/1f52a.png | Bin 0 -> 468 bytes emojis/1f52b.png | Bin 0 -> 553 bytes emojis/1f52c.png | Bin 0 -> 680 bytes emojis/1f52d.png | Bin 0 -> 762 bytes emojis/1f52e.png | Bin 0 -> 499 bytes emojis/1f52f.png | Bin 0 -> 708 bytes emojis/1f530.png | Bin 0 -> 561 bytes emojis/1f531.png | Bin 0 -> 448 bytes emojis/1f532.png | Bin 0 -> 251 bytes emojis/1f533.png | Bin 0 -> 242 bytes emojis/1f534.png | Bin 0 -> 456 bytes emojis/1f535.png | Bin 0 -> 474 bytes emojis/1f536.png | Bin 0 -> 498 bytes emojis/1f537.png | Bin 0 -> 504 bytes emojis/1f538.png | Bin 0 -> 377 bytes emojis/1f539.png | Bin 0 -> 377 bytes emojis/1f53a.png | Bin 0 -> 327 bytes emojis/1f53b.png | Bin 0 -> 342 bytes emojis/1f53c.png | Bin 0 -> 319 bytes emojis/1f53d.png | Bin 0 -> 329 bytes emojis/1f549.png | Bin 0 -> 634 bytes emojis/1f54a.png | Bin 0 -> 745 bytes emojis/1f54b.png | Bin 0 -> 306 bytes emojis/1f54c.png | Bin 0 -> 562 bytes emojis/1f54d.png | Bin 0 -> 672 bytes emojis/1f54e.png | Bin 0 -> 750 bytes emojis/1f550.png | Bin 0 -> 715 bytes emojis/1f551.png | Bin 0 -> 722 bytes emojis/1f552.png | Bin 0 -> 691 bytes emojis/1f553.png | Bin 0 -> 728 bytes emojis/1f554.png | Bin 0 -> 729 bytes emojis/1f555.png | Bin 0 -> 674 bytes emojis/1f556.png | Bin 0 -> 716 bytes emojis/1f557.png | Bin 0 -> 731 bytes emojis/1f558.png | Bin 0 -> 692 bytes emojis/1f559.png | Bin 0 -> 727 bytes emojis/1f55a.png | Bin 0 -> 604 bytes emojis/1f55b.png | Bin 0 -> 569 bytes emojis/1f55c.png | Bin 0 -> 586 bytes emojis/1f55d.png | Bin 0 -> 609 bytes emojis/1f55e.png | Bin 0 -> 579 bytes emojis/1f55f.png | Bin 0 -> 617 bytes emojis/1f560.png | Bin 0 -> 699 bytes emojis/1f561.png | Bin 0 -> 655 bytes emojis/1f562.png | Bin 0 -> 699 bytes emojis/1f563.png | Bin 0 -> 708 bytes emojis/1f564.png | Bin 0 -> 672 bytes emojis/1f565.png | Bin 0 -> 706 bytes emojis/1f566.png | Bin 0 -> 698 bytes emojis/1f567.png | Bin 0 -> 657 bytes emojis/1f56f.png | Bin 0 -> 497 bytes emojis/1f570.png | Bin 0 -> 538 bytes emojis/1f573.png | Bin 0 -> 405 bytes emojis/1f574.png | Bin 0 -> 487 bytes emojis/1f575.png | Bin 0 -> 710 bytes emojis/1f576.png | Bin 0 -> 327 bytes emojis/1f577.png | Bin 0 -> 553 bytes emojis/1f578.png | Bin 0 -> 568 bytes emojis/1f579.png | Bin 0 -> 478 bytes emojis/1f587.png | Bin 0 -> 599 bytes emojis/1f58a.png | Bin 0 -> 624 bytes emojis/1f58b.png | Bin 0 -> 621 bytes emojis/1f58c.png | Bin 0 -> 499 bytes emojis/1f58d.png | Bin 0 -> 700 bytes emojis/1f590.png | Bin 0 -> 493 bytes emojis/1f595.png | Bin 0 -> 442 bytes emojis/1f596.png | Bin 0 -> 575 bytes emojis/1f5a5.png | Bin 0 -> 428 bytes emojis/1f5a8.png | Bin 0 -> 554 bytes emojis/1f5b1.png | Bin 0 -> 533 bytes emojis/1f5b2.png | Bin 0 -> 727 bytes emojis/1f5bc.png | Bin 0 -> 544 bytes emojis/1f5c2.png | Bin 0 -> 377 bytes emojis/1f5c3.png | Bin 0 -> 617 bytes emojis/1f5c4.png | Bin 0 -> 433 bytes emojis/1f5d1.png | Bin 0 -> 638 bytes emojis/1f5d2.png | Bin 0 -> 543 bytes emojis/1f5d3.png | Bin 0 -> 685 bytes emojis/1f5dc.png | Bin 0 -> 549 bytes emojis/1f5dd.png | Bin 0 -> 608 bytes emojis/1f5de.png | Bin 0 -> 772 bytes emojis/1f5e1.png | Bin 0 -> 636 bytes emojis/1f5e3.png | Bin 0 -> 464 bytes emojis/1f5e8.png | Bin 0 -> 350 bytes emojis/1f5ef.png | Bin 0 -> 778 bytes emojis/1f5f3.png | Bin 0 -> 544 bytes emojis/1f5fa.png | Bin 0 -> 734 bytes emojis/1f5fb.png | Bin 0 -> 378 bytes emojis/1f5fc.png | Bin 0 -> 458 bytes emojis/1f5fd.png | Bin 0 -> 800 bytes emojis/1f5fe.png | Bin 0 -> 452 bytes emojis/1f5ff.png | Bin 0 -> 689 bytes emojis/1f600.png | Bin 0 -> 587 bytes emojis/1f601.png | Bin 0 -> 601 bytes emojis/1f602.png | Bin 0 -> 728 bytes emojis/1f603.png | Bin 0 -> 650 bytes emojis/1f604.png | Bin 0 -> 608 bytes emojis/1f605.png | Bin 0 -> 700 bytes emojis/1f606.png | Bin 0 -> 680 bytes emojis/1f607.png | Bin 0 -> 677 bytes emojis/1f608.png | Bin 0 -> 559 bytes emojis/1f609.png | Bin 0 -> 616 bytes emojis/1f60a.png | Bin 0 -> 574 bytes emojis/1f60b.png | Bin 0 -> 642 bytes emojis/1f60c.png | Bin 0 -> 605 bytes emojis/1f60d.png | Bin 0 -> 618 bytes emojis/1f60e.png | Bin 0 -> 641 bytes emojis/1f60f.png | Bin 0 -> 576 bytes emojis/1f610.png | Bin 0 -> 625 bytes emojis/1f611.png | Bin 0 -> 607 bytes emojis/1f612.png | Bin 0 -> 599 bytes emojis/1f613.png | Bin 0 -> 590 bytes emojis/1f614.png | Bin 0 -> 554 bytes emojis/1f615.png | Bin 0 -> 643 bytes emojis/1f616.png | Bin 0 -> 680 bytes emojis/1f617.png | Bin 0 -> 493 bytes emojis/1f618.png | Bin 0 -> 701 bytes emojis/1f619.png | Bin 0 -> 492 bytes emojis/1f61a.png | Bin 0 -> 631 bytes emojis/1f61b.png | Bin 0 -> 585 bytes emojis/1f61c.png | Bin 0 -> 641 bytes emojis/1f61d.png | Bin 0 -> 628 bytes emojis/1f61e.png | Bin 0 -> 642 bytes emojis/1f61f.png | Bin 0 -> 606 bytes emojis/1f620.png | Bin 0 -> 534 bytes emojis/1f621.png | Bin 0 -> 630 bytes emojis/1f622.png | Bin 0 -> 658 bytes emojis/1f623.png | Bin 0 -> 711 bytes emojis/1f624.png | Bin 0 -> 727 bytes emojis/1f625.png | Bin 0 -> 701 bytes emojis/1f626.png | Bin 0 -> 654 bytes emojis/1f627.png | Bin 0 -> 634 bytes emojis/1f628.png | Bin 0 -> 786 bytes emojis/1f629.png | Bin 0 -> 708 bytes emojis/1f62a.png | Bin 0 -> 700 bytes emojis/1f62b.png | Bin 0 -> 749 bytes emojis/1f62c.png | Bin 0 -> 586 bytes emojis/1f62d.png | Bin 0 -> 643 bytes emojis/1f62e.png | Bin 0 -> 630 bytes emojis/1f62f.png | Bin 0 -> 589 bytes emojis/1f630.png | Bin 0 -> 830 bytes emojis/1f631.png | Bin 0 -> 747 bytes emojis/1f632.png | Bin 0 -> 650 bytes emojis/1f633.png | Bin 0 -> 729 bytes emojis/1f634.png | Bin 0 -> 672 bytes emojis/1f635.png | Bin 0 -> 633 bytes emojis/1f636.png | Bin 0 -> 567 bytes emojis/1f637.png | Bin 0 -> 596 bytes emojis/1f638.png | Bin 0 -> 715 bytes emojis/1f639.png | Bin 0 -> 749 bytes emojis/1f63a.png | Bin 0 -> 657 bytes emojis/1f63b.png | Bin 0 -> 766 bytes emojis/1f63c.png | Bin 0 -> 671 bytes emojis/1f63d.png | Bin 0 -> 635 bytes emojis/1f63e.png | Bin 0 -> 687 bytes emojis/1f63f.png | Bin 0 -> 712 bytes emojis/1f640.png | Bin 0 -> 704 bytes emojis/1f641.png | Bin 0 -> 649 bytes emojis/1f642.png | Bin 0 -> 654 bytes emojis/1f643.png | Bin 0 -> 681 bytes emojis/1f644.png | Bin 0 -> 589 bytes emojis/1f645.png | Bin 0 -> 774 bytes emojis/1f646.png | Bin 0 -> 722 bytes emojis/1f647.png | Bin 0 -> 694 bytes emojis/1f648.png | Bin 0 -> 728 bytes emojis/1f649.png | Bin 0 -> 711 bytes emojis/1f64a.png | Bin 0 -> 675 bytes emojis/1f64b.png | Bin 0 -> 622 bytes emojis/1f64c.png | Bin 0 -> 574 bytes emojis/1f64d.png | Bin 0 -> 548 bytes emojis/1f64e.png | Bin 0 -> 555 bytes emojis/1f64f.png | Bin 0 -> 576 bytes emojis/1f680.png | Bin 0 -> 724 bytes emojis/1f681.png | Bin 0 -> 692 bytes emojis/1f682.png | Bin 0 -> 725 bytes emojis/1f683.png | Bin 0 -> 640 bytes emojis/1f684.png | Bin 0 -> 541 bytes emojis/1f685.png | Bin 0 -> 386 bytes emojis/1f686.png | Bin 0 -> 728 bytes emojis/1f687.png | Bin 0 -> 656 bytes emojis/1f688.png | Bin 0 -> 496 bytes emojis/1f689.png | Bin 0 -> 845 bytes emojis/1f68a.png | Bin 0 -> 706 bytes emojis/1f68b.png | Bin 0 -> 650 bytes emojis/1f68c.png | Bin 0 -> 481 bytes emojis/1f68d.png | Bin 0 -> 617 bytes emojis/1f68e.png | Bin 0 -> 652 bytes emojis/1f68f.png | Bin 0 -> 515 bytes emojis/1f690.png | Bin 0 -> 552 bytes emojis/1f691.png | Bin 0 -> 558 bytes emojis/1f692.png | Bin 0 -> 549 bytes emojis/1f693.png | Bin 0 -> 589 bytes emojis/1f694.png | Bin 0 -> 756 bytes emojis/1f695.png | Bin 0 -> 533 bytes emojis/1f696.png | Bin 0 -> 666 bytes emojis/1f697.png | Bin 0 -> 473 bytes emojis/1f698.png | Bin 0 -> 695 bytes emojis/1f699.png | Bin 0 -> 532 bytes emojis/1f69a.png | Bin 0 -> 449 bytes emojis/1f69b.png | Bin 0 -> 540 bytes emojis/1f69c.png | Bin 0 -> 733 bytes emojis/1f69d.png | Bin 0 -> 532 bytes emojis/1f69e.png | Bin 0 -> 601 bytes emojis/1f69f.png | Bin 0 -> 565 bytes emojis/1f6a0.png | Bin 0 -> 661 bytes emojis/1f6a1.png | Bin 0 -> 606 bytes emojis/1f6a2.png | Bin 0 -> 551 bytes emojis/1f6a3.png | Bin 0 -> 477 bytes emojis/1f6a4.png | Bin 0 -> 471 bytes emojis/1f6a5.png | Bin 0 -> 344 bytes emojis/1f6a6.png | Bin 0 -> 406 bytes emojis/1f6a7.png | Bin 0 -> 625 bytes emojis/1f6a8.png | Bin 0 -> 347 bytes emojis/1f6a9.png | Bin 0 -> 405 bytes emojis/1f6aa.png | Bin 0 -> 540 bytes emojis/1f6ab.png | Bin 0 -> 540 bytes emojis/1f6ac.png | Bin 0 -> 377 bytes emojis/1f6ad.png | Bin 0 -> 770 bytes emojis/1f6ae.png | Bin 0 -> 519 bytes emojis/1f6af.png | Bin 0 -> 829 bytes emojis/1f6b0.png | Bin 0 -> 474 bytes emojis/1f6b1.png | Bin 0 -> 804 bytes emojis/1f6b2.png | Bin 0 -> 655 bytes emojis/1f6b3.png | Bin 0 -> 929 bytes emojis/1f6b4.png | Bin 0 -> 836 bytes emojis/1f6b5.png | Bin 0 -> 872 bytes emojis/1f6b6.png | Bin 0 -> 612 bytes emojis/1f6b7.png | Bin 0 -> 807 bytes emojis/1f6b8.png | Bin 0 -> 819 bytes emojis/1f6b9.png | Bin 0 -> 407 bytes emojis/1f6ba.png | Bin 0 -> 460 bytes emojis/1f6bb.png | Bin 0 -> 592 bytes emojis/1f6bc.png | Bin 0 -> 521 bytes emojis/1f6bd.png | Bin 0 -> 432 bytes emojis/1f6be.png | Bin 0 -> 592 bytes emojis/1f6bf.png | Bin 0 -> 774 bytes emojis/1f6c0.png | Bin 0 -> 512 bytes emojis/1f6c1.png | Bin 0 -> 453 bytes emojis/1f6c2.png | Bin 0 -> 634 bytes emojis/1f6c3.png | Bin 0 -> 602 bytes emojis/1f6c4.png | Bin 0 -> 510 bytes emojis/1f6c5.png | Bin 0 -> 554 bytes emojis/1f6cb.png | Bin 0 -> 576 bytes emojis/1f6cc.png | Bin 0 -> 404 bytes emojis/1f6cd.png | Bin 0 -> 477 bytes emojis/1f6ce.png | Bin 0 -> 462 bytes emojis/1f6cf.png | Bin 0 -> 305 bytes emojis/1f6d0.png | Bin 0 -> 598 bytes emojis/1f6e0.png | Bin 0 -> 809 bytes emojis/1f6e1.png | Bin 0 -> 558 bytes emojis/1f6e2.png | Bin 0 -> 363 bytes emojis/1f6e3.png | Bin 0 -> 603 bytes emojis/1f6e4.png | Bin 0 -> 562 bytes emojis/1f6e5.png | Bin 0 -> 403 bytes emojis/1f6e9.png | Bin 0 -> 924 bytes emojis/1f6eb.png | Bin 0 -> 617 bytes emojis/1f6ec.png | Bin 0 -> 635 bytes emojis/1f6f0.png | Bin 0 -> 804 bytes emojis/1f6f3.png | Bin 0 -> 397 bytes emojis/1f910.png | Bin 0 -> 662 bytes emojis/1f911.png | Bin 0 -> 650 bytes emojis/1f912.png | Bin 0 -> 694 bytes emojis/1f913.png | Bin 0 -> 759 bytes emojis/1f914.png | Bin 0 -> 651 bytes emojis/1f915.png | Bin 0 -> 741 bytes emojis/1f916.png | Bin 0 -> 698 bytes emojis/1f917.png | Bin 0 -> 734 bytes emojis/1f918.png | Bin 0 -> 489 bytes emojis/1f980.png | Bin 0 -> 832 bytes emojis/1f981.png | Bin 0 -> 742 bytes emojis/1f982.png | Bin 0 -> 737 bytes emojis/1f983.png | Bin 0 -> 703 bytes emojis/1f984.png | Bin 0 -> 622 bytes emojis/1f9c0.png | Bin 0 -> 603 bytes emojis/203c.png | Bin 0 -> 384 bytes emojis/2049.png | Bin 0 -> 525 bytes emojis/2139.png | Bin 0 -> 284 bytes emojis/2194.png | Bin 0 -> 417 bytes emojis/2195.png | Bin 0 -> 419 bytes emojis/2196.png | Bin 0 -> 387 bytes emojis/2197.png | Bin 0 -> 385 bytes emojis/2198.png | Bin 0 -> 377 bytes emojis/2199.png | Bin 0 -> 383 bytes emojis/21a9.png | Bin 0 -> 481 bytes emojis/21aa.png | Bin 0 -> 478 bytes emojis/231a.png | Bin 0 -> 642 bytes emojis/231b.png | Bin 0 -> 564 bytes emojis/2328.png | Bin 0 -> 516 bytes emojis/23e9.png | Bin 0 -> 421 bytes emojis/23ea.png | Bin 0 -> 426 bytes emojis/23eb.png | Bin 0 -> 424 bytes emojis/23ec.png | Bin 0 -> 436 bytes emojis/23ed.png | Bin 0 -> 453 bytes emojis/23ee.png | Bin 0 -> 449 bytes emojis/23ef.png | Bin 0 -> 394 bytes emojis/23f0.png | Bin 0 -> 770 bytes emojis/23f1.png | Bin 0 -> 786 bytes emojis/23f2.png | Bin 0 -> 730 bytes emojis/23f3.png | Bin 0 -> 555 bytes emojis/23f8.png | Bin 0 -> 264 bytes emojis/23f9.png | Bin 0 -> 230 bytes emojis/23fa.png | Bin 0 -> 368 bytes emojis/24c2.png | Bin 0 -> 666 bytes emojis/25aa.png | Bin 0 -> 185 bytes emojis/25ab.png | Bin 0 -> 186 bytes emojis/25b6.png | Bin 0 -> 321 bytes emojis/25c0.png | Bin 0 -> 327 bytes emojis/25fb.png | Bin 0 -> 187 bytes emojis/25fc.png | Bin 0 -> 182 bytes emojis/25fd.png | Bin 0 -> 160 bytes emojis/25fe.png | Bin 0 -> 159 bytes emojis/2600.png | Bin 0 -> 617 bytes emojis/2601.png | Bin 0 -> 413 bytes emojis/2602.png | Bin 0 -> 582 bytes emojis/2603.png | Bin 0 -> 837 bytes emojis/2604.png | Bin 0 -> 586 bytes emojis/260e.png | Bin 0 -> 597 bytes emojis/2611.png | Bin 0 -> 487 bytes emojis/2614.png | Bin 0 -> 687 bytes emojis/2615.png | Bin 0 -> 823 bytes emojis/2618.png | Bin 0 -> 482 bytes emojis/261d.png | Bin 0 -> 495 bytes emojis/2620.png | Bin 0 -> 683 bytes emojis/2622.png | Bin 0 -> 589 bytes emojis/2623.png | Bin 0 -> 698 bytes emojis/2626.png | Bin 0 -> 503 bytes emojis/262a.png | Bin 0 -> 623 bytes emojis/262e.png | Bin 0 -> 671 bytes emojis/262f.png | Bin 0 -> 643 bytes emojis/2638.png | Bin 0 -> 690 bytes emojis/2639.png | Bin 0 -> 715 bytes emojis/263a.png | Bin 0 -> 650 bytes emojis/2648.png | Bin 0 -> 485 bytes emojis/2649.png | Bin 0 -> 519 bytes emojis/264a.png | Bin 0 -> 434 bytes emojis/264b.png | Bin 0 -> 602 bytes emojis/264c.png | Bin 0 -> 586 bytes emojis/264d.png | Bin 0 -> 531 bytes emojis/264e.png | Bin 0 -> 512 bytes emojis/264f.png | Bin 0 -> 445 bytes emojis/2650.png | Bin 0 -> 502 bytes emojis/2651.png | Bin 0 -> 499 bytes emojis/2652.png | Bin 0 -> 626 bytes emojis/2653.png | Bin 0 -> 531 bytes emojis/2660.png | Bin 0 -> 418 bytes emojis/2663.png | Bin 0 -> 479 bytes emojis/2665.png | Bin 0 -> 395 bytes emojis/2666.png | Bin 0 -> 490 bytes emojis/2668.png | Bin 0 -> 572 bytes emojis/267b.png | Bin 0 -> 688 bytes emojis/267f.png | Bin 0 -> 636 bytes emojis/2692.png | Bin 0 -> 726 bytes emojis/2693.png | Bin 0 -> 493 bytes emojis/2694.png | Bin 0 -> 780 bytes emojis/2696.png | Bin 0 -> 605 bytes emojis/2697.png | Bin 0 -> 571 bytes emojis/2699.png | Bin 0 -> 821 bytes emojis/269b.png | Bin 0 -> 575 bytes emojis/269c.png | Bin 0 -> 616 bytes emojis/26a0.png | Bin 0 -> 496 bytes emojis/26a1.png | Bin 0 -> 508 bytes emojis/26aa.png | Bin 0 -> 419 bytes emojis/26ab.png | Bin 0 -> 417 bytes emojis/26b0.png | Bin 0 -> 791 bytes emojis/26b1.png | Bin 0 -> 589 bytes emojis/26bd.png | Bin 0 -> 895 bytes emojis/26be.png | Bin 0 -> 684 bytes emojis/26c4.png | Bin 0 -> 624 bytes emojis/26c5.png | Bin 0 -> 510 bytes emojis/26c8.png | Bin 0 -> 612 bytes emojis/26ce.png | Bin 0 -> 515 bytes emojis/26cf.png | Bin 0 -> 519 bytes emojis/26d1.png | Bin 0 -> 730 bytes emojis/26d3.png | Bin 0 -> 701 bytes emojis/26d4.png | Bin 0 -> 490 bytes emojis/26e9.png | Bin 0 -> 456 bytes emojis/26ea.png | Bin 0 -> 589 bytes emojis/26f0.png | Bin 0 -> 499 bytes emojis/26f1.png | Bin 0 -> 653 bytes emojis/26f2.png | Bin 0 -> 667 bytes emojis/26f3.png | Bin 0 -> 497 bytes emojis/26f4.png | Bin 0 -> 556 bytes emojis/26f5.png | Bin 0 -> 521 bytes emojis/26f7.png | Bin 0 -> 833 bytes emojis/26f8.png | Bin 0 -> 513 bytes emojis/26f9.png | Bin 0 -> 820 bytes emojis/26fa.png | Bin 0 -> 668 bytes emojis/26fd.png | Bin 0 -> 648 bytes emojis/2702.png | Bin 0 -> 734 bytes emojis/2705.png | Bin 0 -> 440 bytes emojis/2708.png | Bin 0 -> 772 bytes emojis/2709.png | Bin 0 -> 436 bytes emojis/270a.png | Bin 0 -> 559 bytes emojis/270b.png | Bin 0 -> 459 bytes emojis/270c.png | Bin 0 -> 526 bytes emojis/270d.png | Bin 0 -> 684 bytes emojis/270f.png | Bin 0 -> 653 bytes emojis/2712.png | Bin 0 -> 660 bytes emojis/2714.png | Bin 0 -> 469 bytes emojis/2716.png | Bin 0 -> 630 bytes emojis/271d.png | Bin 0 -> 334 bytes emojis/2721.png | Bin 0 -> 561 bytes emojis/2728.png | Bin 0 -> 626 bytes emojis/2733.png | Bin 0 -> 629 bytes emojis/2734.png | Bin 0 -> 490 bytes emojis/2744.png | Bin 0 -> 600 bytes emojis/2747.png | Bin 0 -> 576 bytes emojis/274c.png | Bin 0 -> 662 bytes emojis/274e.png | Bin 0 -> 530 bytes emojis/2753.png | Bin 0 -> 410 bytes emojis/2754.png | Bin 0 -> 402 bytes emojis/2755.png | Bin 0 -> 272 bytes emojis/2757.png | Bin 0 -> 264 bytes emojis/2763.png | Bin 0 -> 444 bytes emojis/2764.png | Bin 0 -> 372 bytes emojis/2795.png | Bin 0 -> 319 bytes emojis/2796.png | Bin 0 -> 167 bytes emojis/2797.png | Bin 0 -> 328 bytes emojis/27a1.png | Bin 0 -> 376 bytes emojis/27b0.png | Bin 0 -> 496 bytes emojis/27bf.png | Bin 0 -> 573 bytes emojis/2934.png | Bin 0 -> 379 bytes emojis/2935.png | Bin 0 -> 401 bytes emojis/2b05.png | Bin 0 -> 376 bytes emojis/2b06.png | Bin 0 -> 369 bytes emojis/2b07.png | Bin 0 -> 376 bytes emojis/2b1b.png | Bin 0 -> 170 bytes emojis/2b1c.png | Bin 0 -> 155 bytes emojis/2b50.png | Bin 0 -> 391 bytes emojis/2b55.png | Bin 0 -> 673 bytes emojis/3030.png | Bin 0 -> 351 bytes emojis/303d.png | Bin 0 -> 446 bytes emojis/3297.png | Bin 0 -> 716 bytes emojis/3299.png | Bin 0 -> 768 bytes emojis/emojis-data.json | 1 + gulpfile.js | 182 +++++-- package.json | 37 +- prism-languages.json | 1 + 1354 files changed, 2493 insertions(+), 1486 deletions(-) delete mode 100644 .bowerrc delete mode 100644 app/coffee/modules/common/wisiwyg.coffee create mode 100644 app/js/medium-mention.js create mode 100644 app/modules/components/bind-code.directive.coffee create mode 100644 app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee create mode 100644 app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee create mode 100644 app/modules/components/wysiwyg/item-wysiwyg.directive.coffee create mode 100644 app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee create mode 100644 app/modules/components/wysiwyg/wysiwyg-mention.service.coffee create mode 100644 app/modules/components/wysiwyg/wysiwyg.directive.coffee rename app/{styles/components => modules/components/wysiwyg}/wysiwyg.scss (54%) create mode 100644 app/modules/components/wysiwyg/wysiwyg.service.coffee delete mode 100644 app/partials/common/components/editable-description.jade create mode 100644 app/partials/common/components/wysiwyg-toolbar.jade delete mode 100644 app/partials/common/components/wysiwyg.jade delete mode 100644 app/partials/wiki/editable-wiki-content.jade delete mode 100644 app/styles/components/markitup.scss delete mode 100644 app/styles/vendor/markitup.css delete mode 100644 bower.json create mode 100644 e2e/shared/wysiwyg.js create mode 100644 emojis/0023-20e3.png create mode 100644 emojis/002a-20e3.png create mode 100644 emojis/0030-20e3.png create mode 100644 emojis/0031-20e3.png create mode 100644 emojis/0032-20e3.png create mode 100644 emojis/0033-20e3.png create mode 100644 emojis/0034-20e3.png create mode 100644 emojis/0035-20e3.png create mode 100644 emojis/0036-20e3.png create mode 100644 emojis/0037-20e3.png create mode 100644 emojis/0038-20e3.png create mode 100644 emojis/0039-20e3.png create mode 100644 emojis/1f004.png create mode 100644 emojis/1f0cf.png create mode 100644 emojis/1f170.png create mode 100644 emojis/1f171.png create mode 100644 emojis/1f17e.png create mode 100644 emojis/1f17f.png create mode 100644 emojis/1f18e.png create mode 100644 emojis/1f191.png create mode 100644 emojis/1f192.png create mode 100644 emojis/1f193.png create mode 100644 emojis/1f194.png create mode 100644 emojis/1f195.png create mode 100644 emojis/1f196.png create mode 100644 emojis/1f197.png create mode 100644 emojis/1f198.png create mode 100644 emojis/1f199.png create mode 100644 emojis/1f19a.png create mode 100644 emojis/1f1e6-1f1e8.png create mode 100644 emojis/1f1e6-1f1e9.png create mode 100644 emojis/1f1e6-1f1ea.png create mode 100644 emojis/1f1e6-1f1eb.png create mode 100644 emojis/1f1e6-1f1ec.png create mode 100644 emojis/1f1e6-1f1ee.png create mode 100644 emojis/1f1e6-1f1f1.png create mode 100644 emojis/1f1e6-1f1f2.png create mode 100644 emojis/1f1e6-1f1f4.png create mode 100644 emojis/1f1e6-1f1f6.png create mode 100644 emojis/1f1e6-1f1f7.png create mode 100644 emojis/1f1e6-1f1f8.png create mode 100644 emojis/1f1e6-1f1f9.png create mode 100644 emojis/1f1e6-1f1fa.png create mode 100644 emojis/1f1e6-1f1fc.png create mode 100644 emojis/1f1e6-1f1fd.png create mode 100644 emojis/1f1e6-1f1ff.png create mode 100644 emojis/1f1e7-1f1e6.png create mode 100644 emojis/1f1e7-1f1e7.png create mode 100644 emojis/1f1e7-1f1e9.png create mode 100644 emojis/1f1e7-1f1ea.png create mode 100644 emojis/1f1e7-1f1eb.png create mode 100644 emojis/1f1e7-1f1ec.png create mode 100644 emojis/1f1e7-1f1ed.png create mode 100644 emojis/1f1e7-1f1ee.png create mode 100644 emojis/1f1e7-1f1ef.png create mode 100644 emojis/1f1e7-1f1f1.png create mode 100644 emojis/1f1e7-1f1f2.png create mode 100644 emojis/1f1e7-1f1f3.png create mode 100644 emojis/1f1e7-1f1f4.png create mode 100644 emojis/1f1e7-1f1f6.png create mode 100644 emojis/1f1e7-1f1f7.png create mode 100644 emojis/1f1e7-1f1f8.png create mode 100644 emojis/1f1e7-1f1f9.png create mode 100644 emojis/1f1e7-1f1fb.png create mode 100644 emojis/1f1e7-1f1fc.png create mode 100644 emojis/1f1e7-1f1fe.png create mode 100644 emojis/1f1e7-1f1ff.png create mode 100644 emojis/1f1e8-1f1e6.png create mode 100644 emojis/1f1e8-1f1e8.png create mode 100644 emojis/1f1e8-1f1e9.png create mode 100644 emojis/1f1e8-1f1eb.png create mode 100644 emojis/1f1e8-1f1ec.png create mode 100644 emojis/1f1e8-1f1ed.png create mode 100644 emojis/1f1e8-1f1ee.png create mode 100644 emojis/1f1e8-1f1f0.png create mode 100644 emojis/1f1e8-1f1f1.png create mode 100644 emojis/1f1e8-1f1f2.png create mode 100644 emojis/1f1e8-1f1f3.png create mode 100644 emojis/1f1e8-1f1f4.png create mode 100644 emojis/1f1e8-1f1f5.png create mode 100644 emojis/1f1e8-1f1f7.png create mode 100644 emojis/1f1e8-1f1fa.png create mode 100644 emojis/1f1e8-1f1fb.png create mode 100644 emojis/1f1e8-1f1fc.png create mode 100644 emojis/1f1e8-1f1fd.png create mode 100644 emojis/1f1e8-1f1fe.png create mode 100644 emojis/1f1e8-1f1ff.png create mode 100644 emojis/1f1e9-1f1ea.png create mode 100644 emojis/1f1e9-1f1ec.png create mode 100644 emojis/1f1e9-1f1ef.png create mode 100644 emojis/1f1e9-1f1f0.png create mode 100644 emojis/1f1e9-1f1f2.png create mode 100644 emojis/1f1e9-1f1f4.png create mode 100644 emojis/1f1e9-1f1ff.png create mode 100644 emojis/1f1ea-1f1e6.png create mode 100644 emojis/1f1ea-1f1e8.png create mode 100644 emojis/1f1ea-1f1ea.png create mode 100644 emojis/1f1ea-1f1ec.png create mode 100644 emojis/1f1ea-1f1ed.png create mode 100644 emojis/1f1ea-1f1f7.png create mode 100644 emojis/1f1ea-1f1f8.png create mode 100644 emojis/1f1ea-1f1f9.png create mode 100644 emojis/1f1ea-1f1fa.png create mode 100644 emojis/1f1eb-1f1ee.png create mode 100644 emojis/1f1eb-1f1ef.png create mode 100644 emojis/1f1eb-1f1f0.png create mode 100644 emojis/1f1eb-1f1f2.png create mode 100644 emojis/1f1eb-1f1f4.png create mode 100644 emojis/1f1eb-1f1f7.png create mode 100644 emojis/1f1ec-1f1e6.png create mode 100644 emojis/1f1ec-1f1e7.png create mode 100644 emojis/1f1ec-1f1e9.png create mode 100644 emojis/1f1ec-1f1ea.png create mode 100644 emojis/1f1ec-1f1eb.png create mode 100644 emojis/1f1ec-1f1ec.png create mode 100644 emojis/1f1ec-1f1ed.png create mode 100644 emojis/1f1ec-1f1ee.png create mode 100644 emojis/1f1ec-1f1f1.png create mode 100644 emojis/1f1ec-1f1f2.png create mode 100644 emojis/1f1ec-1f1f3.png create mode 100644 emojis/1f1ec-1f1f5.png create mode 100644 emojis/1f1ec-1f1f6.png create mode 100644 emojis/1f1ec-1f1f7.png create mode 100644 emojis/1f1ec-1f1f8.png create mode 100644 emojis/1f1ec-1f1f9.png create mode 100644 emojis/1f1ec-1f1fa.png create mode 100644 emojis/1f1ec-1f1fc.png create mode 100644 emojis/1f1ec-1f1fe.png create mode 100644 emojis/1f1ed-1f1f0.png create mode 100644 emojis/1f1ed-1f1f2.png create mode 100644 emojis/1f1ed-1f1f3.png create mode 100644 emojis/1f1ed-1f1f7.png create mode 100644 emojis/1f1ed-1f1f9.png create mode 100644 emojis/1f1ed-1f1fa.png create mode 100644 emojis/1f1ee-1f1e8.png create mode 100644 emojis/1f1ee-1f1e9.png create mode 100644 emojis/1f1ee-1f1ea.png create mode 100644 emojis/1f1ee-1f1f1.png create mode 100644 emojis/1f1ee-1f1f2.png create mode 100644 emojis/1f1ee-1f1f3.png create mode 100644 emojis/1f1ee-1f1f4.png create mode 100644 emojis/1f1ee-1f1f6.png create mode 100644 emojis/1f1ee-1f1f7.png create mode 100644 emojis/1f1ee-1f1f8.png create mode 100644 emojis/1f1ee-1f1f9.png create mode 100644 emojis/1f1ef-1f1ea.png create mode 100644 emojis/1f1ef-1f1f2.png create mode 100644 emojis/1f1ef-1f1f4.png create mode 100644 emojis/1f1ef-1f1f5.png create mode 100644 emojis/1f1f0-1f1ea.png create mode 100644 emojis/1f1f0-1f1ec.png create mode 100644 emojis/1f1f0-1f1ed.png create mode 100644 emojis/1f1f0-1f1ee.png create mode 100644 emojis/1f1f0-1f1f2.png create mode 100644 emojis/1f1f0-1f1f3.png create mode 100644 emojis/1f1f0-1f1f5.png create mode 100644 emojis/1f1f0-1f1f7.png create mode 100644 emojis/1f1f0-1f1fc.png create mode 100644 emojis/1f1f0-1f1fe.png create mode 100644 emojis/1f1f0-1f1ff.png create mode 100644 emojis/1f1f1-1f1e6.png create mode 100644 emojis/1f1f1-1f1e7.png create mode 100644 emojis/1f1f1-1f1e8.png create mode 100644 emojis/1f1f1-1f1ee.png create mode 100644 emojis/1f1f1-1f1f0.png create mode 100644 emojis/1f1f1-1f1f7.png create mode 100644 emojis/1f1f1-1f1f8.png create mode 100644 emojis/1f1f1-1f1f9.png create mode 100644 emojis/1f1f1-1f1fa.png create mode 100644 emojis/1f1f1-1f1fb.png create mode 100644 emojis/1f1f1-1f1fe.png create mode 100644 emojis/1f1f2-1f1e6.png create mode 100644 emojis/1f1f2-1f1e8.png create mode 100644 emojis/1f1f2-1f1e9.png create mode 100644 emojis/1f1f2-1f1ea.png create mode 100644 emojis/1f1f2-1f1eb.png create mode 100644 emojis/1f1f2-1f1ec.png create mode 100644 emojis/1f1f2-1f1ed.png create mode 100644 emojis/1f1f2-1f1f0.png create mode 100644 emojis/1f1f2-1f1f1.png create mode 100644 emojis/1f1f2-1f1f2.png create mode 100644 emojis/1f1f2-1f1f3.png create mode 100644 emojis/1f1f2-1f1f4.png create mode 100644 emojis/1f1f2-1f1f5.png create mode 100644 emojis/1f1f2-1f1f6.png create mode 100644 emojis/1f1f2-1f1f7.png create mode 100644 emojis/1f1f2-1f1f8.png create mode 100644 emojis/1f1f2-1f1f9.png create mode 100644 emojis/1f1f2-1f1fa.png create mode 100644 emojis/1f1f2-1f1fb.png create mode 100644 emojis/1f1f2-1f1fc.png create mode 100644 emojis/1f1f2-1f1fd.png create mode 100644 emojis/1f1f2-1f1fe.png create mode 100644 emojis/1f1f2-1f1ff.png create mode 100644 emojis/1f1f3-1f1e6.png create mode 100644 emojis/1f1f3-1f1e8.png create mode 100644 emojis/1f1f3-1f1ea.png create mode 100644 emojis/1f1f3-1f1eb.png create mode 100644 emojis/1f1f3-1f1ec.png create mode 100644 emojis/1f1f3-1f1ee.png create mode 100644 emojis/1f1f3-1f1f1.png create mode 100644 emojis/1f1f3-1f1f4.png create mode 100644 emojis/1f1f3-1f1f5.png create mode 100644 emojis/1f1f3-1f1f7.png create mode 100644 emojis/1f1f3-1f1fa.png create mode 100644 emojis/1f1f3-1f1ff.png create mode 100644 emojis/1f1f4-1f1f2.png create mode 100644 emojis/1f1f5-1f1e6.png create mode 100644 emojis/1f1f5-1f1ea.png create mode 100644 emojis/1f1f5-1f1eb.png create mode 100644 emojis/1f1f5-1f1ec.png create mode 100644 emojis/1f1f5-1f1ed.png create mode 100644 emojis/1f1f5-1f1f0.png create mode 100644 emojis/1f1f5-1f1f1.png create mode 100644 emojis/1f1f5-1f1f2.png create mode 100644 emojis/1f1f5-1f1f3.png create mode 100644 emojis/1f1f5-1f1f7.png create mode 100644 emojis/1f1f5-1f1f8.png create mode 100644 emojis/1f1f5-1f1f9.png create mode 100644 emojis/1f1f5-1f1fc.png create mode 100644 emojis/1f1f5-1f1fe.png create mode 100644 emojis/1f1f6-1f1e6.png create mode 100644 emojis/1f1f7-1f1ea.png create mode 100644 emojis/1f1f7-1f1f4.png create mode 100644 emojis/1f1f7-1f1f8.png create mode 100644 emojis/1f1f7-1f1fa.png create mode 100644 emojis/1f1f7-1f1fc.png create mode 100644 emojis/1f1f8-1f1e6.png create mode 100644 emojis/1f1f8-1f1e7.png create mode 100644 emojis/1f1f8-1f1e8.png create mode 100644 emojis/1f1f8-1f1e9.png create mode 100644 emojis/1f1f8-1f1ea.png create mode 100644 emojis/1f1f8-1f1ec.png create mode 100644 emojis/1f1f8-1f1ed.png create mode 100644 emojis/1f1f8-1f1ee.png create mode 100644 emojis/1f1f8-1f1ef.png create mode 100644 emojis/1f1f8-1f1f0.png create mode 100644 emojis/1f1f8-1f1f1.png create mode 100644 emojis/1f1f8-1f1f2.png create mode 100644 emojis/1f1f8-1f1f3.png create mode 100644 emojis/1f1f8-1f1f4.png create mode 100644 emojis/1f1f8-1f1f7.png create mode 100644 emojis/1f1f8-1f1f8.png create mode 100644 emojis/1f1f8-1f1f9.png create mode 100644 emojis/1f1f8-1f1fb.png create mode 100644 emojis/1f1f8-1f1fd.png create mode 100644 emojis/1f1f8-1f1fe.png create mode 100644 emojis/1f1f8-1f1ff.png create mode 100644 emojis/1f1f9-1f1e6.png create mode 100644 emojis/1f1f9-1f1e8.png create mode 100644 emojis/1f1f9-1f1e9.png create mode 100644 emojis/1f1f9-1f1eb.png create mode 100644 emojis/1f1f9-1f1ec.png create mode 100644 emojis/1f1f9-1f1ed.png create mode 100644 emojis/1f1f9-1f1ef.png create mode 100644 emojis/1f1f9-1f1f0.png create mode 100644 emojis/1f1f9-1f1f1.png create mode 100644 emojis/1f1f9-1f1f2.png create mode 100644 emojis/1f1f9-1f1f3.png create mode 100644 emojis/1f1f9-1f1f4.png create mode 100644 emojis/1f1f9-1f1f7.png create mode 100644 emojis/1f1f9-1f1f9.png create mode 100644 emojis/1f1f9-1f1fb.png create mode 100644 emojis/1f1f9-1f1fc.png create mode 100644 emojis/1f1f9-1f1ff.png create mode 100644 emojis/1f1fa-1f1e6.png create mode 100644 emojis/1f1fa-1f1ec.png create mode 100644 emojis/1f1fa-1f1f2.png create mode 100644 emojis/1f1fa-1f1f8.png create mode 100644 emojis/1f1fa-1f1fe.png create mode 100644 emojis/1f1fa-1f1ff.png create mode 100644 emojis/1f1fb-1f1e6.png create mode 100644 emojis/1f1fb-1f1e8.png create mode 100644 emojis/1f1fb-1f1ea.png create mode 100644 emojis/1f1fb-1f1ec.png create mode 100644 emojis/1f1fb-1f1ee.png create mode 100644 emojis/1f1fb-1f1f3.png create mode 100644 emojis/1f1fb-1f1fa.png create mode 100644 emojis/1f1fc-1f1eb.png create mode 100644 emojis/1f1fc-1f1f8.png create mode 100644 emojis/1f1fd-1f1f0.png create mode 100644 emojis/1f1fe-1f1ea.png create mode 100644 emojis/1f1fe-1f1f9.png create mode 100644 emojis/1f1ff-1f1e6.png create mode 100644 emojis/1f1ff-1f1f2.png create mode 100644 emojis/1f1ff-1f1fc.png create mode 100644 emojis/1f201.png create mode 100644 emojis/1f202.png create mode 100644 emojis/1f21a.png create mode 100644 emojis/1f22f.png create mode 100644 emojis/1f232.png create mode 100644 emojis/1f233.png create mode 100644 emojis/1f234.png create mode 100644 emojis/1f235.png create mode 100644 emojis/1f236.png create mode 100644 emojis/1f237.png create mode 100644 emojis/1f238.png create mode 100644 emojis/1f239.png create mode 100644 emojis/1f23a.png create mode 100644 emojis/1f250.png create mode 100644 emojis/1f251.png create mode 100644 emojis/1f300.png create mode 100644 emojis/1f301.png create mode 100644 emojis/1f302.png create mode 100644 emojis/1f303.png create mode 100644 emojis/1f304.png create mode 100644 emojis/1f305.png create mode 100644 emojis/1f306.png create mode 100644 emojis/1f307.png create mode 100644 emojis/1f308.png create mode 100644 emojis/1f309.png create mode 100644 emojis/1f30a.png create mode 100644 emojis/1f30b.png create mode 100644 emojis/1f30c.png create mode 100644 emojis/1f30d.png create mode 100644 emojis/1f30e.png create mode 100644 emojis/1f30f.png create mode 100644 emojis/1f310.png create mode 100644 emojis/1f311.png create mode 100644 emojis/1f312.png create mode 100644 emojis/1f313.png create mode 100644 emojis/1f314.png create mode 100644 emojis/1f315.png create mode 100644 emojis/1f316.png create mode 100644 emojis/1f317.png create mode 100644 emojis/1f318.png create mode 100644 emojis/1f319.png create mode 100644 emojis/1f31a.png create mode 100644 emojis/1f31b.png create mode 100644 emojis/1f31c.png create mode 100644 emojis/1f31d.png create mode 100644 emojis/1f31e.png create mode 100644 emojis/1f31f.png create mode 100644 emojis/1f320.png create mode 100644 emojis/1f321.png create mode 100644 emojis/1f324.png create mode 100644 emojis/1f325.png create mode 100644 emojis/1f326.png create mode 100644 emojis/1f327.png create mode 100644 emojis/1f328.png create mode 100644 emojis/1f329.png create mode 100644 emojis/1f32a.png create mode 100644 emojis/1f32b.png create mode 100644 emojis/1f32c.png create mode 100644 emojis/1f32d.png create mode 100644 emojis/1f32e.png create mode 100644 emojis/1f32f.png create mode 100644 emojis/1f330.png create mode 100644 emojis/1f331.png create mode 100644 emojis/1f332.png create mode 100644 emojis/1f333.png create mode 100644 emojis/1f334.png create mode 100644 emojis/1f335.png create mode 100644 emojis/1f336.png create mode 100644 emojis/1f337.png create mode 100644 emojis/1f338.png create mode 100644 emojis/1f339.png create mode 100644 emojis/1f33a.png create mode 100644 emojis/1f33b.png create mode 100644 emojis/1f33c.png create mode 100644 emojis/1f33d.png create mode 100644 emojis/1f33e.png create mode 100644 emojis/1f33f.png create mode 100644 emojis/1f340.png create mode 100644 emojis/1f341.png create mode 100644 emojis/1f342.png create mode 100644 emojis/1f343.png create mode 100644 emojis/1f344.png create mode 100644 emojis/1f345.png create mode 100644 emojis/1f346.png create mode 100644 emojis/1f347.png create mode 100644 emojis/1f348.png create mode 100644 emojis/1f349.png create mode 100644 emojis/1f34a.png create mode 100644 emojis/1f34b.png create mode 100644 emojis/1f34c.png create mode 100644 emojis/1f34d.png create mode 100644 emojis/1f34e.png create mode 100644 emojis/1f34f.png create mode 100644 emojis/1f350.png create mode 100644 emojis/1f351.png create mode 100644 emojis/1f352.png create mode 100644 emojis/1f353.png create mode 100644 emojis/1f354.png create mode 100644 emojis/1f355.png create mode 100644 emojis/1f356.png create mode 100644 emojis/1f357.png create mode 100644 emojis/1f358.png create mode 100644 emojis/1f359.png create mode 100644 emojis/1f35a.png create mode 100644 emojis/1f35b.png create mode 100644 emojis/1f35c.png create mode 100644 emojis/1f35d.png create mode 100644 emojis/1f35e.png create mode 100644 emojis/1f35f.png create mode 100644 emojis/1f360.png create mode 100644 emojis/1f361.png create mode 100644 emojis/1f362.png create mode 100644 emojis/1f363.png create mode 100644 emojis/1f364.png create mode 100644 emojis/1f365.png create mode 100644 emojis/1f366.png create mode 100644 emojis/1f367.png create mode 100644 emojis/1f368.png create mode 100644 emojis/1f369.png create mode 100644 emojis/1f36a.png create mode 100644 emojis/1f36b.png create mode 100644 emojis/1f36c.png create mode 100644 emojis/1f36d.png create mode 100644 emojis/1f36e.png create mode 100644 emojis/1f36f.png create mode 100644 emojis/1f370.png create mode 100644 emojis/1f371.png create mode 100644 emojis/1f372.png create mode 100644 emojis/1f373.png create mode 100644 emojis/1f374.png create mode 100644 emojis/1f375.png create mode 100644 emojis/1f376.png create mode 100644 emojis/1f377.png create mode 100644 emojis/1f378.png create mode 100644 emojis/1f379.png create mode 100644 emojis/1f37a.png create mode 100644 emojis/1f37b.png create mode 100644 emojis/1f37c.png create mode 100644 emojis/1f37d.png create mode 100644 emojis/1f37e.png create mode 100644 emojis/1f37f.png create mode 100644 emojis/1f380.png create mode 100644 emojis/1f381.png create mode 100644 emojis/1f382.png create mode 100644 emojis/1f383.png create mode 100644 emojis/1f384.png create mode 100644 emojis/1f385.png create mode 100644 emojis/1f386.png create mode 100644 emojis/1f387.png create mode 100644 emojis/1f388.png create mode 100644 emojis/1f389.png create mode 100644 emojis/1f38a.png create mode 100644 emojis/1f38b.png create mode 100644 emojis/1f38c.png create mode 100644 emojis/1f38d.png create mode 100644 emojis/1f38e.png create mode 100644 emojis/1f38f.png create mode 100644 emojis/1f390.png create mode 100644 emojis/1f391.png create mode 100644 emojis/1f392.png create mode 100644 emojis/1f393.png create mode 100644 emojis/1f396.png create mode 100644 emojis/1f397.png create mode 100644 emojis/1f399.png create mode 100644 emojis/1f39a.png create mode 100644 emojis/1f39b.png create mode 100644 emojis/1f39e.png create mode 100644 emojis/1f39f.png create mode 100644 emojis/1f3a0.png create mode 100644 emojis/1f3a1.png create mode 100644 emojis/1f3a2.png create mode 100644 emojis/1f3a3.png create mode 100644 emojis/1f3a4.png create mode 100644 emojis/1f3a5.png create mode 100644 emojis/1f3a6.png create mode 100644 emojis/1f3a7.png create mode 100644 emojis/1f3a8.png create mode 100644 emojis/1f3a9.png create mode 100644 emojis/1f3aa.png create mode 100644 emojis/1f3ab.png create mode 100644 emojis/1f3ac.png create mode 100644 emojis/1f3ad.png create mode 100644 emojis/1f3ae.png create mode 100644 emojis/1f3af.png create mode 100644 emojis/1f3b0.png create mode 100644 emojis/1f3b1.png create mode 100644 emojis/1f3b2.png create mode 100644 emojis/1f3b3.png create mode 100644 emojis/1f3b4.png create mode 100644 emojis/1f3b5.png create mode 100644 emojis/1f3b6.png create mode 100644 emojis/1f3b7.png create mode 100644 emojis/1f3b8.png create mode 100644 emojis/1f3b9.png create mode 100644 emojis/1f3ba.png create mode 100644 emojis/1f3bb.png create mode 100644 emojis/1f3bc.png create mode 100644 emojis/1f3bd.png create mode 100644 emojis/1f3be.png create mode 100644 emojis/1f3bf.png create mode 100644 emojis/1f3c0.png create mode 100644 emojis/1f3c1.png create mode 100644 emojis/1f3c2.png create mode 100644 emojis/1f3c3.png create mode 100644 emojis/1f3c4.png create mode 100644 emojis/1f3c5.png create mode 100644 emojis/1f3c6.png create mode 100644 emojis/1f3c7.png create mode 100644 emojis/1f3c8.png create mode 100644 emojis/1f3c9.png create mode 100644 emojis/1f3ca.png create mode 100644 emojis/1f3cb.png create mode 100644 emojis/1f3cc.png create mode 100644 emojis/1f3cd.png create mode 100644 emojis/1f3ce.png create mode 100644 emojis/1f3cf.png create mode 100644 emojis/1f3d0.png create mode 100644 emojis/1f3d1.png create mode 100644 emojis/1f3d2.png create mode 100644 emojis/1f3d3.png create mode 100644 emojis/1f3d4.png create mode 100644 emojis/1f3d5.png create mode 100644 emojis/1f3d6.png create mode 100644 emojis/1f3d7.png create mode 100644 emojis/1f3d8.png create mode 100644 emojis/1f3d9.png create mode 100644 emojis/1f3da.png create mode 100644 emojis/1f3db.png create mode 100644 emojis/1f3dc.png create mode 100644 emojis/1f3dd.png create mode 100644 emojis/1f3de.png create mode 100644 emojis/1f3df.png create mode 100644 emojis/1f3e0.png create mode 100644 emojis/1f3e1.png create mode 100644 emojis/1f3e2.png create mode 100644 emojis/1f3e3.png create mode 100644 emojis/1f3e4.png create mode 100644 emojis/1f3e5.png create mode 100644 emojis/1f3e6.png create mode 100644 emojis/1f3e7.png create mode 100644 emojis/1f3e8.png create mode 100644 emojis/1f3e9.png create mode 100644 emojis/1f3ea.png create mode 100644 emojis/1f3eb.png create mode 100644 emojis/1f3ec.png create mode 100644 emojis/1f3ed.png create mode 100644 emojis/1f3ee.png create mode 100644 emojis/1f3ef.png create mode 100644 emojis/1f3f0.png create mode 100644 emojis/1f3f3.png create mode 100644 emojis/1f3f4.png create mode 100644 emojis/1f3f5.png create mode 100644 emojis/1f3f7.png create mode 100644 emojis/1f3f8.png create mode 100644 emojis/1f3f9.png create mode 100644 emojis/1f3fa.png create mode 100644 emojis/1f3fb.png create mode 100644 emojis/1f3fc.png create mode 100644 emojis/1f3fd.png create mode 100644 emojis/1f3fe.png create mode 100644 emojis/1f3ff.png create mode 100644 emojis/1f400.png create mode 100644 emojis/1f401.png create mode 100644 emojis/1f402.png create mode 100644 emojis/1f403.png create mode 100644 emojis/1f404.png create mode 100644 emojis/1f405.png create mode 100644 emojis/1f406.png create mode 100644 emojis/1f407.png create mode 100644 emojis/1f408.png create mode 100644 emojis/1f409.png create mode 100644 emojis/1f40a.png create mode 100644 emojis/1f40b.png create mode 100644 emojis/1f40c.png create mode 100644 emojis/1f40d.png create mode 100644 emojis/1f40e.png create mode 100644 emojis/1f40f.png create mode 100644 emojis/1f410.png create mode 100644 emojis/1f411.png create mode 100644 emojis/1f412.png create mode 100644 emojis/1f413.png create mode 100644 emojis/1f414.png create mode 100644 emojis/1f415.png create mode 100644 emojis/1f416.png create mode 100644 emojis/1f417.png create mode 100644 emojis/1f418.png create mode 100644 emojis/1f419.png create mode 100644 emojis/1f41a.png create mode 100644 emojis/1f41b.png create mode 100644 emojis/1f41c.png create mode 100644 emojis/1f41d.png create mode 100644 emojis/1f41e.png create mode 100644 emojis/1f41f.png create mode 100644 emojis/1f420.png create mode 100644 emojis/1f421.png create mode 100644 emojis/1f422.png create mode 100644 emojis/1f423.png create mode 100644 emojis/1f424.png create mode 100644 emojis/1f425.png create mode 100644 emojis/1f426.png create mode 100644 emojis/1f427.png create mode 100644 emojis/1f428.png create mode 100644 emojis/1f429.png create mode 100644 emojis/1f42a.png create mode 100644 emojis/1f42b.png create mode 100644 emojis/1f42c.png create mode 100644 emojis/1f42d.png create mode 100644 emojis/1f42e.png create mode 100644 emojis/1f42f.png create mode 100644 emojis/1f430.png create mode 100644 emojis/1f431.png create mode 100644 emojis/1f432.png create mode 100644 emojis/1f433.png create mode 100644 emojis/1f434.png create mode 100644 emojis/1f435.png create mode 100644 emojis/1f436.png create mode 100644 emojis/1f437.png create mode 100644 emojis/1f438.png create mode 100644 emojis/1f439.png create mode 100644 emojis/1f43a.png create mode 100644 emojis/1f43b.png create mode 100644 emojis/1f43c.png create mode 100644 emojis/1f43d.png create mode 100644 emojis/1f43e.png create mode 100644 emojis/1f43f.png create mode 100644 emojis/1f440.png create mode 100644 emojis/1f441.png create mode 100644 emojis/1f442.png create mode 100644 emojis/1f443.png create mode 100644 emojis/1f444.png create mode 100644 emojis/1f445.png create mode 100644 emojis/1f446.png create mode 100644 emojis/1f447.png create mode 100644 emojis/1f448.png create mode 100644 emojis/1f449.png create mode 100644 emojis/1f44a.png create mode 100644 emojis/1f44b.png create mode 100644 emojis/1f44c.png create mode 100644 emojis/1f44d.png create mode 100644 emojis/1f44e.png create mode 100644 emojis/1f44f.png create mode 100644 emojis/1f450.png create mode 100644 emojis/1f451.png create mode 100644 emojis/1f452.png create mode 100644 emojis/1f453.png create mode 100644 emojis/1f454.png create mode 100644 emojis/1f455.png create mode 100644 emojis/1f456.png create mode 100644 emojis/1f457.png create mode 100644 emojis/1f458.png create mode 100644 emojis/1f459.png create mode 100644 emojis/1f45a.png create mode 100644 emojis/1f45b.png create mode 100644 emojis/1f45c.png create mode 100644 emojis/1f45d.png create mode 100644 emojis/1f45e.png create mode 100644 emojis/1f45f.png create mode 100644 emojis/1f460.png create mode 100644 emojis/1f461.png create mode 100644 emojis/1f462.png create mode 100644 emojis/1f463.png create mode 100644 emojis/1f464.png create mode 100644 emojis/1f465.png create mode 100644 emojis/1f466.png create mode 100644 emojis/1f467.png create mode 100644 emojis/1f468-200d-1f468-200d-1f466-200d-1f466.png create mode 100644 emojis/1f468-200d-1f468-200d-1f466.png create mode 100644 emojis/1f468-200d-1f468-200d-1f467-200d-1f466.png create mode 100644 emojis/1f468-200d-1f468-200d-1f467-200d-1f467.png create mode 100644 emojis/1f468-200d-1f468-200d-1f467.png create mode 100644 emojis/1f468-200d-1f469-200d-1f466-200d-1f466.png create mode 100644 emojis/1f468-200d-1f469-200d-1f467-200d-1f466.png create mode 100644 emojis/1f468-200d-1f469-200d-1f467-200d-1f467.png create mode 100644 emojis/1f468-200d-1f469-200d-1f467.png create mode 100644 emojis/1f468-200d-2764-fe0f-200d-1f468.png create mode 100644 emojis/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png create mode 100644 emojis/1f468.png create mode 100644 emojis/1f469-200d-1f469-200d-1f466-200d-1f466.png create mode 100644 emojis/1f469-200d-1f469-200d-1f466.png create mode 100644 emojis/1f469-200d-1f469-200d-1f467-200d-1f466.png create mode 100644 emojis/1f469-200d-1f469-200d-1f467-200d-1f467.png create mode 100644 emojis/1f469-200d-1f469-200d-1f467.png create mode 100644 emojis/1f469-200d-2764-fe0f-200d-1f469.png create mode 100644 emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png create mode 100644 emojis/1f469.png create mode 100644 emojis/1f46a.png create mode 100644 emojis/1f46b.png create mode 100644 emojis/1f46c.png create mode 100644 emojis/1f46d.png create mode 100644 emojis/1f46e.png create mode 100644 emojis/1f46f.png create mode 100644 emojis/1f470.png create mode 100644 emojis/1f471.png create mode 100644 emojis/1f472.png create mode 100644 emojis/1f473.png create mode 100644 emojis/1f474.png create mode 100644 emojis/1f475.png create mode 100644 emojis/1f476.png create mode 100644 emojis/1f477.png create mode 100644 emojis/1f478.png create mode 100644 emojis/1f479.png create mode 100644 emojis/1f47a.png create mode 100644 emojis/1f47b.png create mode 100644 emojis/1f47c.png create mode 100644 emojis/1f47d.png create mode 100644 emojis/1f47e.png create mode 100644 emojis/1f47f.png create mode 100644 emojis/1f480.png create mode 100644 emojis/1f481.png create mode 100644 emojis/1f482.png create mode 100644 emojis/1f483.png create mode 100644 emojis/1f484.png create mode 100644 emojis/1f485.png create mode 100644 emojis/1f486.png create mode 100644 emojis/1f487.png create mode 100644 emojis/1f488.png create mode 100644 emojis/1f489.png create mode 100644 emojis/1f48a.png create mode 100644 emojis/1f48b.png create mode 100644 emojis/1f48c.png create mode 100644 emojis/1f48d.png create mode 100644 emojis/1f48e.png create mode 100644 emojis/1f48f.png create mode 100644 emojis/1f490.png create mode 100644 emojis/1f491.png create mode 100644 emojis/1f492.png create mode 100644 emojis/1f493.png create mode 100644 emojis/1f494.png create mode 100644 emojis/1f495.png create mode 100644 emojis/1f496.png create mode 100644 emojis/1f497.png create mode 100644 emojis/1f498.png create mode 100644 emojis/1f499.png create mode 100644 emojis/1f49a.png create mode 100644 emojis/1f49b.png create mode 100644 emojis/1f49c.png create mode 100644 emojis/1f49d.png create mode 100644 emojis/1f49e.png create mode 100644 emojis/1f49f.png create mode 100644 emojis/1f4a0.png create mode 100644 emojis/1f4a1.png create mode 100644 emojis/1f4a2.png create mode 100644 emojis/1f4a3.png create mode 100644 emojis/1f4a4.png create mode 100644 emojis/1f4a5.png create mode 100644 emojis/1f4a6.png create mode 100644 emojis/1f4a7.png create mode 100644 emojis/1f4a8.png create mode 100644 emojis/1f4a9.png create mode 100644 emojis/1f4aa.png create mode 100644 emojis/1f4ab.png create mode 100644 emojis/1f4ac.png create mode 100644 emojis/1f4ad.png create mode 100644 emojis/1f4ae.png create mode 100644 emojis/1f4af.png create mode 100644 emojis/1f4b0.png create mode 100644 emojis/1f4b1.png create mode 100644 emojis/1f4b2.png create mode 100644 emojis/1f4b3.png create mode 100644 emojis/1f4b4.png create mode 100644 emojis/1f4b5.png create mode 100644 emojis/1f4b6.png create mode 100644 emojis/1f4b7.png create mode 100644 emojis/1f4b8.png create mode 100644 emojis/1f4b9.png create mode 100644 emojis/1f4ba.png create mode 100644 emojis/1f4bb.png create mode 100644 emojis/1f4bc.png create mode 100644 emojis/1f4bd.png create mode 100644 emojis/1f4be.png create mode 100644 emojis/1f4bf.png create mode 100644 emojis/1f4c0.png create mode 100644 emojis/1f4c1.png create mode 100644 emojis/1f4c2.png create mode 100644 emojis/1f4c3.png create mode 100644 emojis/1f4c4.png create mode 100644 emojis/1f4c5.png create mode 100644 emojis/1f4c6.png create mode 100644 emojis/1f4c7.png create mode 100644 emojis/1f4c8.png create mode 100644 emojis/1f4c9.png create mode 100644 emojis/1f4ca.png create mode 100644 emojis/1f4cb.png create mode 100644 emojis/1f4cc.png create mode 100644 emojis/1f4cd.png create mode 100644 emojis/1f4ce.png create mode 100644 emojis/1f4cf.png create mode 100644 emojis/1f4d0.png create mode 100644 emojis/1f4d1.png create mode 100644 emojis/1f4d2.png create mode 100644 emojis/1f4d3.png create mode 100644 emojis/1f4d4.png create mode 100644 emojis/1f4d5.png create mode 100644 emojis/1f4d6.png create mode 100644 emojis/1f4d7.png create mode 100644 emojis/1f4d8.png create mode 100644 emojis/1f4d9.png create mode 100644 emojis/1f4da.png create mode 100644 emojis/1f4db.png create mode 100644 emojis/1f4dc.png create mode 100644 emojis/1f4dd.png create mode 100644 emojis/1f4de.png create mode 100644 emojis/1f4df.png create mode 100644 emojis/1f4e0.png create mode 100644 emojis/1f4e1.png create mode 100644 emojis/1f4e2.png create mode 100644 emojis/1f4e3.png create mode 100644 emojis/1f4e4.png create mode 100644 emojis/1f4e5.png create mode 100644 emojis/1f4e6.png create mode 100644 emojis/1f4e7.png create mode 100644 emojis/1f4e8.png create mode 100644 emojis/1f4e9.png create mode 100644 emojis/1f4ea.png create mode 100644 emojis/1f4eb.png create mode 100644 emojis/1f4ec.png create mode 100644 emojis/1f4ed.png create mode 100644 emojis/1f4ee.png create mode 100644 emojis/1f4ef.png create mode 100644 emojis/1f4f0.png create mode 100644 emojis/1f4f1.png create mode 100644 emojis/1f4f2.png create mode 100644 emojis/1f4f3.png create mode 100644 emojis/1f4f4.png create mode 100644 emojis/1f4f5.png create mode 100644 emojis/1f4f6.png create mode 100644 emojis/1f4f7.png create mode 100644 emojis/1f4f8.png create mode 100644 emojis/1f4f9.png create mode 100644 emojis/1f4fa.png create mode 100644 emojis/1f4fb.png create mode 100644 emojis/1f4fc.png create mode 100644 emojis/1f4fd.png create mode 100644 emojis/1f4ff.png create mode 100644 emojis/1f500.png create mode 100644 emojis/1f501.png create mode 100644 emojis/1f502.png create mode 100644 emojis/1f503.png create mode 100644 emojis/1f504.png create mode 100644 emojis/1f505.png create mode 100644 emojis/1f506.png create mode 100644 emojis/1f507.png create mode 100644 emojis/1f508.png create mode 100644 emojis/1f509.png create mode 100644 emojis/1f50a.png create mode 100644 emojis/1f50b.png create mode 100644 emojis/1f50c.png create mode 100644 emojis/1f50d.png create mode 100644 emojis/1f50e.png create mode 100644 emojis/1f50f.png create mode 100644 emojis/1f510.png create mode 100644 emojis/1f511.png create mode 100644 emojis/1f512.png create mode 100644 emojis/1f513.png create mode 100644 emojis/1f514.png create mode 100644 emojis/1f515.png create mode 100644 emojis/1f516.png create mode 100644 emojis/1f517.png create mode 100644 emojis/1f518.png create mode 100644 emojis/1f519.png create mode 100644 emojis/1f51a.png create mode 100644 emojis/1f51b.png create mode 100644 emojis/1f51c.png create mode 100644 emojis/1f51d.png create mode 100644 emojis/1f51e.png create mode 100644 emojis/1f51f.png create mode 100644 emojis/1f520.png create mode 100644 emojis/1f521.png create mode 100644 emojis/1f522.png create mode 100644 emojis/1f523.png create mode 100644 emojis/1f524.png create mode 100644 emojis/1f525.png create mode 100644 emojis/1f526.png create mode 100644 emojis/1f527.png create mode 100644 emojis/1f528.png create mode 100644 emojis/1f529.png create mode 100644 emojis/1f52a.png create mode 100644 emojis/1f52b.png create mode 100644 emojis/1f52c.png create mode 100644 emojis/1f52d.png create mode 100644 emojis/1f52e.png create mode 100644 emojis/1f52f.png create mode 100644 emojis/1f530.png create mode 100644 emojis/1f531.png create mode 100644 emojis/1f532.png create mode 100644 emojis/1f533.png create mode 100644 emojis/1f534.png create mode 100644 emojis/1f535.png create mode 100644 emojis/1f536.png create mode 100644 emojis/1f537.png create mode 100644 emojis/1f538.png create mode 100644 emojis/1f539.png create mode 100644 emojis/1f53a.png create mode 100644 emojis/1f53b.png create mode 100644 emojis/1f53c.png create mode 100644 emojis/1f53d.png create mode 100644 emojis/1f549.png create mode 100644 emojis/1f54a.png create mode 100644 emojis/1f54b.png create mode 100644 emojis/1f54c.png create mode 100644 emojis/1f54d.png create mode 100644 emojis/1f54e.png create mode 100644 emojis/1f550.png create mode 100644 emojis/1f551.png create mode 100644 emojis/1f552.png create mode 100644 emojis/1f553.png create mode 100644 emojis/1f554.png create mode 100644 emojis/1f555.png create mode 100644 emojis/1f556.png create mode 100644 emojis/1f557.png create mode 100644 emojis/1f558.png create mode 100644 emojis/1f559.png create mode 100644 emojis/1f55a.png create mode 100644 emojis/1f55b.png create mode 100644 emojis/1f55c.png create mode 100644 emojis/1f55d.png create mode 100644 emojis/1f55e.png create mode 100644 emojis/1f55f.png create mode 100644 emojis/1f560.png create mode 100644 emojis/1f561.png create mode 100644 emojis/1f562.png create mode 100644 emojis/1f563.png create mode 100644 emojis/1f564.png create mode 100644 emojis/1f565.png create mode 100644 emojis/1f566.png create mode 100644 emojis/1f567.png create mode 100644 emojis/1f56f.png create mode 100644 emojis/1f570.png create mode 100644 emojis/1f573.png create mode 100644 emojis/1f574.png create mode 100644 emojis/1f575.png create mode 100644 emojis/1f576.png create mode 100644 emojis/1f577.png create mode 100644 emojis/1f578.png create mode 100644 emojis/1f579.png create mode 100644 emojis/1f587.png create mode 100644 emojis/1f58a.png create mode 100644 emojis/1f58b.png create mode 100644 emojis/1f58c.png create mode 100644 emojis/1f58d.png create mode 100644 emojis/1f590.png create mode 100644 emojis/1f595.png create mode 100644 emojis/1f596.png create mode 100644 emojis/1f5a5.png create mode 100644 emojis/1f5a8.png create mode 100644 emojis/1f5b1.png create mode 100644 emojis/1f5b2.png create mode 100644 emojis/1f5bc.png create mode 100644 emojis/1f5c2.png create mode 100644 emojis/1f5c3.png create mode 100644 emojis/1f5c4.png create mode 100644 emojis/1f5d1.png create mode 100644 emojis/1f5d2.png create mode 100644 emojis/1f5d3.png create mode 100644 emojis/1f5dc.png create mode 100644 emojis/1f5dd.png create mode 100644 emojis/1f5de.png create mode 100644 emojis/1f5e1.png create mode 100644 emojis/1f5e3.png create mode 100644 emojis/1f5e8.png create mode 100644 emojis/1f5ef.png create mode 100644 emojis/1f5f3.png create mode 100644 emojis/1f5fa.png create mode 100644 emojis/1f5fb.png create mode 100644 emojis/1f5fc.png create mode 100644 emojis/1f5fd.png create mode 100644 emojis/1f5fe.png create mode 100644 emojis/1f5ff.png create mode 100644 emojis/1f600.png create mode 100644 emojis/1f601.png create mode 100644 emojis/1f602.png create mode 100644 emojis/1f603.png create mode 100644 emojis/1f604.png create mode 100644 emojis/1f605.png create mode 100644 emojis/1f606.png create mode 100644 emojis/1f607.png create mode 100644 emojis/1f608.png create mode 100644 emojis/1f609.png create mode 100644 emojis/1f60a.png create mode 100644 emojis/1f60b.png create mode 100644 emojis/1f60c.png create mode 100644 emojis/1f60d.png create mode 100644 emojis/1f60e.png create mode 100644 emojis/1f60f.png create mode 100644 emojis/1f610.png create mode 100644 emojis/1f611.png create mode 100644 emojis/1f612.png create mode 100644 emojis/1f613.png create mode 100644 emojis/1f614.png create mode 100644 emojis/1f615.png create mode 100644 emojis/1f616.png create mode 100644 emojis/1f617.png create mode 100644 emojis/1f618.png create mode 100644 emojis/1f619.png create mode 100644 emojis/1f61a.png create mode 100644 emojis/1f61b.png create mode 100644 emojis/1f61c.png create mode 100644 emojis/1f61d.png create mode 100644 emojis/1f61e.png create mode 100644 emojis/1f61f.png create mode 100644 emojis/1f620.png create mode 100644 emojis/1f621.png create mode 100644 emojis/1f622.png create mode 100644 emojis/1f623.png create mode 100644 emojis/1f624.png create mode 100644 emojis/1f625.png create mode 100644 emojis/1f626.png create mode 100644 emojis/1f627.png create mode 100644 emojis/1f628.png create mode 100644 emojis/1f629.png create mode 100644 emojis/1f62a.png create mode 100644 emojis/1f62b.png create mode 100644 emojis/1f62c.png create mode 100644 emojis/1f62d.png create mode 100644 emojis/1f62e.png create mode 100644 emojis/1f62f.png create mode 100644 emojis/1f630.png create mode 100644 emojis/1f631.png create mode 100644 emojis/1f632.png create mode 100644 emojis/1f633.png create mode 100644 emojis/1f634.png create mode 100644 emojis/1f635.png create mode 100644 emojis/1f636.png create mode 100644 emojis/1f637.png create mode 100644 emojis/1f638.png create mode 100644 emojis/1f639.png create mode 100644 emojis/1f63a.png create mode 100644 emojis/1f63b.png create mode 100644 emojis/1f63c.png create mode 100644 emojis/1f63d.png create mode 100644 emojis/1f63e.png create mode 100644 emojis/1f63f.png create mode 100644 emojis/1f640.png create mode 100644 emojis/1f641.png create mode 100644 emojis/1f642.png create mode 100644 emojis/1f643.png create mode 100644 emojis/1f644.png create mode 100644 emojis/1f645.png create mode 100644 emojis/1f646.png create mode 100644 emojis/1f647.png create mode 100644 emojis/1f648.png create mode 100644 emojis/1f649.png create mode 100644 emojis/1f64a.png create mode 100644 emojis/1f64b.png create mode 100644 emojis/1f64c.png create mode 100644 emojis/1f64d.png create mode 100644 emojis/1f64e.png create mode 100644 emojis/1f64f.png create mode 100644 emojis/1f680.png create mode 100644 emojis/1f681.png create mode 100644 emojis/1f682.png create mode 100644 emojis/1f683.png create mode 100644 emojis/1f684.png create mode 100644 emojis/1f685.png create mode 100644 emojis/1f686.png create mode 100644 emojis/1f687.png create mode 100644 emojis/1f688.png create mode 100644 emojis/1f689.png create mode 100644 emojis/1f68a.png create mode 100644 emojis/1f68b.png create mode 100644 emojis/1f68c.png create mode 100644 emojis/1f68d.png create mode 100644 emojis/1f68e.png create mode 100644 emojis/1f68f.png create mode 100644 emojis/1f690.png create mode 100644 emojis/1f691.png create mode 100644 emojis/1f692.png create mode 100644 emojis/1f693.png create mode 100644 emojis/1f694.png create mode 100644 emojis/1f695.png create mode 100644 emojis/1f696.png create mode 100644 emojis/1f697.png create mode 100644 emojis/1f698.png create mode 100644 emojis/1f699.png create mode 100644 emojis/1f69a.png create mode 100644 emojis/1f69b.png create mode 100644 emojis/1f69c.png create mode 100644 emojis/1f69d.png create mode 100644 emojis/1f69e.png create mode 100644 emojis/1f69f.png create mode 100644 emojis/1f6a0.png create mode 100644 emojis/1f6a1.png create mode 100644 emojis/1f6a2.png create mode 100644 emojis/1f6a3.png create mode 100644 emojis/1f6a4.png create mode 100644 emojis/1f6a5.png create mode 100644 emojis/1f6a6.png create mode 100644 emojis/1f6a7.png create mode 100644 emojis/1f6a8.png create mode 100644 emojis/1f6a9.png create mode 100644 emojis/1f6aa.png create mode 100644 emojis/1f6ab.png create mode 100644 emojis/1f6ac.png create mode 100644 emojis/1f6ad.png create mode 100644 emojis/1f6ae.png create mode 100644 emojis/1f6af.png create mode 100644 emojis/1f6b0.png create mode 100644 emojis/1f6b1.png create mode 100644 emojis/1f6b2.png create mode 100644 emojis/1f6b3.png create mode 100644 emojis/1f6b4.png create mode 100644 emojis/1f6b5.png create mode 100644 emojis/1f6b6.png create mode 100644 emojis/1f6b7.png create mode 100644 emojis/1f6b8.png create mode 100644 emojis/1f6b9.png create mode 100644 emojis/1f6ba.png create mode 100644 emojis/1f6bb.png create mode 100644 emojis/1f6bc.png create mode 100644 emojis/1f6bd.png create mode 100644 emojis/1f6be.png create mode 100644 emojis/1f6bf.png create mode 100644 emojis/1f6c0.png create mode 100644 emojis/1f6c1.png create mode 100644 emojis/1f6c2.png create mode 100644 emojis/1f6c3.png create mode 100644 emojis/1f6c4.png create mode 100644 emojis/1f6c5.png create mode 100644 emojis/1f6cb.png create mode 100644 emojis/1f6cc.png create mode 100644 emojis/1f6cd.png create mode 100644 emojis/1f6ce.png create mode 100644 emojis/1f6cf.png create mode 100644 emojis/1f6d0.png create mode 100644 emojis/1f6e0.png create mode 100644 emojis/1f6e1.png create mode 100644 emojis/1f6e2.png create mode 100644 emojis/1f6e3.png create mode 100644 emojis/1f6e4.png create mode 100644 emojis/1f6e5.png create mode 100644 emojis/1f6e9.png create mode 100644 emojis/1f6eb.png create mode 100644 emojis/1f6ec.png create mode 100644 emojis/1f6f0.png create mode 100644 emojis/1f6f3.png create mode 100644 emojis/1f910.png create mode 100644 emojis/1f911.png create mode 100644 emojis/1f912.png create mode 100644 emojis/1f913.png create mode 100644 emojis/1f914.png create mode 100644 emojis/1f915.png create mode 100644 emojis/1f916.png create mode 100644 emojis/1f917.png create mode 100644 emojis/1f918.png create mode 100644 emojis/1f980.png create mode 100644 emojis/1f981.png create mode 100644 emojis/1f982.png create mode 100644 emojis/1f983.png create mode 100644 emojis/1f984.png create mode 100644 emojis/1f9c0.png create mode 100644 emojis/203c.png create mode 100644 emojis/2049.png create mode 100644 emojis/2139.png create mode 100644 emojis/2194.png create mode 100644 emojis/2195.png create mode 100644 emojis/2196.png create mode 100644 emojis/2197.png create mode 100644 emojis/2198.png create mode 100644 emojis/2199.png create mode 100644 emojis/21a9.png create mode 100644 emojis/21aa.png create mode 100644 emojis/231a.png create mode 100644 emojis/231b.png create mode 100644 emojis/2328.png create mode 100644 emojis/23e9.png create mode 100644 emojis/23ea.png create mode 100644 emojis/23eb.png create mode 100644 emojis/23ec.png create mode 100644 emojis/23ed.png create mode 100644 emojis/23ee.png create mode 100644 emojis/23ef.png create mode 100644 emojis/23f0.png create mode 100644 emojis/23f1.png create mode 100644 emojis/23f2.png create mode 100644 emojis/23f3.png create mode 100644 emojis/23f8.png create mode 100644 emojis/23f9.png create mode 100644 emojis/23fa.png create mode 100644 emojis/24c2.png create mode 100644 emojis/25aa.png create mode 100644 emojis/25ab.png create mode 100644 emojis/25b6.png create mode 100644 emojis/25c0.png create mode 100644 emojis/25fb.png create mode 100644 emojis/25fc.png create mode 100644 emojis/25fd.png create mode 100644 emojis/25fe.png create mode 100644 emojis/2600.png create mode 100644 emojis/2601.png create mode 100644 emojis/2602.png create mode 100644 emojis/2603.png create mode 100644 emojis/2604.png create mode 100644 emojis/260e.png create mode 100644 emojis/2611.png create mode 100644 emojis/2614.png create mode 100644 emojis/2615.png create mode 100644 emojis/2618.png create mode 100644 emojis/261d.png create mode 100644 emojis/2620.png create mode 100644 emojis/2622.png create mode 100644 emojis/2623.png create mode 100644 emojis/2626.png create mode 100644 emojis/262a.png create mode 100644 emojis/262e.png create mode 100644 emojis/262f.png create mode 100644 emojis/2638.png create mode 100644 emojis/2639.png create mode 100644 emojis/263a.png create mode 100644 emojis/2648.png create mode 100644 emojis/2649.png create mode 100644 emojis/264a.png create mode 100644 emojis/264b.png create mode 100644 emojis/264c.png create mode 100644 emojis/264d.png create mode 100644 emojis/264e.png create mode 100644 emojis/264f.png create mode 100644 emojis/2650.png create mode 100644 emojis/2651.png create mode 100644 emojis/2652.png create mode 100644 emojis/2653.png create mode 100644 emojis/2660.png create mode 100644 emojis/2663.png create mode 100644 emojis/2665.png create mode 100644 emojis/2666.png create mode 100644 emojis/2668.png create mode 100644 emojis/267b.png create mode 100644 emojis/267f.png create mode 100644 emojis/2692.png create mode 100644 emojis/2693.png create mode 100644 emojis/2694.png create mode 100644 emojis/2696.png create mode 100644 emojis/2697.png create mode 100644 emojis/2699.png create mode 100644 emojis/269b.png create mode 100644 emojis/269c.png create mode 100644 emojis/26a0.png create mode 100644 emojis/26a1.png create mode 100644 emojis/26aa.png create mode 100644 emojis/26ab.png create mode 100644 emojis/26b0.png create mode 100644 emojis/26b1.png create mode 100644 emojis/26bd.png create mode 100644 emojis/26be.png create mode 100644 emojis/26c4.png create mode 100644 emojis/26c5.png create mode 100644 emojis/26c8.png create mode 100644 emojis/26ce.png create mode 100644 emojis/26cf.png create mode 100644 emojis/26d1.png create mode 100644 emojis/26d3.png create mode 100644 emojis/26d4.png create mode 100644 emojis/26e9.png create mode 100644 emojis/26ea.png create mode 100644 emojis/26f0.png create mode 100644 emojis/26f1.png create mode 100644 emojis/26f2.png create mode 100644 emojis/26f3.png create mode 100644 emojis/26f4.png create mode 100644 emojis/26f5.png create mode 100644 emojis/26f7.png create mode 100644 emojis/26f8.png create mode 100644 emojis/26f9.png create mode 100644 emojis/26fa.png create mode 100644 emojis/26fd.png create mode 100644 emojis/2702.png create mode 100644 emojis/2705.png create mode 100644 emojis/2708.png create mode 100644 emojis/2709.png create mode 100644 emojis/270a.png create mode 100644 emojis/270b.png create mode 100644 emojis/270c.png create mode 100644 emojis/270d.png create mode 100644 emojis/270f.png create mode 100644 emojis/2712.png create mode 100644 emojis/2714.png create mode 100644 emojis/2716.png create mode 100644 emojis/271d.png create mode 100644 emojis/2721.png create mode 100644 emojis/2728.png create mode 100644 emojis/2733.png create mode 100644 emojis/2734.png create mode 100644 emojis/2744.png create mode 100644 emojis/2747.png create mode 100644 emojis/274c.png create mode 100644 emojis/274e.png create mode 100644 emojis/2753.png create mode 100644 emojis/2754.png create mode 100644 emojis/2755.png create mode 100644 emojis/2757.png create mode 100644 emojis/2763.png create mode 100644 emojis/2764.png create mode 100644 emojis/2795.png create mode 100644 emojis/2796.png create mode 100644 emojis/2797.png create mode 100644 emojis/27a1.png create mode 100644 emojis/27b0.png create mode 100644 emojis/27bf.png create mode 100644 emojis/2934.png create mode 100644 emojis/2935.png create mode 100644 emojis/2b05.png create mode 100644 emojis/2b06.png create mode 100644 emojis/2b07.png create mode 100644 emojis/2b1b.png create mode 100644 emojis/2b1c.png create mode 100644 emojis/2b50.png create mode 100644 emojis/2b55.png create mode 100644 emojis/3030.png create mode 100644 emojis/303d.png create mode 100644 emojis/3297.png create mode 100644 emojis/3299.png create mode 100644 emojis/emojis-data.json create mode 100644 prism-languages.json diff --git a/.bowerrc b/.bowerrc deleted file mode 100644 index 3c5e8c33..00000000 --- a/.bowerrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "directory" : "vendor" -} diff --git a/.travis.yml b/.travis.yml index 13337fbc..bd5967a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,10 +5,8 @@ before_install: - export CHROME_BIN=chromium-browser - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start - - travis_retry npm install -g bower - travis_retry npm install -g gulp install: - travis_retry npm install - - travis_retry bower install before_script: - gulp deploy diff --git a/CHANGELOG.md b/CHANGELOG.md index c3b5456c..0779bfbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 3.1.0 No name yet (no date yet) - Velocity forecasting. Create sprints according to team velocity. +- Remove bower +- Add new wysiwyg editor (emojis, local storage changes, mentions) ## 3.0.0 Stellaria Borealis (2016-10-02) diff --git a/README.md b/README.md index 281aad7d..ba21307d 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ Every code patch accepted in taiga codebase is licensed under [AGPL v3.0](http:/ Please read carefully [our license](https://github.com/taigaio/taiga-front/blob/master/LICENSE) and ask us if you have any questions. +Emoji provided free by [Twemoji](https://github.com/twitter/twemoji) #### Bug reports, enhancements and support #### @@ -125,14 +126,12 @@ sass -v # should return Sass 3.3.8 (Maptastic Maple) Complete process for all OS at: http://sass-lang.com/install -**Node + Bower + Gulp** +**Node + Gulp** We recommend using [nvm](https://github.com/creationix/nvm) to manage different node versions ``` npm install -g gulp -npm install -g bower npm install -bower install gulp ``` @@ -178,4 +177,4 @@ To run a local Selenium Server, you will need to have the Java Development Kit ( ``` protractor conf.e2e.js --suite=auth # To tests authentication protractor conf.e2e.js --suite=full # To test all the platform authenticated - ``` + ``` \ No newline at end of file diff --git a/app/coffee/modules/base/model.coffee b/app/coffee/modules/base/model.coffee index 36f157be..d9951174 100644 --- a/app/coffee/modules/base/model.coffee +++ b/app/coffee/modules/base/model.coffee @@ -39,7 +39,7 @@ class Model instance._modifiedAttrs = _.cloneDeep(@._modifiedAttrs) instance._isModified = _.cloneDeep(@._isModified) - return instance + return instance clone: -> instance = new Model(@._name, @._attrs, @._dataTypes) diff --git a/app/coffee/modules/common.coffee b/app/coffee/modules/common.coffee index 5ab2fa50..64434411 100644 --- a/app/coffee/modules/common.coffee +++ b/app/coffee/modules/common.coffee @@ -390,14 +390,22 @@ Svg = () -> module.directive("tgSvg", [Svg]) -Autofocus = ($timeout) -> +Autofocus = ($timeout, $parse, animationFrame) -> return { restrict: 'A', - link : ($scope, $element) -> - $timeout -> $element[0].focus() + link : ($scope, $element, attrs) -> + if attrs.ngShow + model = $parse(attrs.ngShow) + + $scope.$watch model, (value) -> + if value == true + $timeout () -> $element[0].focus() + + else + $timeout () -> $element[0].focus() } -module.directive('tgAutofocus', ['$timeout', Autofocus]) +module.directive('tgAutofocus', ['$timeout', '$parse', "animationFrame", Autofocus]) module.directive 'tgPreloadImage', () -> spinner = "loading..." diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index 4a020dbc..dfce9ca7 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -496,40 +496,37 @@ DeleteButtonDirective = ($log, $repo, $confirm, $location, $template) -> module.directive("tgDeleteButton", ["$log", "$tgRepo", "$tgConfirm", "$tgLocation", "$tgTemplate", DeleteButtonDirective]) ############################################################################# -## Editable description directive +## Editable subject directive ############################################################################# -EditableDescriptionDirective = ($rootscope, $repo, $confirm, $compile, $loading, $selectedText, $modelTransform, $template, $translate) -> - template = $template.get("common/components/editable-description.html") - noDescriptionMegEditMode = $template.get("common/components/editable-description-msg-edit-mode.html") - noDescriptionMegReadMode = $template.get("common/components/editable-description-msg-read-mode.html") +EditableSubjectDirective = ($rootscope, $repo, $confirm, $loading, $modelTransform, $template) -> + template = $template.get("common/components/editable-subject.html") link = ($scope, $el, $attrs, $model) -> - $el.find('.edit-description').hide() - $el.find('.view-description .edit').hide() $scope.$on "object:updated", () -> - $el.find('.edit-description').hide() - $el.find('.view-description').show() + $el.find('.edit-subject').hide() + $el.find('.view-subject').show() isEditable = -> return $scope.project.my_permissions.indexOf($attrs.requiredPerm) != -1 - save = (description) -> + save = (subject) -> currentLoading = $loading() .target($el.find('.save-container')) .start() transform = $modelTransform.save (item) -> - item.description = description + + item.subject = subject return item - transform.then -> + transform.then => $confirm.notify("success") $rootscope.$broadcast("object:updated") - $el.find('.edit-description').hide() - $el.find('.view-description').show() + $el.find('.edit-subject').hide() + $el.find('.view-subject').show() transform.then null, -> $confirm.notify("error") @@ -537,60 +534,43 @@ EditableDescriptionDirective = ($rootscope, $repo, $confirm, $compile, $loading, transform.finally -> currentLoading.finish() - cancelEdition = () -> - $scope.item.revert() - $el.find('.edit-description').hide() - $el.find('.view-description').show() + return transform - $el.on "mouseup", ".view-description", (event) -> - # We want to dettect the a inside the div so we use the target and - # not the currentTarget - target = angular.element(event.target) + $el.click -> return if not isEditable() - return if target.is('a') - return if $selectedText.get().length - - $el.find('.edit-description').show() - $el.find('.view-description').hide() - $el.find('textarea').focus() - - $el.on "click", "a", (event) -> - target = angular.element(event.target) - href = target.attr('href') - if href.indexOf("#") == 0 - event.preventDefault() - $('body').scrollTop($(href).offset().top) + $el.find('.edit-subject').show() + $el.find('.view-subject').hide() + $el.find('input').focus() $el.on "click", ".save", (e) -> e.preventDefault() - description = $scope.item.description - save(description) + subject = $scope.item.subject + save(subject) - $el.on "keydown", "textarea", (event) -> - return if event.keyCode != 27 + $el.on "keyup", "input", (event) -> + if event.keyCode == 13 + subject = $scope.item.subject + save(subject) + else if event.keyCode == 27 + $scope.$apply () => $model.$modelValue.revert() - $scope.$applyAsync () -> - title = $translate.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_TITLE") - message = $translate.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_MESSAGE") - $confirm.ask(title, null, message).then (askResponse) -> - cancelEdition() - askResponse.finish() + $el.find('.edit-subject').hide() + $el.find('.view-subject').show() + + $el.find('.edit-subject').hide() $scope.$watch $attrs.ngModel, (value) -> return if not value - $scope.item = value - if isEditable() - $el.find('.view-description .edit').show() - $el.find('.view-description .us-content').addClass('editable') - $scope.noDescriptionMsg = $compile(noDescriptionMegEditMode)($scope) - else - $scope.noDescriptionMsg = $compile(noDescriptionMegReadMode)($scope) + + if not isEditable() + $el.find('.view-subject .edit').remove() $scope.$on "$destroy", -> $el.off() + return { link: link restrict: "EA" @@ -598,81 +578,8 @@ EditableDescriptionDirective = ($rootscope, $repo, $confirm, $compile, $loading, template: template } -module.directive("tgEditableDescription", [ - "$rootScope", - "$tgRepo", - "$tgConfirm", - "$compile", - "$tgLoading", - "$selectedText", - "$tgQueueModelTransformation", - "$tgTemplate", - "$translate", - EditableDescriptionDirective]) - - - -EditableWysiwyg = (attachmentsService, attachmentsFullService) -> - link = ($scope, $el, $attrs, $model) -> - - isInEditMode = -> - return $el.find('textarea').is(':visible') and $model.$modelValue.id - - - uploadFile = (file, type) -> - return if !attachmentsService.validate(file) - - return attachmentsFullService.addAttachment($model.$modelValue.project, $model.$modelValue.id, type, file).then (result) -> - if taiga.isImage(result.getIn(['file', 'name'])) - return '![' + result.getIn(['file', 'name']) + '](' + result.getIn(['file', 'url']) + ')' - else - return '[' + result.getIn(['file', 'name']) + '](' + result.getIn(['file', 'url']) + ')' - - $el.on 'dragover', (e) -> - textarea = $el.find('textarea').focus() - - return false - - $el.on 'drop', (e) -> - e.stopPropagation() - e.preventDefault() - - if isInEditMode() - dataTransfer = e.dataTransfer || (e.originalEvent && e.originalEvent.dataTransfer) - - textarea = $el.find('textarea') - - textarea.addClass('in-progress') - - type = $model.$modelValue['_name'] - - if type == "userstories" - type = "us" - else if type == "tasks" - type = "task" - else if type == "issues" - type = "issue" - else if type == "wiki" - type = "wiki_page" - - promises = _.map dataTransfer.files, (file) -> - return uploadFile(file, type) - - Promise.all(promises).then (result) -> - textarea = $el.find('textarea') - - $.markItUp({ replaceWith: result.join(' ') }) - - textarea.removeClass('in-progress') - - return { - link: link - restrict: "EA" - require: "ngModel" - } - -module.directive("tgEditableWysiwyg", ["tgAttachmentsService", "tgAttachmentsFullService", EditableWysiwyg]) - +module.directive("tgEditableSubject", ["$rootScope", "$tgRepo", "$tgConfirm", "$tgLoading", "$tgQueueModelTransformation", + "$tgTemplate", EditableSubjectDirective]) ############################################################################# ## Common list directives diff --git a/app/coffee/modules/common/filters.coffee b/app/coffee/modules/common/filters.coffee index 339e2fa6..6bdffcec 100644 --- a/app/coffee/modules/common/filters.coffee +++ b/app/coffee/modules/common/filters.coffee @@ -75,7 +75,6 @@ sizeFormat = => module.filter("sizeFormat", sizeFormat) - toMutableFilter = -> toMutable = (js) -> return js.toJS() @@ -128,6 +127,15 @@ darkerFilter = -> module.filter("darker", darkerFilter) +markdownToHTML = (wysiwigService) -> + return (input) -> + if input + return wysiwigService.getHTML(input) + + return "" + +module.filter("markdownToHTML", ["tgWysiwygService", markdownToHTML]) + inArray = ($filter) -> return (list, arrayFilter, element) -> if arrayFilter diff --git a/app/coffee/modules/common/loader.coffee b/app/coffee/modules/common/loader.coffee index 80253c91..32eaf16f 100644 --- a/app/coffee/modules/common/loader.coffee +++ b/app/coffee/modules/common/loader.coffee @@ -92,15 +92,16 @@ Loader = ($rootscope) -> return { pageLoaded: pageLoaded + open: () -> open start: (auto=false) -> if !open start() autoClose() if auto onStart: (fn) -> - $rootscope.$on("loader:start", fn) + return $rootscope.$on("loader:start", fn) onEnd: (fn) -> - $rootscope.$on("loader:end", fn) + return $rootscope.$on("loader:end", fn) logRequest: () -> requestCount++ diff --git a/app/coffee/modules/common/wisiwyg.coffee b/app/coffee/modules/common/wisiwyg.coffee deleted file mode 100644 index a889042b..00000000 --- a/app/coffee/modules/common/wisiwyg.coffee +++ /dev/null @@ -1,489 +0,0 @@ -### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -# File: modules/common/wisiwyg.coffee -### - -taiga = @.taiga -bindOnce = @.taiga.bindOnce - -module = angular.module("taigaCommon") - -# How to test lists (-, *, 1.) -# test it with text after & before the list -# + is the cursor position - -# CASE 1 -# - aa+ -# --> enter -# - aa -# - + - -# CASE 1 -# - + -# --> enter - -# + - -# CASE 3 -# - bb+cc -# --> enter -# - bb -# - cc - -# CASE 3 -# +- aa -# --> enter - -# - aa - -############################################################################# -## WYSIWYG markitup editor directive -############################################################################# -MarkitupDirective = ($rootscope, $rs, $selectedText, $template, $compile, $translate, projectService) -> - previewTemplate = $template.get("common/wysiwyg/wysiwyg-markitup-preview.html", true) - - link = ($scope, $el, $attrs, $model) -> - if not $scope.project - # for backward compatibility - $scope.project = projectService.project.toJS() - - element = angular.element($el) - previewDomNode = $("
", {class: "preview"}) - - closePreviewMode = -> - element.parents(".markdown").find(".preview").remove() - element.parents(".markItUp").show() - - $scope.$on "markdown-editor:submit", -> - closePreviewMode() - - cancelablePromise = null - previewInProgress = false - - preview = -> - return if previewInProgress - - previewInProgress = true - - markdownDomNode = element.parents(".markdown") - markItUpDomNode = element.parents(".markItUp") - - $rs.mdrender.render($scope.project.id, $model.$modelValue).then (data) -> - html = previewTemplate({data: data.data}) - html = $compile(html)($scope) - - markdownDomNode.append(html) - markItUpDomNode.hide() - - previewInProgress = false - - markdown = element.closest(".markdown") - - markdown.on "mouseup.preview", ".preview", (event) -> - event.preventDefault() - target = angular.element(event.target) - - if !target.is('a') and $selectedText.get().length - return - - markdown.off(".preview") - closePreviewMode() - - setCaretPosition = (textarea, caretPosition) -> - if textarea.createTextRange - range = textarea.createTextRange() - range.move("character", caretPosition) - range.select() - - else if textarea.selectionStart - textarea.focus() - textarea.setSelectionRange(caretPosition, caretPosition) - - # Calculate the scroll position - totalLines = textarea.value.split("\n").length - line = textarea.value[0..(caretPosition - 1)].split("\n").length - scrollRelation = line / totalLines - $el.scrollTop((scrollRelation * $el[0].scrollHeight) - ($el.height() / 2)) - - addLine = (textarea, nline, replace) -> - lines = textarea.value.split("\n") - - if replace - lines[nline] = replace + lines[nline] - else - lines[nline] = "" - - cursorPosition = 0 - - for line, key in lines - cursorPosition += line.length + 1 || 1 - - break if key == nline - - textarea.value = lines.join("\n") - - #return the new position - if replace - return cursorPosition - lines[nline].length + replace.length - 1 - else - return cursorPosition - - prepareUrlFormatting = (markItUp) -> - regex = /(<<<|>>>)/gi - result = 0 - indices = [] - (indices.push(result.index)) while ( (result = regex.exec(markItUp.textarea.value)) ) - markItUp.donotparse = indices - - urlFormatting = (markItUp) -> - regex = /<<>>/gi - endIndex = 0 - loop - result = regex.exec(markItUp.textarea.value) - break if !result - if result.index not in markItUp.donotparse - endIndex = result.index - break - - value = markItUp.textarea.value - url = value.substring(startIndex, endIndex).replace('<<<', '').replace('>>>', '') - url = url.replace('(', '%28').replace(')', '%29') - url = url.replace('[', '%5B').replace(']', '%5D') - value = value.substring(0, startIndex) + url + value.substring(endIndex+3, value.length) - markItUp.textarea.value = value - markItUp.donotparse = undefined - - markdownTitle = (markItUp, char) -> - heading = "" - n = $.trim(markItUp.selection or markItUp.placeHolder).length - - for i in [0..n-1] - heading += char - - return "\n"+heading+"\n" - - renderMarkItUp = () -> - markdownSettings = - nameSpace: "markdown" - onShiftEnter: {keepDefault:false, openWith:"\n\n"} - onEnter: - keepDefault: false, - replaceWith: () -> - # Allow textcomplete to intercept the enter key if the options list is displayed - # @todo There doesn't seem to be a more graceful way to do this with the textcomplete API. - if not $('.textcomplete-dropdown').is(':visible') - "\n" - afterInsert: (data) -> - lines = data.textarea.value.split("\n") - # Detect if we are in this situation +- aa at the beginning if the textarea - if data.caretPosition > 0 - cursorLine = data.textarea.value[0..(data.caretPosition - 1)].split("\n").length - else - cursorLine = 1 - - 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) - .textcomplete([ - # us, task, and issue autocomplete: #id or # - { - cache: true - match: /(^|\s)#([a-z0-9]+)$/i, - search: (term, callback) -> - term = taiga.slugify(term) - - searchTypes = ['issues', 'tasks', 'userstories', 'epics'] - searchProps = ['ref', 'subject'] - - filter = (item) => - for prop in searchProps - if taiga.slugify(item[prop]).indexOf(term) >= 0 - return true - return false - - cancelablePromise.abort() if cancelablePromise - cancelablePromise = $rs.search.do($scope.project.id, term) - - cancelablePromise.then (res) => - # ignore wikipages if they're the only results. can't exclude them in search - if res.count < 1 or res.count == res.wikipages.length - callback([]) - - else - for type in searchTypes - if res[type] and res[type].length > 0 - callback(res[type].filter(filter), true) - - # must signal end of lists - callback([]) - - replace: (res) -> - return "$1\##{res.ref} " - - template: (res, term) -> - return "\##{res.ref} - #{res.subject}" - } - - # username autocomplete: @username or @ - { - cache: true - match: /(^|\s)@([a-z0-9\-\._]{2,})$/i - search: (term, callback) -> - username = taiga.slugify(term) - searchProps = ['username', 'full_name', 'full_name_display'] - - if $scope.project.members.length < 1 - callback([]) - - else - callback $scope.project.members.filter (user) => - for prop in searchProps - if taiga.slugify(user[prop]).indexOf(username) >= 0 - return true - return false - - replace: (user) -> - return "$1@#{user.username} " - - template: (user) -> - return "#{user.username} - #{user.full_name_display}" - } - - # wiki pages autocomplete: [[slug or [[ - # if the search function was called with the 3rd param the regex - # like the docs claim, we could combine this with the #123 search - { - cache: true - match: /(^|\s)\[\[([a-z0-9\-]+)$/i - search: (term, callback) -> - term = taiga.slugify(term) - - $rs.search.do($scope.project.id, term).then (res) => - if res.count < 1 - callback([]) - - if res.count < 1 or not res.wikipages or res.wikipages.length <= 0 - callback([]) - - else - callback res.wikipages.filter((page) => - return taiga.slugify(page['slug']).indexOf(term) >= 0 - ), true - - # must signal end of lists - callback([]) - - - replace: (res) -> - return "$1[[#{res.slug}]]" - - template: (res, term) -> - return res.slug - } - ], - { - debounce: 200 - } - ) - - renderMarkItUp() - - unbind = $rootscope.$on "$translateChangeEnd", renderMarkItUp - - element.on "keypress", (event) -> - $scope.$apply() - - $scope.$on "$destroy", -> - $el.off() - unbind() - - return {link:link, require:"ngModel"} - -module.directive("tgMarkitup", ["$rootScope", "$tgResources", "$selectedText", "$tgTemplate", "$compile", - "$translate", "tgProjectService", MarkitupDirective]) diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index b75a10e0..6643c9de 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -53,11 +53,13 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) "$tgQueueModelTransformation", "tgErrorHandlingService", "$tgConfig", - "tgProjectService" + "tgProjectService", + "tgWysiwygService" ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, - @log, @appMetaService, @navUrls, @analytics, @translate, @modelTransform, @errorHandlingService, @configService, @projectService) -> + @log, @appMetaService, @navUrls, @analytics, @translate, @modelTransform, + @errorHandlingService, @configService, @projectService, @wysiwigService) -> bindMethods(@) @scope.usRef = @params.usref @@ -89,7 +91,7 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) description = @translate.instant("US.PAGE_DESCRIPTION", { userStoryStatus: @scope.statusById[@scope.us.status]?.name or "--" userStoryPoints: @scope.us.total_points - userStoryDescription: angular.element(@scope.us.description_html or "").text() + userStoryDescription: angular.element(@wysiwigService.getHTML(@scope.us.description) or "").text() userStoryClosedTasks: closedTasks userStoryTotalTasks: totalTasks userStoryProgressPercentage: progressPercentage diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index daee9ada..5eee43b2 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -218,126 +218,82 @@ WikiSummaryDirective = ($log, $template, $compile, $translate, avatarService) -> module.directive("tgWikiSummary", ["$log", "$tgTemplate", "$compile", "$translate", "tgAvatarService", WikiSummaryDirective]) +WikiWysiwyg = ($modelTransform, $rootscope, $confirm, attachmentsFullService, +$qqueue, $repo, $analytics, wikiHistoryService) -> + link = ($scope, $el, $attrs) -> + $scope.editableDescription = false -############################################################################# -## Editable Wiki Content Directive -############################################################################# - -EditableWikiContentDirective = ($window, $document, $repo, $confirm, $loading, $analytics, $qqueue, $translate, - $wikiHistoryService) -> - link = ($scope, $el, $attrs, $model) -> - isEditable = -> - return $scope.project.my_permissions.indexOf("modify_wiki_page") != -1 - - switchToEditMode = -> - $el.find('.edit-wiki-content').show() - $el.find('.view-wiki-content').hide() - $el.find('textarea').focus() - - switchToReadMode = -> - $el.find('.edit-wiki-content').hide() - $el.find('.view-wiki-content').show() - - disableEdition = -> - $el.find(".view-wiki-content .edit").remove() - $el.find(".edit-wiki-content").remove() - - cancelEdition = -> - return if not $model.$modelValue.id - - $model.$modelValue.revert() - switchToReadMode() - - getSelectedText = -> - if $window.getSelection - return $window.getSelection().toString() - else if $document.selection - return $document.selection.createRange().text - return null - - save = $qqueue.bindAdd (wiki) -> + $scope.saveDescription = $qqueue.bindAdd (description, cb) -> onSuccess = (wikiPage) -> - if not wiki.id? + if not $scope.item.id? $analytics.trackEvent("wikipage", "create", "create wiki page", 1) - $model.$setViewValue wikiPage.clone() - - $wikiHistoryService.loadHistoryEntries() + wikiHistoryService.loadHistoryEntries() $confirm.notify("success") - switchToReadMode() onError = -> $confirm.notify("error") - currentLoading = $loading() - .target($el.find('.save')) - .start() + $scope.item.content = description - if wiki.id? - promise = $repo.save(wiki).then(onSuccess, onError) + if $scope.item.id? + promise = $repo.save($scope.item).then(onSuccess, onError) else - promise = $repo.create("wiki", wiki).then(onSuccess, onError) + promise = $repo.create("wiki", $scope.item).then(onSuccess, onError) - promise.finally -> - currentLoading.finish() + promise.finally(cb) - $el.on "click", "a", (event) -> - target = angular.element(event.currentTarget) - href = target.attr('href') + uploadFile = (file, cb) -> + return attachmentsFullService.addAttachment($scope.project.id, $scope.item.id, 'wiki_page', file).then (result) -> + cb(result.getIn(['file', 'name']), result.getIn(['file', 'url'])) - if href.indexOf("#") == 0 - event.preventDefault() - $('body').scrollTop($(href).offset().top) + $scope.uploadFiles = (files, cb) -> + for file in files + uploadFile(file, cb) - $el.on "mousedown", ".view-wiki-content", (event) -> - target = angular.element(event.target) - return if not isEditable() - return if event.button == 2 + $scope.$watch $attrs.model, (value) -> + return if not value + $scope.item = value + $scope.version = value.version + $scope.storageKey = $scope.project.id + "-" + value.id + "-" + $attrs.type - $el.on "mouseup", ".view-wiki-content", (event) -> - target = angular.element(event.target) - return if getSelectedText() - return if not isEditable() - return if target.is('a') - return if target.is('pre') + $scope.$watch 'project', (project) -> + return if !project - switchToEditMode() - - $el.on "click", ".save", debounce 2000, -> - save($scope.wiki) - - $el.on "click", ".cancel", -> - $scope.$apply(cancelEdition) - - $el.on "keydown", "textarea", (event) -> - return if event.keyCode != 27 - $scope.$applyAsync () -> - title = $translate.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_TITLE") - message = $translate.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_MESSAGE") - $confirm.ask(title, null, message).then (askResponse) -> - cancelEdition() - askResponse.finish() - - $scope.$watch $attrs.ngModel, (wikiPage) -> - return if not wikiPage - - if isEditable() - $el.addClass('editable') - if not wikiPage.id? or $.trim(wikiPage.content).length == 0 - switchToEditMode() - else - disableEdition() - - $scope.$on "$destroy", -> - $el.off() + $scope.editableDescription = project.my_permissions.indexOf("modify_wiki_page") != -1 return { - link: link - restrict: "EA" - require: "ngModel" - templateUrl: "wiki/editable-wiki-content.html" + scope: true, + link: link, + template: """ +
+ + + +
+ +
+ {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}} +
+
+ """ } -module.directive("tgEditableWikiContent", ["$window", "$document", "$tgRepo", "$tgConfirm", "$tgLoading", - "$tgAnalytics", "$tgQqueue", "$translate", "tgWikiHistoryService", - EditableWikiContentDirective]) +module.directive("tgWikiWysiwyg", [ + "$tgQueueModelTransformation", + "$rootScope", + "$tgConfirm", + "tgAttachmentsFullService", + "$tgQqueue", "$tgRepo", "$tgAnalytics", "tgWikiHistoryService" + WikiWysiwyg]) diff --git a/app/coffee/utils.coffee b/app/coffee/utils.coffee index a2d02c99..638dc218 100644 --- a/app/coffee/utils.coffee +++ b/app/coffee/utils.coffee @@ -251,6 +251,16 @@ getRandomDefaultColor = () -> getDefaulColorList = () -> return _.clone(DEFAULT_COLOR_LIST) +getMatches = (string, regex, index) -> + index || (index = 1) + matches = [] + match = null + + while match = regex.exec(string) + matches.push(match[index]) + + return matches + taiga = @.taiga taiga.addClass = addClass taiga.nl2br = nl2br @@ -280,3 +290,4 @@ taiga.isPdf = isPdf taiga.patch = patch taiga.getRandomDefaultColor = getRandomDefaultColor taiga.getDefaulColorList = getDefaulColorList +taiga.getMatches = getMatches diff --git a/app/js/medium-mention.js b/app/js/medium-mention.js new file mode 100644 index 00000000..240f6722 --- /dev/null +++ b/app/js/medium-mention.js @@ -0,0 +1,270 @@ +var MentionExtension = MediumEditor.Extension.extend({ + name: 'mediumMention', + init: function() { + this.subscribe('editableKeyup', this.handleKeyup.bind(this)); + this.subscribe('editableKeydown', this.handleKeydown.bind(this)); + this.subscribe('blur', this.cancel.bind(this)); + }, + isEditMode: function() { + return !this.base.origElements.parentNode.classList.contains('read-mode') + }, + cancel: function() { + if (this.isEditMode()) { + this.hidePanel(); + this.reset(); + } + }, + handleKeydown: function(e) { + var code = e.keyCode ? e.keyCode : e.which; + + if (this.mentionPanel && code === MediumEditor.util.keyCode.ENTER) { + e.preventDefault(); + } + }, + handleKeyup: function(e) { + var code = e.keyCode ? e.keyCode : e.which; + var isSpace = code === MediumEditor.util.keyCode.SPACE; + var isBackspace = code === MediumEditor.util.keyCode.BACKSPACE; + + if (this.mentionPanel) { + this.keyDownMentionPanel(e); + } + + var moveKeys = [37, 38, 39, 40]; + + if (moveKeys.indexOf(code) !== -1) { + return; + } + + this.selection = this.document.getSelection(); + + if (isBackspace && this.selection.focusNode.nodeName.toLowerCase() === 'p') { + return; + } + + if (!isSpace && this.selection.rangeCount === 1) { + var endChar = this.selection.getRangeAt(0).startOffset; + var textContent = this.selection.focusNode.textContent; + + this.word = this.getLastWord(textContent); + textContent = textContent.substring(0, endChar); + + if (this.word.length > 1 && ['@', '#', ':'].indexOf(this.word[0]) != -1) { + this.wrap(); + this.showPanel(); + + MediumEditor.selection.select( + this.document, + this.wordNode.firstChild, + this.word.length + ); + + return; + } + } else if (isSpace) { + this.cancelMentionSpace(); + } + + this.hidePanel(); + }, + reset: function() { + this.wordNode = null; + this.word = null; + this.selection = null; + }, + cancelMentionSpace: function() { + if (this.wordNode && this.wordNode.nextSibling) { + var textNode = this.document.createTextNode(''); + textNode.textContent = this.word + '\u00A0'; + + this.wordNode.parentNode.replaceChild(textNode, this.wordNode); + + MediumEditor.selection.select(this.document, textNode, this.word.length + 1); + } + + this.reset(); + }, + wrap: function() { + var range = this.selection.getRangeAt(0).cloneRange(); + + if (range.startContainer.parentNode.nodeName.toLowerCase() === 'a') { + var parentLink = range.startContainer.parentNode.parentNode; + var textNode = this.document.createTextNode(range.startContainer.parentNode.innerText); + + parentLink.replaceChild(textNode, range.startContainer.parentNode); + + this.selection.removeAllRanges(); + + range = document.createRange(); + + range.setStart(textNode, textNode.length); + range.setEnd(textNode, textNode.length); + + this.selection.addRange(range); + } + + if (!range.startContainer.parentNode.classList.contains('mention')) { + this.wordNode = this.document.createElement('span'); + this.wordNode.classList.add('mention'); + + range.setStart(range.startContainer, this.selection.getRangeAt(0).startOffset - this.word.length); + range.surroundContents(this.wordNode); + + this.selection.removeAllRanges(); + this.selection.addRange(range); + + //move cursor to old position + range.setStart(range.startContainer, range.endOffset); + range.setStart(range.endContainer, range.endOffset); + this.selection.removeAllRanges(); + this.selection.addRange(range); + } else { + this.wordNode = range.startContainer.parentNode; + } + }, + refreshPositionPanel: function() { + var bound = this.wordNode.getBoundingClientRect(); + + this.mentionPanel.style.top = this.window.pageYOffset + bound.bottom + 'px'; + this.mentionPanel.style.left = this.window.pageXOffset + bound.left + 'px'; + }, + selectMention: function(item) { + if (item.image) { + var img = document.createElement('img'); + img.src = item.image; + + this.wordNode.parentNode.replaceChild(img, this.wordNode); + this.wordNode = img; + } else { + var link = document.createElement('a'); + + link.setAttribute('href', item.url); + + if (item.ref) { + link.innerText = '#' + item.ref + '-' + item.subject; + } else { + link.innerText = '@' + item.username; + } + + this.wordNode.parentNode.replaceChild(link, this.wordNode); + this.wordNode = link; + } + + var textNode = this.document.createTextNode(''); + textNode.textContent = '\u00A0'; + + this.wordNode.parentNode.insertBefore(textNode, this.wordNode.nextSibling); + MediumEditor.selection.select(this.document, textNode, 1); + + var target = this.base.getFocusedElement(); + + this.base.events.updateInput(target, { + target: target, + currentTarget: target + }); + + this.hidePanel(); + this.reset(); + }, + showPanel: function() { + if(document.querySelectorAll('.medium-editor-mention-panel').length) { + this.refreshPositionPanel(); + this.getItems(this.word, this.renderPanel.bind(this)); + return; + } + + var el = this.document.createElement('div'); + el.classList.add('medium-editor-mention-panel'); + this.mentionPanel = el; + this.getEditorOption('elementsContainer').appendChild(el); + + this.refreshPositionPanel(); + this.getItems(this.word, this.renderPanel.bind(this)); + }, + keyDownMentionPanel: function(e) { + var code = e.keyCode ? e.keyCode : e.which; + var active = this.mentionPanel.querySelector('.active'); + + this.wordNode = document.querySelector('span.mention'); + + if(!active) { + return; + } + + if (code === MediumEditor.util.keyCode.ENTER) { + e.preventDefault(); + e.stopPropagation(); + + var event = document.createEvent('HTMLEvents'); + event.initEvent('click', true, false); + + active.dispatchEvent(event); + + return; + } + + active.classList.remove('active'); + + if (code === 38) { + if(active.previousSibling) { + active.previousSibling.classList.add('active'); + } else { + active.parentNode.lastChild.classList.add('active'); + } + } else if (code === 40) { + if(active.nextSibling) { + active.nextSibling.classList.add('active'); + } else { + active.parentNode.firstChild.classList.add('active'); + } + } + }, + renderPanel: function(items) { + this.mentionPanel.innerHTML = ''; + + if (!items.length) return; + + var ul = this.document.createElement('ul'); + + ul.classList.add('medium-mention'); + + items.forEach(function(it) { + var li = this.document.createElement('li'); + + if (it.image) { + var img = this.document.createElement('img'); + + img.src = it.image; + li.appendChild(img); + + var textNode = document.createTextNode(''); + textNode.textContent = ' ' + it.name; + + li.appendChild(textNode); + + } else if (it.ref) { + li.innerText = '#' + it.ref + ' - ' + it.subject; + } else { + li.innerText = '@' + it.username; + } + + li.addEventListener('click', this.selectMention.bind(this, it)); + + ul.appendChild(li); + }.bind(this)); + + ul.firstChild.classList.add('active'); + + this.mentionPanel.appendChild(ul); + }, + hidePanel: function() { + if (this.mentionPanel) { + this.mentionPanel.parentNode.removeChild(this.mentionPanel); + this.mentionPanel = null; + } + }, + getLastWord: function(text) { + var n = text.split(' '); + return n[n.length - 1].trim(); + } +}); diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 7127c031..9eb45448 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -228,32 +228,7 @@ } }, "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", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Markdown syntax help" diff --git a/app/modules/components/bind-code.directive.coffee b/app/modules/components/bind-code.directive.coffee new file mode 100644 index 00000000..6ac0ebed --- /dev/null +++ b/app/modules/components/bind-code.directive.coffee @@ -0,0 +1,54 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/bind-code.directive.coffee +### + +BindCode = ($sce, $parse, $compile, wysiwygService, wysiwygCodeHightlighterService) -> + return { + restrict: 'A', + compile: (tElement, tAttrs) -> + tgBindCodeGetter = $parse(tAttrs.tgBindCode) + tgBindCodeWatch = $parse tAttrs.tgBindCode, (value) -> + return (value || '').toString() + + $compile.$$addBindingClass(tElement) + + return (scope, element, attr) -> + $compile.$$addBindingInfo(element, attr.tgBindCode); + + scope.$watch tgBindCodeWatch, () -> + html = wysiwygService.getHTML(tgBindCodeGetter(scope)) + + element.html($sce.getTrustedHtml(html) || '') + + wysiwygCodeHightlighterService.addHightlighter(element) + + } + +angular.module("taigaComponents") + .directive("tgBindCode", [ + "$sce", + "$parse", + "$compile", + "tgWysiwygService", + "tgWysiwygCodeHightlighterService", + BindCode]) diff --git a/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee new file mode 100644 index 00000000..2bc170e6 --- /dev/null +++ b/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee @@ -0,0 +1,59 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee +### + +CommentEditWysiwyg = (attachmentsFullService) -> + link = ($scope, $el, $attrs) -> + types = { + userstories: "us", + issues: "issue", + tasks: "task" + } + + uploadFile = (file, cb) -> + return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.comment.comment.id, types[$scope.vm.comment.comment._name], file).then (result) -> + cb(result.getIn(['file', 'name']), result.getIn(['file', 'url'])) + + $scope.uploadFiles = (files, cb) -> + for file in files + uploadFile(file, cb) + + return { + scope: true, + link: link, + template: """ +
+ + +
+ """ + } + +angular.module("taigaComponents") + .directive("tgCommentEditWysiwyg", ["tgAttachmentsFullService", CommentEditWysiwyg]) diff --git a/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee new file mode 100644 index 00000000..c1240a63 --- /dev/null +++ b/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee @@ -0,0 +1,77 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/comment-wysiwyg.directive.coffee +### + +CommentWysiwyg = (attachmentsFullService) -> + link = ($scope, $el, $attrs) -> + $scope.editableDescription = false + + $scope.saveComment = (description, cb) -> + $scope.content = '' + $scope.vm.type.comment = description + $scope.vm.onAddComment({callback: cb}) + + types = { + userstories: "us", + issues: "issue", + tasks: "task" + } + + uploadFile = (file, cb) -> + return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.type.id, types[$scope.vm.type._name], file).then (result) -> + cb(result.getIn(['file', 'name']), result.getIn(['file', 'url'])) + + $scope.onChange = (markdown) -> + $scope.vm.type.comment = markdown + + $scope.uploadFiles = (files, cb) -> + for file in files + uploadFile(file, cb) + + $scope.content = '' + + $scope.$watch "vm.type", (value) -> + return if not value + + $scope.storageKey = "comment-" + value.project + "-" + value.id + "-" + value._name + + return { + scope: true, + link: link, + template: """ +
+ + +
+ """ + } + +angular.module("taigaComponents") + .directive("tgCommentWysiwyg", ["tgAttachmentsFullService", CommentWysiwyg]) diff --git a/app/modules/components/wysiwyg/item-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/item-wysiwyg.directive.coffee new file mode 100644 index 00000000..e4c6baff --- /dev/null +++ b/app/modules/components/wysiwyg/item-wysiwyg.directive.coffee @@ -0,0 +1,100 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/item-wysiwyg.directive.coffee +### + +# Used in details descriptions +ItemWysiwyg = ($modelTransform, $rootscope, $confirm, attachmentsFullService, $translate) -> + link = ($scope, $el, $attrs) -> + $scope.editableDescription = false + + $scope.saveDescription = (description, cb) -> + transform = $modelTransform.save (item) -> + item.description = description + + return item + + transform.then -> + $confirm.notify("success") + $rootscope.$broadcast("object:updated") + + transform.then null, -> + $confirm.notify("error") + + transform.finally(cb) + + uploadFile = (file, cb) -> + return attachmentsFullService.addAttachment($scope.project.id, $scope.item.id, $attrs.type, file).then (result) -> + cb(result.getIn(['file', 'name']), result.getIn(['file', 'url'])) + + $scope.uploadFiles = (files, cb) -> + for file in files + uploadFile(file, cb) + + $scope.$watch $attrs.model, (value) -> + return if not value + $scope.item = value + $scope.version = value.version + $scope.storageKey = $scope.project.id + "-" + value.id + "-" + $attrs.type + + $scope.$watch 'project', (project) -> + return if !project + + $scope.editableDescription = project.my_permissions.indexOf($attrs.requiredPerm) != -1 + + return { + scope: true, + link: link, + template: """ +
+ + + +
+ +
+ {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}} +
+
+ """ + } + +angular.module("taigaComponents") + .directive("tgItemWysiwyg", [ + "$tgQueueModelTransformation", + "$rootScope", + "$tgConfirm", + "tgAttachmentsFullService", + "$translate", + ItemWysiwyg]) diff --git a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee new file mode 100644 index 00000000..b9854a96 --- /dev/null +++ b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee @@ -0,0 +1,180 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee +### + +class WysiwygCodeHightlighterService + constructor: () -> + if !@.languages + @.loadLanguages() + + loadLanguages: () -> + $.getJSON("/#{window._version}/prism/prism-languages.json").then (_languages_) => + @.languages = _.map _languages_, (it) -> + it.url = "/#{window._version}/prism/" + it.file + + return it + + getLanguageInClassList: (classes) -> + lan = _.find @.languages, (it) -> + return !!_.find classes, (className) -> + return 'language-' + it.name == className + + return if lan then lan.name else null + + addCodeLanguageSelectors: (mediumInstance) -> + $(mediumInstance.elements[0]).find('code').each (index, code) => + if !code.classList.contains('has-code-lan-selector') + code.classList.add('has-code-lan-selector') # prevent multi instanciate + + currentLan = @.getLanguageInClassList(code.classList) + + id = new Date().getTime() + + text = document.createTextNode(currentLan || 'text') + + tab = document.createElement('div') + tab.appendChild(text) + tab.addEventListener 'click', () => + @.searchLanguage tab, (lan) => + if lan + tab.innerText = lan + @.updatePositionCodeTab(code.parentElement, tab) + code.classList.add('language-' + lan) + code.classList.add(lan) + + document.body.appendChild(tab) + + code.classList.add(id) + code.dataset.tab = tab + + tab.classList.add('code-language-selector') # styles + tab.classList.add('medium-' + mediumInstance.id) # used to delete + tab.dataset.tabId = id + + @.updatePositionCodeTab(code.parentElement, tab) + + removeCodeLanguageSelectors: (mediumInstance) -> + return if !mediumInstance || !mediumInstance.elements + + $(mediumInstance.elements[0]).find('code').each (index, code) -> + $(code).removeClass('has-code-lan-selector') + + $('.medium-' + mediumInstance.id).remove() + + updatePositionCodeTab: (node, tab) -> + preRects = node.getBoundingClientRect() + + tab.style.top = (preRects.top + $(window).scrollTop()) + 'px' + tab.style.left = (preRects.left + preRects.width - tab.offsetWidth) + 'px' + + getCodeLanHTML: (filter = '') -> + template = _.template(""" + <% _.forEach(lans, function(lan) { %> +
  • <%- lan %>
  • <% }); + %> + """); + + filteresLans = _.map @.languages, (it) -> it.name + + if filter.length + filteresLans = _.filter filteresLans, (it) -> + return it.indexOf(filter) != -1 + + return template({ 'lans': filteresLans }); + + searchLanguage: (tab, cb) -> + search = document.createElement('div') + + search.className = 'code-language-search' + + preRects = tab.getBoundingClientRect() + search.style.top = (preRects.top + $(window).scrollTop() + preRects.height) + 'px' + search.style.left = preRects.left + 'px' + + input = document.createElement('input') + input.setAttribute('type', 'text') + + ul = document.createElement('ul') + + ul.innerHTML = @.getCodeLanHTML() + + search.appendChild(input) + search.appendChild(ul) + + document.body.appendChild(search) + + input.focus() + + close = () -> + search.remove() + $(document.body).off('.leave-search-codelan') + + clickedInSearchBox = (target) -> + return $(search).is(target) || !!$(search).has(target).length + + $(document.body).on 'mouseup.leave-search-codelan', (e) -> + if !clickedInSearchBox(e.target) + cb(null) + close() + + $(input).on 'keyup', (e) => + filter = e.currentTarget.value + ul.innerHTML = @.getCodeLanHTML(filter) + + $(ul).on 'click', 'li', (e) -> + cb(e.currentTarget.innerText) + close() + + loadLanguage: (lan) -> + return new Promise (resolve) -> + if !Prism.languages[lan] + ljs.load("/#{window._version}/prism/prism-#{lan}.min.js", resolve) + else + resolve() + + removeHightlighter: (element) -> + codes = $(element).find('code') + + codes.each (index, code) -> + code.innerHTML = code.innerText + + addHightlighter: (element) -> + codes = $(element).find('code') + + codes.each (index, code) => + lan = @.getLanguageInClassList(code.classList) + + if lan + @.loadLanguage(lan).then () -> Prism.highlightElement(code) + + updateCodeLanguageSelector: (mediumInstance) -> + $('.medium-' + mediumInstance.id).each (index, tab) => + node = $('.' + tab.dataset.tabId) + + if !node.length + tab.remove() + else + @.updatePositionCodeTab(node.parent()[0], tab) + +angular.module("taigaComponents") + .service("tgWysiwygCodeHightlighterService", WysiwygCodeHightlighterService) diff --git a/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee b/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee new file mode 100644 index 00000000..43d6d163 --- /dev/null +++ b/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee @@ -0,0 +1,117 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/wysiwyg-mention.service.coffee +### + +class WysiwygMentionService + @.$inject = [ + "tgProjectService", + "tgWysiwygService", + "$tgNavUrls", + "$tgResources" + ] + + constructor: (@projectService, @wysiwygService, @navurls, @rs) -> + @.cancelablePromise = null + + searchEmoji: (name, cb) -> + filteredEmojis = @wysiwygService.searchEmojiByName(name) + filteredEmojis = filteredEmojis.slice(0, 10) + + cb(filteredEmojis) + + searchUser: (term, cb) -> + searchProps = ['username', 'full_name', 'full_name_display'] + + users = @projectService.project.toJS().members.filter (user) => + for prop in searchProps + if taiga.slugify(user[prop]).indexOf(term) >= 0 + return true + return false + + users = users.slice(0, 10).map (it) => + it.url = @navurls.resolve('user-profile', { + project: @projectService.project.get('slug'), + username: it.username + }) + + return it + + cb(users) + + searchItem: (term) -> + return new Promise (resolve, reject) => + term = taiga.slugify(term) + + searchTypes = ['issues', 'tasks', 'userstories'] + + urls = { + issues: "project-issues-detail", + tasks: "project-tasks-detail", + userstories: "project-userstories-detail" + } + + searchProps = ['ref', 'subject'] + + filter = (item) => + for prop in searchProps + if taiga.slugify(item[prop]).indexOf(term) >= 0 + return true + return false + + @.cancelablePromise.abort() if @.cancelablePromise + + @.cancelablePromise = @rs.search.do(@projectService.project.get('id'), term) + + @.cancelablePromise.then (res) => + # ignore wikipages if they're the only results. can't exclude them in search + if res.count < 1 or res.count == res.wikipages.length + resolve([]) + else + result = [] + for type in searchTypes + if res[type] and res[type].length > 0 + items = res[type].filter(filter) + items = items.map (it) => + it.url = @navurls.resolve(urls[type], { + project: @projectService.project.get('slug'), + ref: it.ref + }) + + return it + + result = result.concat(items) + + resolve(result.slice(0, 10)) + + + search: (mention) -> + return new Promise (resolve) => + if '#'.indexOf(mention[0]) != -1 + @.searchItem(mention.replace('#', '')).then(resolve) + else if '@'.indexOf(mention[0]) != -1 + @.searchUser(mention.replace('@', ''), resolve) + else if ':'.indexOf(mention[0]) != -1 + @.searchEmoji(mention.replace(':', ''), resolve) + + +angular.module("taigaComponents").service("tgWysiwygMentionService", WysiwygMentionService) diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee new file mode 100644 index 00000000..25048c00 --- /dev/null +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -0,0 +1,401 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/wysiwyg.directive.coffee +### + +taiga = @.taiga +bindOnce = @.taiga.bindOnce + +Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoader, wysiwygCodeHightlighterService, wysiwygMentionService, analytics) -> + + isCodeBlockSelected = (range, elm) -> + return !!$(range.endContainer).parentsUntil('.editor', 'code').length + + removeCodeBlockAndHightlight = (range, elm) -> + code = $(range.endContainer).closest('code')[0] + pre = code.parentNode + + p = document.createElement('p') + p.innerText = code.innerText + + pre.parentNode.replaceChild(p, pre) + + wysiwygCodeHightlighterService.removeCodeLanguageSelectors(elm) + + addCodeBlockAndHightlight = (range, elm) -> + pre = document.createElement('pre') + code = document.createElement('code') + + pre.appendChild(code) + code.appendChild(range.extractContents()) + range.insertNode(pre) + + elm.checkContentChanged() + + wysiwygCodeHightlighterService.addCodeLanguageSelectors(elm) + + # MediumEditor extension to add + CodeButton = MediumEditor.extensions.button.extend({ + name: 'code', + init: () -> + this.button = this.document.createElement('button') + this.button.classList.add('medium-editor-action') + this.button.innerHTML = 'Code' + this.button.title = 'Code' + this.on(this.button, 'click', this.handleClick.bind(this)) + + getButton: () -> + return this.button + + tagNames: ['code'] + + handleClick: (event) -> + range = MediumEditor.selection.getSelectionRange(self.document) + + if isCodeBlockSelected(range, this.base) + removeCodeBlockAndHightlight(range, this.base) + else + addCodeBlockAndHightlight(range, this.base) + }) + + # bug + #
    the enter key press doesn't work + oldIsBlockContainer = MediumEditor.util.isBlockContainer + + MediumEditor.util.isBlockContainer = (element) -> + if !element + return oldIsBlockContainer(element) + + if element.tagName + tagName = element.tagName + else + tagName = element.parentNode.tagName + + if tagName.toLowerCase() == 'code' + return true + + return oldIsBlockContainer(element) + + link = ($scope, $el, $attrs) -> + mediumInstance = null + editorMedium = $el.find('.medium') + editorMarkdown = $el.find('.markdown') + + isEditOnly = !!$attrs.$attr.editonly + notPersist = !!$attrs.$attr.notPersist + + $scope.required = !!$attrs.$attr.required + $scope.editMode = isEditOnly || false + $scope.mode = $storage.get('editor-mode', 'html') + + wysiwygService.loadEmojis() + + setHtmlMedium = (markdown) -> + html = wysiwygService.getHTML(markdown) + editorMedium.html(html) + + $scope.setMode = (mode) -> + $storage.set('editor-mode', mode) + + if mode == 'markdown' + updateMarkdownWithCurrentHtml() + else + setHtmlMedium($scope.markdown) + + $scope.mode = mode + mediumInstance.trigger('editableBlur', {}, editorMedium[0]) + + $scope.save = () -> + if $scope.mode == 'html' + updateMarkdownWithCurrentHtml() + + return if $scope.required && !$scope.markdown.length + + $scope.saving = true + $scope.outdated = false + + $scope.onSave({text: $scope.markdown, cb: saveEnd}) + + return + + $scope.cancel = () -> + if !isEditOnly + $scope.editMode = false + + if notPersist + clean() + else if $scope.mode == 'html' + setHtmlMedium($scope.content) + + $scope.markdown = $scope.content + + discardLocalStorage() + mediumInstance.trigger('blur', {}, editorMedium[0]) + $scope.outdated = false + + $scope.onCancel() + + return + + clean = () -> + $scope.markdown = '' + editorMedium.html('') + + refreshExtras = () -> + animationFrame.add () -> + if $scope.mode == 'html' + if $scope.editMode + wysiwygCodeHightlighterService.addCodeLanguageSelectors(mediumInstance) + wysiwygCodeHightlighterService.removeHightlighter(mediumInstance.elements[0]) + else + wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]) + wysiwygCodeHightlighterService.removeCodeLanguageSelectors(mediumInstance) + else + wysiwygCodeHightlighterService.removeHightlighter(mediumInstance.elements[0]) + wysiwygCodeHightlighterService.removeCodeLanguageSelectors(mediumInstance) + + saveEnd = () -> + $scope.saving = false + + if !isEditOnly + $scope.editMode = false + + if notPersist + clean() + + discardLocalStorage() + mediumInstance.trigger('blur', {}, editorMedium[0]) + + analytics.trackEvent('develop', 'save wysiwyg', $scope.mode, 1) + + uploadEnd = (name, url) -> + if taiga.isImage(name) + mediumInstance.pasteHTML("
    ") + else + name = $('
    ').text(name).html() + mediumInstance.pasteHTML("" + name + "
    ") + + isOutdated = () -> + store = $storage.get($scope.storageKey) + + if store && store.version && store.version != $scope.version + return true + + return false + + isDraft = () -> + store = $storage.get($scope.storageKey) + + if store + return true + + return false + + getCurrentContent = () -> + store = $storage.get($scope.storageKey) + + if store + return store.text + + return $scope.content + + discardLocalStorage = () -> + $storage.remove($scope.storageKey) + + cancelWithConfirmation = () -> + if $scope.content == $scope.markdown + $scope.cancel() + + document.activeElement.blur() + document.body.click() + + return null + + title = $translate.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_TITLE") + message = $translate.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_MESSAGE") + + $confirm.ask(title, null, message).then (askResponse) -> + $scope.cancel() + askResponse.finish() + + updateMarkdownWithCurrentHtml = () -> + $scope.markdown = wysiwygService.getMarkdown(editorMedium.html()) + + localSave = (markdown) -> + if $scope.storageKey + store = {} + store.version = $scope.version || 0 + store.text = markdown + $storage.set($scope.storageKey, store) + + change = () -> + if $scope.mode == 'html' + updateMarkdownWithCurrentHtml() + wysiwygCodeHightlighterService.updateCodeLanguageSelector(mediumInstance) + + localSave($scope.markdown) + + $scope.onChange({markdown: $scope.markdown}) + + throttleChange = _.throttle(change, 200) + + create = (text, editMode=false) -> + if text.length + html = wysiwygService.getHTML(text) + editorMedium.html(html) + + mediumInstance = new MediumEditor(editorMedium[0], { + targetBlank: true, + imageDragging: false, + placeholder: { + text: $scope.placeholder + }, + toolbar: { + buttons: [ + 'bold', + 'italic', + 'strikethrough', + 'anchor', + 'image', + 'orderedlist', + 'unorderedlist', + 'h1', + 'h2', + 'h3', + 'quote', + 'removeFormat', + 'code' + ] + }, + extensions: { + code: new CodeButton(), + autolist: new AutoList(), + mediumMention: new MentionExtension({ + getItems: (mention, mentionCb) -> + wysiwygMentionService.search(mention).then(mentionCb) + }) + } + }) + + $scope.changeMarkdown = throttleChange + + mediumInstance.subscribe 'editableInput', (e) -> + $scope.$applyAsync(throttleChange) + + mediumInstance.subscribe "editableClick", (e) -> + e.stopPropagation() + + if e.target.href + window.open(e.target.href) + + mediumInstance.subscribe 'focus', (event) -> + $scope.$applyAsync () -> + if !$scope.editMode + $scope.editMode = true + + mediumInstance.subscribe 'editableDrop', (event) -> + $scope.onUploadFile({files: event.dataTransfer.files, cb: uploadEnd}) + + mediumInstance.subscribe 'editableKeydown', (e) -> + code = if e.keyCode then e.keyCode else e.which + + mention = $('.medium-mention') + + if (code == 40 || code == 38) && mention.length + e.stopPropagation() + e.preventDefault() + + return + + if $scope.editMode && code == 27 + e.stopPropagation() + $scope.$applyAsync(cancelWithConfirmation) + else if code == 27 + editorMedium.blur() + + $scope.editMode = editMode + + $scope.$applyAsync(refreshExtras) + + $scope.$watch () -> + return $scope.mode + ":" + $scope.editMode + , () -> + $scope.$applyAsync(refreshExtras) + + unwatch = $scope.$watch 'content', (content) -> + if !_.isUndefined(content) + $scope.outdated = isOutdated() + + if !mediumInstance && isDraft() + $scope.editMode = true + + if $scope.markdown == content + return + + content = getCurrentContent() + + $scope.markdown = content + + if mediumInstance + mediumInstance.destroy() + + if tgLoader.open() + unwatchLoader = tgLoader.onEnd () -> + create(content, $scope.editMode) + unwatchLoader() + else + create(content, $scope.editMode) + + unwatch() + + $scope.$on "$destroy", () -> + if mediumInstance + wysiwygCodeHightlighterService.removeCodeLanguageSelectors(mediumInstance) + mediumInstance.destroy() + + return { + templateUrl: "common/components/wysiwyg-toolbar.html", + scope: { + placeholder: '@', + version: '<', + storageKey: '<', + content: '<', + onCancel: '&', + onSave: '&', + onUploadFile: '&', + onChange: '&' + }, + link: link + } + +angular.module("taigaComponents").directive("tgWysiwyg", [ + "$translate", + "$tgConfirm", + "$tgStorage", + "tgWysiwygService", + "animationFrame", + "tgLoader", + "tgWysiwygCodeHightlighterService", + "tgWysiwygMentionService", + "$tgAnalytics", + Medium +]) diff --git a/app/styles/components/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss similarity index 54% rename from app/styles/components/wysiwyg.scss rename to app/modules/components/wysiwyg/wysiwyg.scss index dbf1220d..2f10c1bc 100644 --- a/app/styles/components/wysiwyg.scss +++ b/app/modules/components/wysiwyg/wysiwyg.scss @@ -1,6 +1,5 @@ .wysiwyg { line-height: 1.4rem; - margin-bottom: 2rem; overflow: auto; padding: 1rem; h1 { @@ -37,7 +36,7 @@ ol { line-height: 1.5; list-style-position: outside; - margin-bottom: 0; + margin-bottom: 1rem; margin-top: 0; padding-left: 2em; ul, @@ -48,6 +47,15 @@ ul { list-style-type: disc; } + .list-stye-none { + list-style: none; + } + b { + font-weight: bold; + } + i { + font-style: italic; + } dl { dt { font-size: 1em; @@ -63,6 +71,7 @@ } a { color: $primary; + cursor: pointer; &:hover { color: $primary-light; } @@ -134,3 +143,113 @@ border: 1px solid $whitish; } } + +.medium-editor-mention-panel { + background-color: $white; + border: 1px solid $gray-light; + position: absolute; + ul { + margin-bottom: 0; + } + li { + border-top: 1px solid $gray-light; + cursor: pointer; + padding: 2px 5px; + &:first-child { + border-top: 0; + } + &:hover, + &.active { + background-color: $primary-dark; + color: $white; + } + } +} + +tg-wysiwyg { + display: flex; + margin-bottom: 2rem; + .outdated { + color: $red; + } + .tools { + padding-left: 1rem; + a { + display: block; + margin-bottom: .5rem; + } + svg { + fill: $gray-light; + } + } + .editor { + width: 100%; + } + .mode-editor { + span { + color: $gray-light; + cursor: pointer; + margin-right: .5rem; + } + } + .medium-editor-placeholder, + .markdown-editor-placeholder { + color: $gray-light; + padding-left: 1rem; + &::after { // overwrite medium css + color: $gray-light; + font-style: normal; + } + } + .markdown:not(.empty) { + p { + margin-bottom: 0; + white-space: pre-wrap; + } + } + .read-mode { + cursor: pointer; + } + .edit-mode { + .markdown, + .medium { + border: 1px solid $gray-light; + } + .medium-editor-element { + min-height: 10rem; + } + } + .mention { + font-weight: bold; + } +} + +.code-language-selector { + @include font-size(xsmall); + background-color: $white; + border: 1px solid $gray-light; + cursor: pointer; + padding: .2rem .5rem 0; + position: absolute; +} + +.code-language-search { + @include font-size(xsmall); + background-color: $white; + border: 1px solid $gray-light; + position: absolute; + ul { + cursor: pointer; + margin-bottom: 0; + max-height: 20vh; + overflow-y: scroll; + } + li { + padding: .2rem .5rem; + } +} + +// Override medium styles +.medium-editor-toolbar li .medium-editor-button-active { + color: $primary-light; +} diff --git a/app/modules/components/wysiwyg/wysiwyg.service.coffee b/app/modules/components/wysiwyg/wysiwyg.service.coffee new file mode 100644 index 00000000..caf2aefb --- /dev/null +++ b/app/modules/components/wysiwyg/wysiwyg.service.coffee @@ -0,0 +1,121 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/wysiwyg.service.coffee +### + +class WysiwygService + constructor: (@wysiwygCodeHightlighterService) -> + + searchEmojiByName: (name) -> + return _.filter @.emojis, (it) -> it.name.indexOf(name) != -1 + + setEmojiImagePath: (emojis) -> + @.emojis = _.map emojis, (it) -> + it.image = "/#{window._version}/emojis/" + it.image + + return it + + loadEmojis: () -> + $.getJSON("/#{window._version}/emojis/emojis-data.json").then(@.setEmojiImagePath.bind(this)) + + getEmojiById: (id) -> + return _.find @.emojis, (it) -> it.id == id + + getEmojiByName: (name) -> + return _.find @.emojis, (it) -> it.name == name + + replaceImgsByEmojiName: (html) -> + emojiIds = taiga.getMatches(html, /emojis\/([^"]+).png"/gi) + + for emojiId in emojiIds + regexImgs = new RegExp(']+\>', 'g') + emoji = @.getEmojiById(emojiId) + html = html.replace(regexImgs, ':' + emoji.name + ':') + + return html + + replaceEmojiNameByImgs: (text) -> + emojiIds = taiga.getMatches(text, /:([^: ]*):/g) + + for emojiId in emojiIds + regexImgs = new RegExp(':' + emojiId + ':', 'g') + emoji = @.getEmojiByName(emojiId) + + if emoji + text = text.replace(regexImgs, '![alt](' + emoji.image + ')') + + return text + + removeTrailingListBr: (text) -> + regex = new RegExp(/
  • (.*?)
    <\/li>/, 'g') + return text.replace(regex, '
  • $1
  • ') + + getMarkdown: (html) -> + # https://github.com/yabwe/medium-editor/issues/543 + cleanIssueConverter = { + filter: ['html', 'body', 'span', 'div'], + replacement: (innerHTML) -> + return innerHTML + } + + codeLanguageConverter = { + filter: (node) => + return node.nodeName == 'PRE' && + node.firstChild && + node.firstChild.nodeName == 'CODE' + replacement: (content, node) => + lan = @wysiwygCodeHightlighterService.getLanguageInClassList(node.firstChild.classList) + lan = '' if !lan + + return '\n\n```' + lan + '\n' + _.trim(node.firstChild.textContent) + '\n```\n\n' + } + + html = html.replace(/ (<\/.*>)/g, "$1") + html = @.replaceImgsByEmojiName(html) + html = @.removeTrailingListBr(html) + + markdown = toMarkdown(html, { + gfm: true, + converters: [cleanIssueConverter, codeLanguageConverter] + }) + + return markdown + + getHTML: (text) -> + return "" if !text || !text.length + + options = { + breaks: true + } + + text = @.replaceEmojiNameByImgs(text) + + md = window.markdownit({ + breaks: true + }) + + result = md.render(text) + + return result + +angular.module("taigaComponents") + .service("tgWysiwygService", ["tgWysiwygCodeHightlighterService", WysiwygService]) diff --git a/app/modules/history/comments/comment.controller.coffee b/app/modules/history/comments/comment.controller.coffee index 531480ef..468b700a 100644 --- a/app/modules/history/comments/comment.controller.coffee +++ b/app/modules/history/comments/comment.controller.coffee @@ -28,7 +28,6 @@ class CommentController constructor: (@currentUserService, @permissionService, @lightboxFactory) -> @.hiddenDeletedComment = true - @.commentContent = angular.copy(@.comment) showDeletedComment: () -> @.hiddenDeletedComment = false @@ -45,6 +44,9 @@ class CommentController @.user = @currentUserService.getUser() return @.user.get('id') == @.comment.user.pk || @permissionService.check('modify_project') + saveComment: (text, cb) -> + @.onEditComment({commentId: @.comment.id, commentData: text, callback: cb}) + displayCommentHistory: () -> @lightboxFactory.create('tg-lb-display-historic', { "class": "lightbox lightbox-display-historic" diff --git a/app/modules/history/comments/comment.jade b/app/modules/history/comments/comment.jade index 447b8bfd..a73549d5 100644 --- a/app/modules/history/comments/comment.jade +++ b/app/modules/history/comments/comment.jade @@ -1,5 +1,3 @@ -include ../../../partials/common/components/wysiwyg.jade - .comment-wrapper(ng-if="!vm.comment.delete_comment_date") img.comment-avatar( tg-avatar="vm.comment.user" @@ -23,38 +21,21 @@ include ../../../partials/common/components/wysiwyg.jade .comment-container .comment-text.wysiwyg( ng-if="!vm.editMode" - ng-bind-html="vm.comment.comment_html" + tg-bind-code="vm.comment.comment" ) .comment-editor( ng-if="vm.editMode" ng-keyup="vm.checkCancelComment($event)" ) - .edit-comment(ng-model="vm.type") - textarea( - ng-model="vm.commentContent.comment" - ) - .save-comment-wrapper - button.button-green.save-comment( - type="button" - title="{{'COMMENTS.EDIT_COMMENT' | translate}}" - translate="COMMENTS.EDIT_COMMENT" - ng-disabled="!vm.commentContent.comment.length || vm.editing == vm.comment.id" - ng-click="vm.onEditComment({commentId: vm.comment.id, commentData: vm.commentContent.comment})" - tg-loading="vm.editing == vm.comment.id" - ) - .comment-options(ng-if="::vm.canEditDeleteComment()") + tg-comment-edit-wysiwyg.edit-comment + + .comment-options(ng-if="vm.canEditDeleteComment() && !vm.editMode") tg-svg.comment-option( svg-icon="icon-edit" svg-title-translate="COMMON.EDIT" ng-click="vm.onEditMode({commentId: vm.comment.id})" ng-if="!vm.editMode" ) - tg-svg.comment-option( - svg-icon="icon-close" - svg-title-translate="COMMON.CANCEL" - ng-click="vm.onEditMode({commentId: vm.comment.id})" - ng-if="vm.editMode" - ) tg-svg.comment-option( svg-icon="icon-trash" svg-title-translate="COMMON.DELETE" @@ -107,5 +88,5 @@ include ../../../partials/common/components/wysiwyg.jade span(translate="COMMENTS.RESTORE") p.deleted-comment-comment( ng-if="!vm.hiddenDeletedComment" - ng-bind-html="vm.comment.comment_html" + tg-bind-code="vm.comment.comment" ) diff --git a/app/modules/history/comments/comment.scss b/app/modules/history/comments/comment.scss index 5aef9e53..7a526108 100644 --- a/app/modules/history/comments/comment.scss +++ b/app/modules/history/comments/comment.scss @@ -1,5 +1,16 @@ .comments { clear: both; + tg-wysiwyg { + margin-top: 1.5rem; + } + .read-mode { + border: 1px solid $gray-light; + height: 55px; + .medium-editor-placeholder, + .markdown-editor-placeholder { + height: 55px; + } + } .add-comment { margin-top: 1rem; textarea { @@ -20,7 +31,6 @@ margin-top: 1rem; padding: .5rem 4rem; } - } .comment { display: block; @@ -143,12 +153,6 @@ .deleted-comment-comment { margin-top: 1rem; } - .comment-editor { - textarea { - height: 5rem; - min-height: 5rem; - } - } } .comment-text { diff --git a/app/modules/history/comments/comments.jade b/app/modules/history/comments/comments.jade index 249863eb..09a27fcd 100644 --- a/app/modules/history/comments/comments.jade +++ b/app/modules/history/comments/comments.jade @@ -1,5 +1,3 @@ -include ../../../partials/common/components/wysiwyg.jade - section.comments .comments-wrapper tg-comment.comment( @@ -15,25 +13,11 @@ section.comments on-edit-mode="vm.onEditMode({commentId: commentId})" on-delete-comment="vm.onDeleteComment({commentId: commentId})" on-restore-deleted-comment="vm.onRestoreDeletedComment({commentId: commentId})" - on-edit-comment="vm.onEditComment({commentId: commentId, commentData: commentData})" + on-edit-comment="vm.onEditComment({commentId: commentId, commentData: commentData, callback: callback})" ) - tg-editable-wysiwyg.add-comment( - ng-model="vm.type" + + tg-comment-wysiwyg( tg-check-permission="{{::vm.canAddCommentPermission}}" - tg-toggle-comment + on-update="updateComment(text)" + type="vm.type" ) - textarea( - ng-attr-placeholder="{{'COMMENTS.TYPE_NEW_COMMENT' | translate}}" - tg-markitup="tg-markitup" - ng-model="vm.type.comment" - ) - +wysihelp - .save-comment-wrapper - button.button-green.save-comment( - type="button" - title="{{'COMMENTS.COMMENT' | translate}}" - translate="COMMENTS.COMMENT" - ng-disabled="!vm.type.comment.length || vm.loading" - ng-click="vm.onAddComment()" - tg-loading="vm.loading" - ) diff --git a/app/modules/history/history-lightbox/history-entry.jade b/app/modules/history/history-lightbox/history-entry.jade index b3c5ca4a..80b7b3e8 100644 --- a/app/modules/history/history-lightbox/history-entry.jade +++ b/app/modules/history/history-lightbox/history-entry.jade @@ -15,5 +15,5 @@ ) .entry-text( ng-class="{'ellipsed': !displayFullEntry && entry.comment.length >= 75, 'blurry': entry.comment.length >= 75 && !displayFullEntry}" - ng-bind-html="entry.comment_html" + ng-bind-html="entry.comment | markdownToHTML" ) diff --git a/app/modules/history/history.controller.coffee b/app/modules/history/history.controller.coffee index d80a5ec0..de452840 100644 --- a/app/modules/history/history.controller.coffee +++ b/app/modules/history/history.controller.coffee @@ -72,7 +72,7 @@ class HistorySectionController @.deleting = commentId return @rs.history.deleteComment(type, objectId, activityId).then => @._loadHistory() - @.deleting = commentId + @.deleting = null editComment: (commentId, comment) -> type = @.name @@ -93,12 +93,10 @@ class HistorySectionController @._loadHistory() @.editing = null - addComment: () -> - type = @.type - @.loading = true + addComment: (cb) -> @repo.save(@.type).then => @._loadHistory() - @.loading = false + cb() onOrderComments: () -> @.reverse = !@.reverse diff --git a/app/modules/history/history.controller.spec.coffee b/app/modules/history/history.controller.spec.coffee index 2a97b2ca..69b70db5 100644 --- a/app/modules/history/history.controller.spec.coffee +++ b/app/modules/history/history.controller.spec.coffee @@ -149,12 +149,16 @@ describe "HistorySection", -> objectId = historyCtrl.id commentId = 7 - promise = mocks.tgResources.history.deleteComment.withArgs(type, objectId, commentId).promise().resolve() + deleteCommentPromise = mocks.tgResources.history.deleteComment.withArgs(type, objectId, commentId).promise() - historyCtrl.deleting = true - historyCtrl.deleteComment(commentId).then () -> + ctrlPromise = historyCtrl.deleteComment(commentId) + expect(historyCtrl.deleting).to.be.equal(7) + + deleteCommentPromise.resolve() + + ctrlPromise.then () -> expect(historyCtrl._loadHistory).have.been.called - expect(historyCtrl.deleting).to.be.equal(7) + expect(historyCtrl.deleting).to.be.null it "edit comment", () -> historyCtrl = controller "HistorySection" @@ -201,13 +205,15 @@ describe "HistorySection", -> historyCtrl.type = "type" type = historyCtrl.type - historyCtrl.loading = true + + cb = sinon.spy() promise = mocks.tgRepo.save.withArgs(type).promise().resolve() - historyCtrl.addComment().then () -> + historyCtrl.addComment(cb).then () -> expect(historyCtrl._loadHistory).has.been.called - expect(historyCtrl.loading).to.be.false + expect(cb).to.have.been.called + it "order comments", () -> historyCtrl = controller "HistorySection" diff --git a/app/modules/history/history.jade b/app/modules/history/history.jade index eaa9af8d..12ef2b08 100644 --- a/app/modules/history/history.jade +++ b/app/modules/history/history.jade @@ -18,8 +18,8 @@ section.history( on-delete-comment="vm.deleteComment(commentId)" on-restore-deleted-comment="vm.restoreDeletedComment(commentId)" on-edit-mode="vm.toggleEditMode(commentId)" - on-add-comment="vm.addComment()" - on-edit-comment="vm.editComment(commentId, commentData)" + on-add-comment="vm.addComment(callback)" + on-edit-comment="vm.editComment(commentId, commentData, callback)" edit-mode="vm.editMode" object="{{vm.id}}" diff --git a/app/partials/common/components/editable-description.jade b/app/partials/common/components/editable-description.jade deleted file mode 100644 index f5b9f095..00000000 --- a/app/partials/common/components/editable-description.jade +++ /dev/null @@ -1,15 +0,0 @@ -include wysiwyg.jade - -.view-description - section.us-content.wysiwyg(tg-bind-html="item.description_html || noDescriptionMsg") - tg-svg.edit(svg-icon="icon-edit") - -.edit-description - textarea(ng-attr-placeholder="{{'COMMON.DESCRIPTION.EMPTY' | translate}}", ng-model="item.description", tg-markitup="tg-markitup") - +wysihelp - div.save-container - span.save - tg-svg( - svg-icon="icon-save", - svg-title-translate="COMMON.SAVE" - ) diff --git a/app/partials/common/components/wysiwyg-toolbar.jade b/app/partials/common/components/wysiwyg-toolbar.jade new file mode 100644 index 00000000..af77eedd --- /dev/null +++ b/app/partials/common/components/wysiwyg-toolbar.jade @@ -0,0 +1,58 @@ +.editor(ng-class="{'edit-mode': editMode, 'read-mode': !editMode}") + div(ng-if="outdated") + p.outdated {{'COMMON.WYSIWYG.OUTDATED' | translate}} + + .medium.wysiwyg( + type="text", + ng-show="mode == 'html'" + ) + + textarea.markdown.e2e-markdown-textarea( + placeholder="{{placeholder}}" + ng-change="changeMarkdown()" + ng-model="markdown" + ng-show="mode == 'markdown' && editMode" + ) + + .markdown( + ng-class="{empty: !markdown.length}" + ng-click="editMode = true" + ng-show="mode == 'markdown' && !editMode" + ) + p(ng-if="markdown.length") {{markdown}} + p.markdown-editor-placeholder.wysiwyg(ng-if="!markdown.length") {{placeholder}} + + .mode-editor(ng-if="editMode") + span.e2e-markdown-mode( + ng-if="mode=='html'" + ng-click="setMode('markdown')" + ) Markdown Mode + + span.e2e-html-mode( + ng-if="mode=='markdown'" + ng-click="setMode('html')" + ) HTML Mode + + a.help-markdown( + ng-if="mode=='markdown'" + href="https://tree.taiga.io/support/misc/taiga-markdown-syntax/" + target="_blank" + title="{{'COMMON.WYSIWYG.MARKDOWN_HELP' | translate}}" + ) + tg-svg(svg-icon="icon-question") + span(translate="COMMON.WYSIWYG.MARKDOWN_HELP") + +.tools(ng-if="editMode") + a.e2e-save-editor( + ng-class="{disabled: required && !markdown.length}" + tg-loading="saving" + href="#", + ng-click="save()" + ) + tg-svg(svg-icon="icon-save") + a.e2e-cancel-editor( + href="#", + ng-click="cancel()" + title="{{ 'COMMON.CANCEL' | translate }}" + ) + tg-svg(svg-icon="icon-close") diff --git a/app/partials/common/components/wysiwyg.jade b/app/partials/common/components/wysiwyg.jade deleted file mode 100644 index f68d4467..00000000 --- a/app/partials/common/components/wysiwyg.jade +++ /dev/null @@ -1,11 +0,0 @@ -mixin wysihelp - .wysiwyg-help - span.drag-drop-help(ng-if="wiki.id", translate="COMMON.WYSIWYG.ATTACH_FILE_HELP") - span.drag-drop-help(ng-if="!wiki.id", translate="COMMON.WYSIWYG.ATTACH_FILE_HELP_SAVE_FIRST") - a.help-markdown( - href="https://tree.taiga.io/support/misc/taiga-markdown-syntax/" - target="_blank" - title="{{'COMMON.WYSIWYG.MARKDOWN_HELP' | translate}}" - ) - tg-svg(svg-icon="icon-question") - span(translate="COMMON.WYSIWYG.MARKDOWN_HELP") diff --git a/app/partials/epic/epic-detail.jade b/app/partials/epic/epic-detail.jade index 52bb688c..6f422b05 100644 --- a/app/partials/epic/epic-detail.jade +++ b/app/partials/epic/epic-detail.jade @@ -41,12 +41,12 @@ div.wrapper( ) tg-created-by-display.ticket-created-by(ng-model="epic") - section.duty-content( - tg-editable-description - tg-editable-wysiwyg - ng-model="epic" - required-perm="modify_epic" - ) + section.duty-content + tg-item-wysiwyg( + type="epic", + model="epic", + required-perm="modify_epic" + ) // Custom Fields tg-custom-attributes-values( diff --git a/app/partials/issue/issues-detail.jade b/app/partials/issue/issues-detail.jade index e85c9a3d..91a01ef1 100644 --- a/app/partials/issue/issues-detail.jade +++ b/app/partials/issue/issues-detail.jade @@ -33,13 +33,13 @@ div.wrapper( permissions="modify_issue" ) tg-created-by-display.ticket-created-by(ng-model="issue") - - section.duty-content( - tg-editable-description - tg-editable-wysiwyg - ng-model="issue" - required-perm="modify_issue" - ) + + section.duty-content + tg-item-wysiwyg( + type="issue", + model="issue", + required-perm="modify_issue" + ) // Custom Fields tg-custom-attributes-values( diff --git a/app/partials/task/task-detail.jade b/app/partials/task/task-detail.jade index 2a331a5b..3928cc08 100644 --- a/app/partials/task/task-detail.jade +++ b/app/partials/task/task-detail.jade @@ -43,7 +43,12 @@ div.wrapper( ) tg-created-by-display.ticket-created-by(ng-model="task") - section.duty-content(tg-editable-description, tg-editable-wysiwyg, ng-model="task", required-perm="modify_task") + section.duty-content + tg-item-wysiwyg( + type="task", + model="task", + required-perm="modify_task" + ) // Custom Fields tg-custom-attributes-values( diff --git a/app/partials/us/us-detail.jade b/app/partials/us/us-detail.jade index 6c04fb9f..be89305b 100644 --- a/app/partials/us/us-detail.jade +++ b/app/partials/us/us-detail.jade @@ -43,7 +43,12 @@ div.wrapper( ) tg-created-by-display.ticket-created-by(ng-model="us") - section.duty-content(tg-editable-description, tg-editable-wysiwyg, ng-model="us", required-perm="modify_us") + section.duty-content + tg-item-wysiwyg( + type="us", + model="us", + required-perm="modify_us" + ) // Custom Fields tg-custom-attributes-values( diff --git a/app/partials/wiki/editable-wiki-content.jade b/app/partials/wiki/editable-wiki-content.jade deleted file mode 100644 index 4f27d874..00000000 --- a/app/partials/wiki/editable-wiki-content.jade +++ /dev/null @@ -1,29 +0,0 @@ -include ../common/components/wysiwyg.jade - -.view-wiki-content - section.wysiwyg(tg-bind-html='wiki.html') - a.edit( - href="" - title="{{'COMMON.EDIT' | translate}}" - ) - tg-svg(svg-icon="icon-edit") - -.edit-wiki-content(style='display: none;') - textarea( - ng-attr-placeholder="{{'WIKI.PLACEHOLDER_PAGE' | translate}}", - ng-model='wiki.content' - tg-markitup='tg-markitup' - ) - +wysihelp - - span.action-container - a.save( - title="{{'COMMON.SAVE' | translate}}" - href="" - ) - tg-svg(svg-icon="icon-save") - a.cancel( - title="{{'COMMON.CANCEL' | translate}}" - href="" - ) - tg-svg(svg-icon="icon-close") diff --git a/app/partials/wiki/wiki.jade b/app/partials/wiki/wiki.jade index cde221a6..50a37af7 100644 --- a/app/partials/wiki/wiki.jade +++ b/app/partials/wiki/wiki.jade @@ -17,11 +17,8 @@ div.wrapper( span.green(translate="PROJECT.SECTION.WIKI") h2.wiki-title(ng-bind='wikiTitle') - section.wiki-content( - tg-editable-wysiwyg, - tg-editable-wiki-content, - ng-model="wiki" - ) + + tg-wiki-wysiwyg(model="wiki") .summary.wiki-summary( tg-wiki-summary diff --git a/app/styles/components/markitup.scss b/app/styles/components/markitup.scss deleted file mode 100644 index 59dc99a2..00000000 --- a/app/styles/components/markitup.scss +++ /dev/null @@ -1,42 +0,0 @@ -.markItUpHeader { - ul { - background: $mass-white; - padding: .3rem; - li { - display: inline-block; - float: none; - a { - opacity: .8; - &:hover { - opacity: .3; - transition: opacity .2s linear; - } - } - } - .preview-icon { - position: absolute; - right: 4rem; - } - } -} - -.markItUpContainer { - padding: 0; -} - -.markdown { - position: relative; -} - -.preview { - .actions { - background: $mass-white; - margin-top: .5rem; - min-height: 2rem; - padding: .3rem; - } - .content { - background: $white; - margin-bottom: 0; - } -} diff --git a/app/styles/extras/dependencies.scss b/app/styles/extras/dependencies.scss index 2d94ceff..7203c465 100644 --- a/app/styles/extras/dependencies.scss +++ b/app/styles/extras/dependencies.scss @@ -1,5 +1,5 @@ // Bourbon -@import '../../../vendor/bourbon/app/assets/stylesheets/bourbon'; +@import '../../../node_modules/bourbon/core/bourbon'; //################################################# // dependencies @@ -22,3 +22,13 @@ @import '../dependencies/mixins/svg'; @import '../dependencies/mixins/track-buttons'; @import '../dependencies/mixins/empty-color'; + +//deprecated +@mixin placeholder { + $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input"; + @each $placeholder in $placeholders { + &:#{$placeholder}-placeholder { + @content; + } + } +} diff --git a/app/styles/layout/wiki.scss b/app/styles/layout/wiki.scss index 3930ca41..e1b26a37 100644 --- a/app/styles/layout/wiki.scss +++ b/app/styles/layout/wiki.scss @@ -10,73 +10,3 @@ padding: 1rem; } } - -.wiki-content { - @include font-size(large); - position: relative; - &.editable { - &:hover { - .wysiwyg { - background: $mass-white; - cursor: pointer; - } - } - } - .view-wiki-content { - &:hover { - .edit { - opacity: 1; - top: -1.5rem; - transition: all .2s linear; - } - } - } - .edit { - @include svg-size(2rem); - background: $mass-white; - left: 0; - opacity: 0; - padding: .2rem .5rem; - position: absolute; - top: 0; - transition: all .2s linear; - &:hover { - cursor: pointer; - } - } - .preview { - padding-top: 1.8rem; - } -} - -.edit-wiki-content { - a { - display: inline-block; - margin-right: .5rem; - &:last-child { - margin: 0; - } - &:hover { - cursor: pointer; - .icon { - fill: $primary-dark; - opacity: .3; - transition: all .2s linear; - } - } - } - .preview-icon { - position: absolute; - right: 3.5rem; - } - .action-container { - position: absolute; - right: 1rem; - top: .3rem; - } - .edit { - position: absolute; - right: 3.5rem; - top: .4rem; - } -} diff --git a/app/styles/vendor/markitup.css b/app/styles/vendor/markitup.css deleted file mode 100644 index 93a8a345..00000000 --- a/app/styles/vendor/markitup.css +++ /dev/null @@ -1,175 +0,0 @@ -/* ------------------------------------------------------------------- -// markItUp! -// By Jay Salvat - http://markitup.jaysalvat.com/ -// ------------------------------------------------------------------*/ -.markItUp .markItUpButton1 a { - background-image:url("../images/markitup/h1.png"); -} - -.markItUp .markItUpButton2 a { - background-image:url("../images/markitup/h2.png"); -} - -.markItUp .markItUpButton3 a { - background-image:url("../images/markitup/h3.png"); -} - -.markItUp .markItUpButton4 a { - background-image:url("../images/markitup/bold.png"); -} -.markItUp .markItUpButton5 a { - background-image:url("../images/markitup/italic.png"); -} - -.markItUp .markItUpButton6 a { - background-image:url("../images/markitup/stroke.png"); -} - -.markdown .markItUpButton7 a { - background-image:url("../images/markitup/list-bullet.png"); -} -.markdown .markItUpButton8 a { - background-image:url("../images/markitup/list-numeric.png"); -} - -.markdown .markItUpButton9 a { - background-image:url("../images/markitup/picture.png"); -} -.markdown .markItUpButton10 a { - background-image:url("../images/markitup/link.png"); -} - -.markdown .markItUpButton11 a { - background-image:url("../images/markitup/quotes.png"); -} -.markdown .markItUpButton12 a { - background-image:url("../images/markitup/code.png"); -} - -.markdown .preview-icon a { - background-image:url("../images/markitup/preview.png"); -} - -.markdown .help a { - background-image:url("../images/markitup/help.png"); -} - - -/* ------------------------------------------------------------------- -// markItUp! Universal MarkUp Engine, JQuery plugin -// By Jay Salvat - http://markitup.jaysalvat.com/ -// ------------------------------------------------------------------*/ -.markItUp * { - margin:0px; padding:0px; - outline:none; -} -.markItUp a:link, -.markItUp a:visited { - color:#000; - text-decoration:none; -} -.markItUpContainer { - padding:5px 5px 2px 5px; - font:11px Verdana, Arial, Helvetica, sans-serif; -} -.markItUpEditor { - font:12px 'Courier New', Courier, monospace; - padding:5px; - height:320px; - clear:both; - line-height:18px; - overflow:auto; -} -.markItUpPreviewFrame { - overflow:auto; - background-color:#FFF; - width:99.9%; - height:300px; - margin:5px 0; -} -.markItUpFooter { - width:100%; -} -.markItUpResizeHandle { - overflow:hidden; - width:22px; height:5px; - margin-left:auto; - margin-right:auto; - background-image:url(../images/markitup/handle.png); - cursor:n-resize; -} -/***************************************************************************************/ -/* first row of buttons */ -.markItUp .markItUpHeader ul { - margin: 0; -} -.markItUpHeader ul li { - list-style:none; - float:left; - position:relative; - margin: 3px; -} -.markItUpHeader ul li:hover > ul{ - display:block; -} -.markItUpHeader ul .markItUpDropMenu { - background:transparent url(../images/markitup/menu.png) no-repeat 115% 50%; - margin-right:5px; -} -.markItUpHeader ul .markItUpDropMenu li { - margin-right:0px; -} -/* next rows of buttons */ -.markItUpHeader ul ul { - display:none; - position:absolute; - top:18px; left:0px; - background:#FFF; - border:1px solid #000; -} -.markItUpHeader ul ul li { - float:none; - border-bottom:1px solid #000; -} -.markItUpHeader ul ul .markItUpDropMenu { - background:#FFF url(../images/markitup/submenu.png) no-repeat 100% 50%; -} -.markItUpHeader ul .markItUpSeparator { - margin:2px 10px 0 10px; - width:1px; - height:16px; - overflow:hidden; - background-color:#CCC; -} -.markItUpHeader ul ul .markItUpSeparator { - width:auto; height:1px; - margin:0px; -} -/* next rows of buttons */ -.markItUpHeader ul ul ul { - position:absolute; - top:-1px; left:150px; -} -.markItUpHeader ul ul ul li { - float:none; -} -.markItUpHeader ul a { - display:block; - width:16px; height:16px; - text-indent:-10000px; - background-repeat:no-repeat; - padding:3px; - margin:0px; -} -.markItUpHeader ul ul a { - display:block; - padding-left:0px; - text-indent:0; - width:120px; - padding:5px 5px 5px 25px; - background-position:2px 50%; -} -.markItUpHeader ul ul a:hover { - color:#FFF; - background-color:#000; -} diff --git a/bower.json b/bower.json deleted file mode 100644 index 80144e0f..00000000 --- a/bower.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "name": "taiga-layout", - "version": "2.1.0", - "homepage": "https://github.com/taiga.io/taiga-layout", - "authors": [ - { - "name": "Andrey Antukh", - "email": "niwi@niwi.nz" - }, - { - "name": "Jesus Espino Garcia", - "email": "jespinog@gmail.com" - }, - { - "name": "David Barragán Merino", - "email": "dbarragan@dbarragan.com" - }, - { - "name": "Xavi Julian", - "email": "xavier.julian@kaleidos.net" - }, - { - "name": "Alejandro Alonso", - "email": "alejandro.alonso@kaleidos.net" - }, - { - "name": "Anler Hernández", - "email": "hello@anler.me" - }, - { - "name": "Juan Francisco Alcántara", - "email": "juanfran.alcantara@kaleidos.net" - } - ], - "description": "Taiga project management system (frontend)", - "license": "AGPL-3.0", - "repository": { - "type": "git", - "url": "git@github.com:taigaio/taiga-front.git" - }, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "app/vendor", - "test", - "tests" - ], - "dependencies": { - "emoticons": "~0.1.7", - "jquery-flot": "~0.8.2", - "angular": "1.5.5", - "angular-route": "1.5.5", - "angular-animate": "1.5.5", - "angular-aria": "1.5.5", - "angular-sanitize": "1.5.5", - "checksley": "~0.6.0", - "jquery": "~2.2.3", - "markitup-1x": "~1.1.14", - "jquery-textcomplete": "yuku-t/jquery-textcomplete#~0.7", - "flot-axislabels": "markrcote/flot-axislabels", - "flot-orderBars": "emmerich/flot-orderBars", - "flot.tooltip": "~0.8.4", - "moment": "~2.13.0", - "pikaday": "~1.4.0", - "raven-js": "~3.0.0", - "l.js": "~0.1.0", - "angular-translate": "~2.10.0", - "angular-translate-loader-partial": "~2.10.0", - "angular-translate-loader-static-files": "~2.10.0", - "angular-translate-interpolation-messageformat": "~2.10.0", - "ng-infinite-scroll-npm-is-better-than-bower": "^1.3.0", - "immutable": "~3.8.1", - "bluebird": "~3.3.5", - "intro.js": "~2.1.0", - "lodash": "~4.11.2", - "messageformat": "^0.3.1", - "dragula.js": "dragula#^3.6.6", - "bourbon": "^4.2.7" - }, - "resolutions": { - "lodash": "~4.11.2", - "moment": "~2.10.6", - "jquery": "~2.2.3", - "angular": "1.5.5", - "messageformat": "0.3.1", - "angular-translate": "2.10.0" - }, - "private": true -} diff --git a/e2e/helpers/detail-helper.js b/e2e/helpers/detail-helper.js index a315edbb..3051b6fd 100644 --- a/e2e/helpers/detail-helper.js +++ b/e2e/helpers/detail-helper.js @@ -146,24 +146,6 @@ helper.assignedTo = function() { return obj; }; -helper.editComment = function() { - let el = $('.comment-editor'); - let obj = { - el:el, - - updateText: function (text) { - el.$('textarea').sendKeys(text); - }, - - saveComment: async function () { - el.$('.save-comment').click(); - await browser.waitForAngular(); - } - } - return obj; - -}; - helper.history = function() { let el = $('section.history'); let obj = { @@ -179,16 +161,6 @@ helper.history = function() { await browser.waitForAngular(); }, - addComment: async function(comment) { - obj.writeComment(comment); - el.$('.save-comment').click(); - await browser.waitForAngular(); - }, - - writeComment: function(comment) { - el.$('textarea[tg-markitup]').sendKeys(comment); - }, - countComments: async function() { let comments = await el.$$(".comment-wrapper"); return comments.length; @@ -227,6 +199,10 @@ helper.history = function() { await browser.waitForAngular(); }, + getComments: function() { + return $$('tg-comment'); + }, + showVersionsLastComment: async function() { el.$$(".comment-edited a").last().click(); await browser.waitForAngular(); @@ -252,11 +228,11 @@ helper.history = function() { el.$$(".deleted-comment-wrapper .restore-comment").last().click(); await browser.waitForAngular(); } - } + }; return obj; -} +}; helper.block = function() { let el = $('tg-block-button'); diff --git a/e2e/shared/detail.js b/e2e/shared/detail.js index 364813c5..a1240b1e 100644 --- a/e2e/shared/detail.js +++ b/e2e/shared/detail.js @@ -6,6 +6,7 @@ var customFieldsHelper = require('../helpers/custom-fields-helper'); var commonUtil = require('../utils/common'); var lightbox = require('../utils/lightbox'); var notifications = require('../utils/notifications'); +var sharedWysiwyg = require('./wysiwyg').wysiwygTesting; var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -48,49 +49,6 @@ shared.tagsTesting = async function() { expect(newtagsText).to.be.not.eql(tagsText); } -shared.descriptionTesting = function() { - it('confirm close with ESC', async function() { - let descriptionHelper = detailHelper.description(); - - descriptionHelper.enabledEditionMode(); - - browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - - await lightbox.confirm.cancel(); - - let descriptionVisibility = await $('.edit-description').isDisplayed(); - - expect(descriptionVisibility).to.be.true; - - descriptionHelper.focus(); - - browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - - await lightbox.confirm.ok(); - - descriptionVisibility = await $('.edit-description').isDisplayed(); - - expect(descriptionVisibility).to.be.false; - }); - - it('edit', async function() { - let descriptionHelper = detailHelper.description(); - let description = await descriptionHelper.getInnerHtml(); - let date = Date.now(); - descriptionHelper.enabledEditionMode(); - descriptionHelper.setText("New description " + date); - descriptionHelper.save(); - - let newDescription = await descriptionHelper.getInnerHtml(); - let notificationOpen = await notifications.success.open(); - - expect(notificationOpen).to.be.equal.true; - expect(newDescription).to.be.not.equal(description); - - await notifications.success.close(); - }); -} - shared.statusTesting = async function(status1 , status2) { let statusHelper = detailHelper.statusSelector(); @@ -195,68 +153,9 @@ shared.assignedToTesting = function() { shared.historyTesting = async function(screenshotsFolder) { let historyHelper = detailHelper.history(); - - //Adding a comment - historyHelper.selectCommentsTab(); - await utils.common.takeScreenshot(screenshotsFolder, "show comments tab"); - - let commentsCounter = await historyHelper.countComments(); - let date = Date.now(); - - await historyHelper.addComment("New comment " + date); - await utils.common.takeScreenshot(screenshotsFolder, "new coment"); - - let newCommentsCounter = await historyHelper.countComments(); - expect(newCommentsCounter).to.be.equal(commentsCounter+1); - - //Edit last comment - historyHelper.editLastComment(); - let editComment = detailHelper.editComment(); - editComment.updateText("This is the new and updated text"); - editComment.saveComment(); - await utils.common.takeScreenshot(screenshotsFolder, "edit comment"); - - //Show versions from last comment edited - historyHelper.showVersionsLastComment(); - await utils.common.takeScreenshot(screenshotsFolder, "show comment versions"); - - historyHelper.closeVersionsLastComment(); - - //Deleting last comment - let deletedCommentsCounter = await historyHelper.countDeletedComments(); - await historyHelper.deleteLastComment(); - - let newDeletedCommentsCounter = await historyHelper.countDeletedComments(); - expect(newDeletedCommentsCounter).to.be.equal(deletedCommentsCounter+1); - await utils.common.takeScreenshot(screenshotsFolder, "deleted comment"); - - //Restore last comment - deletedCommentsCounter = await historyHelper.countDeletedComments(); - await historyHelper.restoreLastComment(); - newDeletedCommentsCounter = await historyHelper.countDeletedComments(); - expect(newDeletedCommentsCounter).to.be.equal(deletedCommentsCounter-1); - await utils.common.takeScreenshot(screenshotsFolder, "restored comment"); - - //Store comment with a modification - commentsCounter = await historyHelper.countComments(); - - historyHelper.writeComment("New comment " + date); - let title = detailHelper.title(); - title.setTitle('changed'); - await title.save(); - await utils.notifications.success.close(); - - newCommentsCounter = await historyHelper.countComments(); - - expect(newCommentsCounter).to.be.equal(commentsCounter+1); - //Check activity await historyHelper.selectActivityTab(); await utils.common.takeScreenshot(screenshotsFolder, "show activity tab"); - - let activitiesCounter = await historyHelper.countActivities(); - - expect(newCommentsCounter).to.be.least(1); } shared.blockTesting = async function() { diff --git a/e2e/shared/wysiwyg.js b/e2e/shared/wysiwyg.js new file mode 100644 index 00000000..db9c012c --- /dev/null +++ b/e2e/shared/wysiwyg.js @@ -0,0 +1,500 @@ +var chai = require('chai'); +var chaiAsPromised = require('chai-as-promised'); + +var detailHelper = require('../helpers').detail; +var historyHelper = detailHelper.history(); + +var utils = require('../utils'); +var EC = protractor.ExpectedConditions; + +chai.use(chaiAsPromised); +var expect = chai.expect; + +var shared = module.exports; + +function selectEditorFirstChild(elm) { + browser.executeScript(function () { + // select the first paragraph + var range = document.createRange(); + range.selectNode(arguments[0].firstChild); + + var sel = window.getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + }, elm.getWebElement()); + + browser.actions().mouseUp().perform(); // trigger medium events +} + +function resetSelection() { + browser.executeScript(function () { + var sel = window.getSelection(); + sel.removeAllRanges(); + }); + + browser.actions().mouseUp().perform(); // trigger medium events +} + +function getMarkdownText(elm) { + var markdownTextarea = getMarkdownTextarea(elm); + + return markdownTextarea.getAttribute("value"); +} + +function getMarkdownTextarea(elm) { + return elm.$('.e2e-markdown-textarea');} + + +function htmlMode() { + $('.e2e-html-mode').click(); +} + +function markdownMode() { + $('.e2e-markdown-mode').click(); +} + +function saveEdition() { + $('.e2e-save-editor').click(); +} + +function cancelEdition(elm) { + $('.e2e-cancel-editor').click(); + + return browser.wait(async () => { + return !!await elm.$$('.read-mode').count(); + }, 3000); +} + +async function edit(elm, elmWrapper, text = null) { + await browser.wait(EC.elementToBeClickable(elm), 10000); + + elm.click(); + + browser.sleep(200); + + browser.executeScript(function () { + if(arguments[0].firstChild) { + var range = document.createRange(); + range.setStart(arguments[0].firstChild, 0); + range.setEnd(arguments[0].lastChild, 0); + + var sel = window.getSelection(); + sel.removeAllRanges(); + sel.addRange(range); + } + }, elm.getWebElement()); + + if (text !== null) { + await cleanWysiwyg(elm, elmWrapper); + + return elm.sendKeys(text); + } +} + +async function cleanWysiwyg(elm, elmWrapper) { + let isHtmlMode = await elm.isDisplayed(); + + if (isHtmlMode) { + let isPresent = await $('.e2e-markdown-mode').isPresent(); + + markdownMode(); + } + var markdownTextarea = getMarkdownTextarea(elmWrapper); + + await utils.common.clear(markdownTextarea); + + return htmlMode(); +} + +shared.wysiwygTestingComments = function(parentSelector, section) { + var editor; + var editorWrapper; + + beforeEach(() => { + let parent = $(parentSelector); + editor = parent.$('.medium'); + editorWrapper = parent.$('tg-wysiwyg'); + }); + + it('bold, test normal behavior and check markdown', async () => { + let commentsCounter = await historyHelper.countComments(); + + await edit(editor, editorWrapper, "test"); + selectEditorFirstChild(editor); + + $('.medium-editor-toolbar-active .medium-editor-action-bold').click(); + + resetSelection(); + + markdownMode(); + + let markdown = await getMarkdownText(editorWrapper); + + expect(markdown).to.be.equal('**test**'); + + htmlMode(); + + saveEdition(); + + let newCommentsCounter = await historyHelper.countComments(); + expect(newCommentsCounter).to.be.equal(commentsCounter+1); + }); + + it('convert to html', async () => { + let commentsCounter = await historyHelper.countComments(); + + await edit(editor, editorWrapper, ''); + + markdownMode(); + + let markdownTextarea = getMarkdownTextarea(editorWrapper); + + await markdownTextarea.sendKeys('_test2_'); + + htmlMode(); + + let html = await editor.getInnerHtml(); + + expect(html).to.be.eql('

    test2

    \n'); + + saveEdition(); + + let newCommentsCounter = await historyHelper.countComments(); + expect(newCommentsCounter).to.be.equal(commentsCounter+1); + }); + + it('code block', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys("var test = 2;"); + + selectEditorFirstChild(editor); + + $('.medium-editor-toolbar-active .medium-editor-button-last').click(); + + $('.code-language-selector').click(); + $('.code-language-search input').sendKeys('javascript'); + $('.code-language-search li').click(); + + saveEdition(); + + let lastComment = historyHelper.getComments().last(); + + let hasHightlighter = !!await lastComment.$$('.token').count(); + + expect(hasHightlighter).to.be.true; + }); + + it('confirm exit when there is changes', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys('text text text'); + editor.sendKeys(protractor.Key.ESCAPE); + + await utils.lightbox.confirm.ok(); + + let isReadMode = !!await editorWrapper.$$('.read-mode').count(); + + expect(isReadMode).to.be.true; + + let html = await editor.getText(); + + expect(html).not.to.be.eql('text text text'); + }); + + it('keep changes on reload', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys('text text text'); + editor.sendKeys(protractor.Key.ESCAPE); + + browser.sleep(400); + browser.refresh(); + + let isReadMode = !!await editorWrapper.$$('.read-mode').count(); + + expect(isReadMode).to.be.false; + + let html = await editor.getText(); + + expect(html).to.be.eql('text text text'); + + await cancelEdition(editorWrapper); + }); + + it('mention user', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys('@use'); + + $$('.medium-mention li').get(2).click(); + + let html = await editor.getInnerHtml(); + + expect(html).to.be.eql('

    @user8 

    '); + + markdownMode(); + + let markdown = await getMarkdownText(editorWrapper); + + expect(markdown).to.be.equal('[@user8](/profile/user8)'); + + htmlMode(); + + await cancelEdition(editorWrapper); + }); + + it('emojis', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys(':smil'); + + $$('.medium-mention li').get(2).click(); + + let html = await editor.getInnerHtml(); + + expect(html).to.include('1f604.png'); + + markdownMode(); + + let markdown = await getMarkdownText(editorWrapper); + + expect(markdown).to.be.equal(':smile:'); + + htmlMode(); + + await cancelEdition(editorWrapper); + }); + + it('cancel', async () => { + let prevHtml = await editor.getInnerHtml(); + + await edit(editor, editorWrapper, 'xxx yyy zzz'); + + await cancelEdition(editorWrapper); + + let html = await editor.getInnerHtml(); + + expect(html).to.be.equal(prevHtml); + }); + + it('edit comment', async () => { + historyHelper.editLastComment(); + + let editWrapperLast = historyHelper.getComments().last(); + let editLast = editWrapperLast.$('.medium'); + + await edit(editLast, editWrapperLast, "This is the new and updated text"); + await utils.common.takeScreenshot(section, "edit comment"); + + saveEdition(); + + //Show versions from last comment edited + historyHelper.showVersionsLastComment(); + await utils.common.takeScreenshot(section, "show comment versions"); + + historyHelper.closeVersionsLastComment(); + }); + + it('delete last comment', async () => { + let deletedCommentsCounter = await historyHelper.countDeletedComments(); + await historyHelper.deleteLastComment(); + + let newDeletedCommentsCounter = await historyHelper.countDeletedComments(); + + expect(newDeletedCommentsCounter).to.be.equal(deletedCommentsCounter+1); + + await utils.common.takeScreenshot(section, 'deleted comment'); + }); + + it('restore last comment', async () => { + let deletedCommentsCounter = await historyHelper.countDeletedComments(); + + await historyHelper.restoreLastComment(); + + let newDeletedCommentsCounter = await historyHelper.countDeletedComments(); + + expect(newDeletedCommentsCounter).to.be.equal(deletedCommentsCounter-1); + + await utils.common.takeScreenshot(section, 'restored comment'); + }); +}; + +shared.wysiwygTesting = function(parentSelector) { + var editor; + var editorWrapper; + + beforeEach(async () => { + let isReadMode = !!await editorWrapper.$$('.read-mode').count(); + + if (isReadMode) { + editor.click(); + } + + await cleanWysiwyg(editor, editorWrapper); + + markdownMode(); + + var markdownTextarea = getMarkdownTextarea(editorWrapper); + + browser.wait(EC.elementToBeClickable(markdownTextarea), 10000); + + await markdownTextarea.sendKeys('test'); + + htmlMode(); + + saveEdition(); + + await browser.wait(EC.elementToBeClickable(editor), 10000); + }); + + before(() => { + let parent = $(parentSelector); + editor = parent.$('.medium'); + editorWrapper = parent.$('tg-wysiwyg'); + }); + + it('bold, test normal behavior and check markdown', async () => { + await edit(editor, editorWrapper, "test"); + selectEditorFirstChild(editor); + + $('.medium-editor-toolbar-active .medium-editor-action-bold').click(); + + resetSelection(); + + let html = await editor.getInnerHtml(); + + expect(html).to.be.eql('

    test

    '); + + saveEdition(); + + await edit(editor, editorWrapper); + + markdownMode(); + + let markdown = await getMarkdownText(editorWrapper); + + expect(markdown).to.be.equal('**test**'); + }); + + it('convert to html', async () => { + await edit(editor, editorWrapper, ''); + + markdownMode(); + + let markdownTextarea = getMarkdownTextarea(editorWrapper); + + await markdownTextarea.sendKeys('_test2_'); + + htmlMode(); + + let html = await editor.getInnerHtml(); + + expect(html).to.be.eql('

    test2

    \n'); + }); + + it('code block', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys("var test = 2;"); + + selectEditorFirstChild(editor); + + $('.medium-editor-toolbar-active .medium-editor-button-last').click(); + + $('.code-language-selector').click(); + $('.code-language-search input').sendKeys('javascript'); + $('.code-language-search li').click(); + + saveEdition(); + + let hasHightlighter = !!await editor.$$('.token').count(); + + expect(hasHightlighter).to.be.true; + }); + + it('save with confirmconfirm exit when there is changes', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys('text text text'); + editor.sendKeys(protractor.Key.ESCAPE); + + await utils.lightbox.confirm.ok(); + + let isReadMode = !!await editorWrapper.$$('.read-mode').count(); + + expect(isReadMode).to.be.true; + + let html = await editor.getText(); + + expect(html).not.to.be.eql('text text text'); + }); + + it('keep changes on reload', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys('text text text'); + editor.sendKeys(protractor.Key.ESCAPE); + + browser.sleep(400); + browser.refresh(); + + let isReadMode = !!await editorWrapper.$$('.read-mode').count(); + + expect(isReadMode).to.be.false; + + let html = await editor.getText(); + + expect(html).to.be.eql('text text text'); + }); + + it('mention user', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys('@use'); + + $$('.medium-mention li').get(2).click(); + + let html = await editor.getInnerHtml(); + + expect(html).to.be.eql('

    @user8 

    '); + + markdownMode(); + + let markdown = await getMarkdownText(editorWrapper); + + expect(markdown).to.be.equal('[@user8](/profile/user8)'); + + htmlMode(); + }); + + it('emojis', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys(':smil'); + + $$('.medium-mention li').get(2).click(); + + let html = await editor.getInnerHtml(); + + expect(html).to.include('1f604.png'); + + markdownMode(); + + let markdown = await getMarkdownText(editorWrapper); + + expect(markdown).to.be.equal(':smile:'); + }); + + it('cancel', async () => { + let prevHtml = await editor.getInnerHtml(); + + await edit(editor, editorWrapper, 'xxx yyy zzz'); + + await cancelEdition(editorWrapper); + + let html = await editor.getInnerHtml(); + + expect(html).to.be.equal(prevHtml); + }); +}; diff --git a/e2e/suites/epics/epic-detail.e2e.js b/e2e/suites/epics/epic-detail.e2e.js index 66c5e34a..4db310b6 100644 --- a/e2e/suites/epics/epic-detail.e2e.js +++ b/e2e/suites/epics/epic-detail.e2e.js @@ -1,6 +1,9 @@ var utils = require('../../utils'); var sharedDetail = require('../../shared/detail'); var epicDetailHelper = require('../../helpers').epicDetail; +var wysiwyg = require('../../shared/wysiwyg'); +var sharedWysiwyg = wysiwyg.wysiwygTesting; +var sharedWysiwygComments = wysiwyg.wysiwygTestingComments; var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -39,7 +42,7 @@ describe('Epic detail', async function(){ it('tags edition', sharedDetail.tagsTesting); - describe('description', sharedDetail.descriptionTesting); + describe('description', sharedWysiwyg.bind(this, '.duty-content')); describe('related userstories', function() { let relatedUserstories = epicDetailHelper.relatedUserstories(); @@ -68,6 +71,8 @@ describe('Epic detail', async function(){ it('history', sharedDetail.historyTesting.bind(this, "epics")); + describe('comments epics', sharedWysiwygComments.bind(this, '.comments', 'epics')); + it('block', sharedDetail.blockTesting); describe('team requirement edition', sharedDetail.teamRequirementTesting); diff --git a/e2e/suites/issues/issue-detail.e2e.js b/e2e/suites/issues/issue-detail.e2e.js index 352d6615..e76fb3da 100644 --- a/e2e/suites/issues/issue-detail.e2e.js +++ b/e2e/suites/issues/issue-detail.e2e.js @@ -1,5 +1,8 @@ var utils = require('../../utils'); var sharedDetail = require('../../shared/detail'); +var wysiwyg = require('../../shared/wysiwyg'); +var sharedWysiwyg = wysiwyg.wysiwygTesting; +var sharedWysiwygComments = wysiwyg.wysiwygTestingComments; var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -29,7 +32,7 @@ describe('Issue detail', async function(){ it('tags edition', sharedDetail.tagsTesting); - describe('description', sharedDetail.descriptionTesting); + describe('description', sharedWysiwyg.bind(this, '.duty-content')); it('status edition', sharedDetail.statusTesting.bind(this, 'In progress', 'Ready for test')); @@ -39,6 +42,8 @@ describe('Issue detail', async function(){ it('history', sharedDetail.historyTesting.bind(this, "issues")); + describe('comments issue', sharedWysiwygComments.bind(this, '.comments', 'issues')); + it('block', sharedDetail.blockTesting); it('attachments', sharedDetail.attachmentTesting); diff --git a/e2e/suites/tasks/task-detail.e2e.js b/e2e/suites/tasks/task-detail.e2e.js index 10389c00..f5955513 100644 --- a/e2e/suites/tasks/task-detail.e2e.js +++ b/e2e/suites/tasks/task-detail.e2e.js @@ -1,6 +1,9 @@ var utils = require('../../utils'); var sharedDetail = require('../../shared/detail'); var taskDetailHelper = require('../../helpers').taskDetail; +var wysiwyg = require('../../shared/wysiwyg'); +var sharedWysiwyg = wysiwyg.wysiwygTesting; +var sharedWysiwygComments = wysiwyg.wysiwygTestingComments; var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -31,7 +34,7 @@ describe('Task detail', function(){ it('tags edition', sharedDetail.tagsTesting); - describe('description', sharedDetail.descriptionTesting); + describe('description', sharedWysiwyg.bind(this, '.duty-content')); it('status edition', sharedDetail.statusTesting.bind(this, 'In progress', 'Ready for test')); @@ -55,6 +58,8 @@ describe('Task detail', function(){ it('history', sharedDetail.historyTesting.bind(this, "tasks")); + describe('comments task', sharedWysiwygComments.bind(this, '.comments', 'tasks')); + it('block', sharedDetail.blockTesting); it('attachments', sharedDetail.attachmentTesting); diff --git a/e2e/suites/user-stories/user-story-detail.e2e.js b/e2e/suites/user-stories/user-story-detail.e2e.js index 1a7d28af..a280e2d9 100644 --- a/e2e/suites/user-stories/user-story-detail.e2e.js +++ b/e2e/suites/user-stories/user-story-detail.e2e.js @@ -1,6 +1,9 @@ var utils = require('../../utils'); var sharedDetail = require('../../shared/detail'); var usDetailHelper = require('../../helpers').usDetail; +var wysiwyg = require('../../shared/wysiwyg'); +var sharedWysiwyg = wysiwyg.wysiwygTesting; +var sharedWysiwygComments = wysiwyg.wysiwygTestingComments; var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -30,7 +33,7 @@ describe('User story detail', function(){ it('tags edition', sharedDetail.tagsTesting); - describe('description', sharedDetail.descriptionTesting); + describe('description', sharedWysiwyg.bind(this, '.duty-content')); it('status edition', sharedDetail.statusTesting.bind(this, 'Ready', 'In progress')); @@ -44,6 +47,8 @@ describe('User story detail', function(){ it('history', sharedDetail.historyTesting.bind(this, "user-stories")); + describe('comments us', sharedWysiwygComments.bind(this, '.comments', 'issues')); + it('block', sharedDetail.blockTesting); it('attachments', sharedDetail.attachmentTesting); diff --git a/e2e/suites/wiki.e2e.js b/e2e/suites/wiki.e2e.js index 4f9b6e48..3206047c 100644 --- a/e2e/suites/wiki.e2e.js +++ b/e2e/suites/wiki.e2e.js @@ -1,6 +1,7 @@ var utils = require('../utils'); var sharedDetail = require('../shared/detail'); var wikiHelper = require('../helpers').wiki; +var sharedWysiwyg = require('../shared/wysiwyg').wysiwygTesting; var chai = require('chai'); var chaiAsPromised = require('chai-as-promised'); @@ -64,30 +65,7 @@ describe('wiki', function() { await utils.common.takeScreenshot("wiki", "deleting-the-created-link"); }); - it('edition', async function() { - let timesEdited = wikiHelper.editor().getTimesEdited(); - let lastEditionDatetime = wikiHelper.editor().getLastEditionDateTime(); - wikiHelper.editor().enabledEditionMode(); - let settingText = "This is the new text" + new Date().getTime(); - wikiHelper.editor().setText(settingText); - - //preview - wikiHelper.editor().preview(); - await utils.common.takeScreenshot("wiki", "home-edition-preview"); - wikiHelper.editor().closePreview(); - - //save - wikiHelper.editor().save(); - let newHtml = await wikiHelper.editor().getInnerHtml(); - let newTimesEdited = wikiHelper.editor().getTimesEdited(); - let newLastEditionDatetime = wikiHelper.editor().getLastEditionDateTime(); - - expect(newHtml).to.be.equal("

    " + settingText + "

    "); - expect(newTimesEdited).to.be.eventually.equal(timesEdited+1); - expect(newLastEditionDatetime).to.be.not.equal(lastEditionDatetime); - - await utils.common.takeScreenshot("wiki", "home-edition"); - }); + describe('wiki editor', sharedWysiwyg.bind(this)); it('confirm close with ESC in lightbox', async function() { wikiHelper.editor().enabledEditionMode(); diff --git a/emojis/0023-20e3.png b/emojis/0023-20e3.png new file mode 100644 index 0000000000000000000000000000000000000000..66e39204800698621f78dbaef2a51225261ed4f2 GIT binary patch literal 491 zcmVSIEYdZ96E^L zU~muwmu3<~5J49mggWTpCb~E{h~Fr|rGsKrVrhG667MeeXp2HPazcJT*;k&M$&QpN zfTcfvtWq}Fkx~V)^v@d6iUBMsTt`^t7{Q3pgEgd>8ZU5rdM_ey@yHIQr?$|GA;rYT zJVpdn*tN+L#Y!)RgaOZ?G?Zn$m}6ljWLsf?!k|Yh=rEf1NRs`t&y+5gj!tlR=LSST z`9nbjR3Yrd9J}#?#b(GqE(zD3%ya+cSFRr4&4br9>WzSN2gf*j?>$Sch{a||H$y_v zdf1H1V8+33M-**_X4qj>qaBgt(q%Zej+>|U;5h~nm^rW=5!PHkG0EePKe+Pf6WyGx zhfZJSuXY&o@J)^H{x2ps4{`F=E5_F6sMdVW&wb!&wN58ix)~CdTM;(nvak|RTWT|! z_n5CY`Pm2vqL?H@ig#a@5rH6zseWsa#-)e5&p(5JDxA6VmROZE2JlHxK$SJID*xdd hMaqCr|9piDzX71qk&_k9Mce=Y002ovPDHLkV1fgj-0J`U literal 0 HcmV?d00001 diff --git a/emojis/002a-20e3.png b/emojis/002a-20e3.png new file mode 100644 index 0000000000000000000000000000000000000000..200b3565fbc63ee82c5db7b5537882a296cb4e42 GIT binary patch literal 460 zcmV;-0WC>R3eOv;N%y~cZT!@(nPh2Zyz%7g8@PHCwQxJ*Y6 zI<1;?N=tRXWqPi2;c{I9E-8!wV>pc~Nns3Zt*^4RzKSuVl1wOjvj`!G%@=aa7jnd; z5R|=HCP^&IMTf?w&$Bx#6!TdU#eA0f?G+lEKFcKso5B+O4tf9Mi0g|58XG=YC5bgQ zeB7MkUAs@9Lu?Amp$>Vp`-xkX^W0loB%>s;ab$S@`U|f@aCFc}Y%@py&t=;OT^V&hAJh3OFIXSKohewjZuMiUf~6kE%)Ear1G z+g+ONE{pjbTg$VEq|gLqekx#YGN2yCtn3`KvU5y5ikX`Xn4b#J1f@6=;vD|EBkFXC zI$aKb-{BNzLNq}c4>CCQR?M@yjd4B%88o3sLXQ;xCG--M>t+XM%nb8v%najPH`{1} za&&o*vy{&fW_`k}&r&{zb98x+=AoQkSx%}AK2L{yUoGN!uoBfO>wsl& dwpFWq`v(kzb(;2+nUIs1JAytY5Y=XfyClRla%FbYCy9Y>X9a4A=LDLCh zv518(A%cjrHWKG~ftd}4cH9Khk<|LqyuBqz1D1Y$uBlc0merF9Vm2^6Y>;M9HraZp6i zSj0hG%qJ-5;NT_*Vi7-rgCdH8#V8aiA=s9BUd&x`_uk2E<@F-udF1r12!n`v{>cf`H!`Cggy#XeL zL5c9-(h1I1r}!O2L^|P&bC}ho8d($uXFAW^>>)aCpXEpIxcTfesZ&R7^0_fg3WFbN zTtDRH#|}Xlld}{lf1nxY7?Xve{VU+|+FSZj%=iJtwet?CSD$_o=>(G^LlDNKZq$!c zD;3$?>GAZ<7FiTStSroOVXlPhhunR!L2sbRqR3D`Im4B6$B1;y{q?W>*z+02!r)Bj zSzW54L`VegU96D`Ld~7$U--WLhy5%JNdg@=U?MlhexXj#ae~Rhu({h~-m literal 0 HcmV?d00001 diff --git a/emojis/0033-20e3.png b/emojis/0033-20e3.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f679c9f348ca77cc6cbb3210defccacde5c986 GIT binary patch literal 468 zcmV;_0W1EAP)|C(|IE==P zpe%N-SOFYH=P0NM;1ELrW2q#mGYL-NXksi(WqEY_60_&e;s+tG>usLB`N~N@#3UHT zQ%N@OUFAw4L%ZuCO0iNZvU>djaRfu!N?<32-D;EjTU9FipBY$~a)_fbG>`tVy7i93 zp3ihX#m%`12I@_hIGPw8*W+S7&5N}X2~qs)dhFFV$*xE_187T*s4FqyS@vOJF{ zg-I|twq|*;Ko~_lJ!r7DUE}xPfEzP8X3wQD35L6i1vc)?@$l9Rq7;)^3rhUEPK zLkHHv*_BVd*}}WIC5+(-AHNn6gga{qqku;T*20~&MDWxvmo@;8?sw0;k+dt!2| S&8l7i0000va!u96h7^P54-kZ+P7bclZcg3WwT|iN zAh?J)b+s-nU35`5YyGh#V9*#sDzxUB^tg9-Pi`oL^Hs>_lWD9xe`L>Bn}EY~yyISL z&9LXIO~7G#j$NrX1>kUoOeVuAr4$;DK*KF&dGg>oxfz2~-9w+1&Cke4F-f4&xKyNa zK1UG71W`=F5(YW~4Y!yj@$^lH*ZX}EGE~G$ktWb^3t1AkswEni3w-?XhpoLnvEm;B zjgoDVs4qBJronQp%;H?0jqNsR=9N1S*GcL89`oV*5gXfWzWf?;_u3p+FP`JoULRk^ zOcH3c1|wR75sCfo5MM^jS|)kR!JKX@Zn` z#o_i+ndMrE123R#TO@YA4j2a!X@ZokPkjnG!Mz(UrTh#-KVbU> zpS*nEC7(6%WrU0rXE6W|jaVr>KSV}~|L~0CUTY2Tn4UN4wO9WFKFf{mhMWuM00000 LNkvXXu0mjfcuv!f literal 0 HcmV?d00001 diff --git a/emojis/0036-20e3.png b/emojis/0036-20e3.png new file mode 100644 index 0000000000000000000000000000000000000000..d370688db9b7ee4869a4bf576bd3a97b333a3fed GIT binary patch literal 443 zcmV;s0Yv_ZP)2WP~9sGboB zh2sh^&=5lKlk2)@7z&TE-ewjj`|wGADLF37yD5&Zp7}}PQR5TTDv3|>t=_K?K&#=$ zOX0D9@yNmD6H@YJu)Tqm=>hJ{clOTj@lt45wgWZ@0W+f=2mu?(3~!c$m!yJ`o+gGn z8+phV**UvKM^c6qg1KlH0@z4qc(rVFBxQ{E2Z^)=$Q3NMPj4tkqM>|(*=Q%9HjgsA z6m80pXiP*}=nmHL^kT7faziBw4fCx;u3)jAxTf%4q7sEhBAsJu^$^=}`HKWhG;GJ^ mA559grec6e^~^#xz4QT9^Jrly`ZTcs00007xmI7$iC|q zN-xA0aM49~Et-vpmO=vwwgzp)hRoQINhVXyt{lcnzRy~I_G;b9dlf)29zST+w}q4U zDu7~q%E>QO1faNsN=sB)@*hf)U{+1CTlQFpv{bxjZRMqe&rX zTnB{15hg)`*PqYP_R1c6We@Gmmmee%7~G8HMfnjiF&~aDcz<|7Ow4Y{V=6O&Nn$7# zrg@-jzFh{q{M0~Oc{s&l&Y@Vy^6_h%e@P6(C`OxcY}~X&SQfL&MjJ#iCW)ce_|0Xv zPtKiW|LH24N=ttEeQM1PCV}BLjM%E4Qfqcd35%4ls5LumR?oQY4>3s+oZs}=te%pw zQ)s;~;w}>K0Y!pd7;z6@1g-iu;4?lyXw{$p1;qw|V5!r08~^|S07*qoM6N<$f?`0! ASO5S3 literal 0 HcmV?d00001 diff --git a/emojis/0039-20e3.png b/emojis/0039-20e3.png new file mode 100644 index 0000000000000000000000000000000000000000..e718c0e7b5032f98babbeca2e051895de354958f GIT binary patch literal 446 zcmV;v0YUzWP)3G0Knm2ACG#Fd!<$rLy;OuNlb_|!G**)xM>*C;LN6jBaJ&t zfrXVt{{co4V{~N#2V=a16l_AchEf!GSD^K{XF9mN++q5CsnXl`uibpH0w{W;1HW1p zZoXIn6unb!zE}}}B7t%w%8^_{Nn(s-9TuJyc{q}R6nK8X%BLzno9EaB7N=jZ{BnXv z_p*eMA-pn_Ml&qEm|!s7hfQFa9?Mb44REB}yjt64Zf%Q(ZZkY|gXyuG*aVi_Zkn#z z@ddwH9e%g|P-|Y$b<0g-lURP#HO9c?-3&96cSr%H(F|R?jTSbE#q%}mUwvk$^1ORK z&OiRiCEpItut_WiSpB@m7q7{KVVC*G1(YNCu(?loWv~fi7{IG*rV3e5t!9mcab`dvM7wJ;LW>8!T4z+@4OidGWkEv34J?i!Ik(KAGOliB_UanLsw}6m* zV>5ef#vLGa=N1;2Y6&a>g6G%PHbJe5gdv_#M3xX90Pj=)fdmjTw(fTMeD5I#5P`A) zjvR&ACK5XGC^;mKAPAUz?=#x`#NhQB>5lSGV|Laz&?usRq>L6K zzC3!0#xc!j_d%6CiYGpGg2CEb>Nl@azkQ9;{2ay8EvlCnDKBe$qeNS9ej?A=y-$e) zdt9x`*OixOl2E&Ti9gK9a%2={o9vT9gs6ZS|Dzm6l|0HJv>1~|$ss|2J6b1?enImd8IDi@SnNl;u%zBu0fia%AbrPK^kuk=sOKLq*<2P>haDd@GN>~5@002ov JPDHLkV1mJnppmgfwdQ z=QC8kY@yxm$N#!RLvERn^W!t$OB#LWefExh-eh+PNoo@Py)@johR}6HdlIcQho>hA znBH$DuT~gq^YMJex1S~jxzf=tGwGd)dbdYVkeL@6R^)F@vO+Q}bKa(uGuZDiNmC^w}-?!iJ<@h002ovPDHLkV1jq81K|Jw literal 0 HcmV?d00001 diff --git a/emojis/1f170.png b/emojis/1f170.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b77292a64fd0d7fbc66acdb4783f0ef6c3b5a1 GIT binary patch literal 469 zcmV;`0V@89P)+8bv7?#+hU?b0mUr2s1*SNA0yXw%eZW0h+}G{V3Rx zwx@f5W^uah>7D?Z0;;lvcoqIbyA&uj*I0e@5K1oJwjVI=56B}FXxzDlvwRGvQKxb5 zHbq==NY$g(xk&Q)D<+EZE^Q!nO*RUcC*-JJK9AIW!uzk-@3FpLd zPQH8!3Zzy=m0bL5n;bpa#U|L4!tZvNF;R>XK`FsRF*E*+El>)Zi)HEbDax%T>8~R` zb?;)5gug^sd;XYmt4X=lWHNZqKY}HT$4rMm7(Lq~3x8uK31*UD;xVJ$7fiqZgfzpZ z-kt3jEXol~nvq92f=M%M0t8r0no-208FK>ZN5Kvdu(+Tf1^52|hPi_oguYVm00000 LNkvXXu0mjf_+idd literal 0 HcmV?d00001 diff --git a/emojis/1f171.png b/emojis/1f171.png new file mode 100644 index 0000000000000000000000000000000000000000..aac0ecd157d6bf07eae27ef1915e91f9c6546841 GIT binary patch literal 436 zcmV;l0ZaagP)whf80eYmZ7`1IkzxRFG@&+T>HaEcJ4i-HT{%aeEkYC5ED|07=sR%F{5Y6WzBE+ z!;FxjKyqV(@%1I76ywu2zZPH7i&CI_kdkeEC2MXYaf$QKpD}pn79m4{!_Ql^X6MNb z&rC5g_n69~`y9M`&%X>sM8HHy6cL>n;Y8OHGK9P*cWQEi@wFu+iqMKBxBqs7kRgz5 zHp#whqvg}&eAc0}^PS(X-{6*42^j*N-4?qKX2A2803!6FfFmRVDxd-?AVLABjnvfu eNB>+Sb+tdpif6On9|nW~0000*T_}eRBGJ$OTh~!nFC$Y)jJ8*2 z`^78%JXt`uTG$+HQZiV)M>3m1@9ok2xQP)zHO9Uh*KkIL`FVE^+M0-iC6zlzGMhn% zAwO>4CwTt>!_Ay#XnvN|r7VrN%QTi&iAXG|D;F@lQkh`A0z!Zg1nU**r7}h;pTj1J zXifaYF^rwc2AzV+21b1RIA~2o(j$SuCW#0^Slhx#Oi$7&F+GV9e%=Bhh)68nn?($j z&*9EYf!3fk?#vV_e-WepdJ&t0rBPm?v9!v-`Lhf?en_}k!-!9eA)G$^cWczkE7e|(hK$RV7A2hjcw+s|L}Yi=HPcdoB%hcQ}T zzte8`bmIUXpy<%{1Dc;|{D&v2fmZ-LdgoOGuka64!Iz>obJwN-0000XnqI;Lhu($5mBoQHs&Vi>1d*?q%{w@BHPDTY#m)vDrv$L5zPsc(f%&V zY{y3k=xj+a)Z0O_&0;lkN|@vq!H>zM9fs#OS=l|IY@_8= zsjD$)x9SO##4x0wu11j>=|c)Z(eZhDw+U0kI9QsZOi78>nzg+%KHY#YMU0EP9G?Hh zMl>Q)!$VL?U6bM044?%x~ zo&v$b$H*cd@+pLRDI$XKK`2OqkT5BQVAM1RO*D#XiD#a-r2*n!EYHLuH!UFXAI+lL@X7T+8K;Y48tI->eFx&SC zj}qBLDBg$+>1g|^@Hpl?YVhy@gr;FWd`71C0eO+jXNg=mjdrja90%X7GNO07$Xgg1 z!A>Mmt>G~;ckg5NzhJGo$Njjr&7YS;EM;a+EbzBXWSX$^7Wnfz&9qJSdK}iIC(4~*-!d^Ui zDd^N<$BiHgqD!6Yw9sX#Qy)-P^aV+mXjd{<8&_>6=gpBasUUnFxxaPq+;qe$0XE}t zG!)fz#3}(cp3T;xW>5r%4>#Pbf8kc3r-`tx&tT zNOrK>zO?2B9T1(4} zGU!X4I!ZK~p;vEEEnJ}c;tk3&F?VNi-&IH+&odzW#Xy8aewM)6m78?SuL$_-ZQ2hW z@;^$&V;CDJ33MKp8J9w9hO}l}%3p8etyBqEdv-A{MPKXgJp$?Zvsk$qBpfERAw}}o zAuW`^-K6o2eC{f8lm&(8Qtfv2_#SCv5y=e z;J*LBr!xfeMx=s2HhuRypJpNzO3OpEqtd%uUZ4G zkxF(}GfF8`B98Vvbh`s03}_9S-vkiB035*P7vIPK>M$U}kO&BWa+HQ5;4nT1P4NdP Wt(oL13tKAy0000ugK~$x|y-yQi0Knnj``)!2ZLj64wO|DkiYDbNDMkl^(V>fjlOeHgh8S60 zx;oN=XcjPOo+%(J0h5a}B`uP)NYdc*Y9#wZ^o9%s5Rdp7?lX}>aLzPzk^>>S{9evo z>1xNNclbOkJ{;v^&cUMztZ!w;V?j!1Rh&wVm+J@2PY?6%xX8%mAPZ~zJWCDoX!#9w zrO@wQ@8RuHf%(__cy-C@(;K9hc5x~-UOi6o23J?Mme<(l*{-b$rrk~GD^)nU=a(_I^wv{J+E5_7NH-+*qUaVWp-nmLV65!rQ zgq5u$Qi(8wVLyd(6)`!tp?qGAM6b!G;u*(3$_!l!(56fFPHbv*MbOZ>77bwK9CD=! z@ra)`UE}b(gHD4}sj+jA$MybmiGLM;R@t%gxITP2#U*Kxq(u_2xj0)Y$N)CYvlV21 Y1IwR*yH9Apng9R*07*qoM6N<$g5Ds~1poj5 literal 0 HcmV?d00001 diff --git a/emojis/1f193.png b/emojis/1f193.png new file mode 100644 index 0000000000000000000000000000000000000000..db0d1f22a7943807806419d9f9f5fe8ec2210cc1 GIT binary patch literal 531 zcmV+u0_^>XP)R^F~Iu)#_gS86F%27;Yt~Jf=-E^C8@8k9-%zZxMMB>Q}D;iG% zHtlf~B%~FMCjp!G*#eRhu-Q9X(jlFufT5vDf$J$6u1CPo@Dyy-T@(;9b%cPr>!B1_ zK1oZZ?xOcaEFMmdAqAAST~f>IoFDDQ^AwrCRh};7m_9cQDAFq>Krnuw3lGKg+!DIq z&@gq$<+}@18!k5|4)OA9fyeJxxqtOI6GvjKR~uY^^qK9Q|IA();a)1si^T%v+78<2 zg=;gH#^W4~+YCniSU!!R{Q+XO$#74QcfbB|awy8NfiT@6lfiv{Mh3#1IvC|!u7adV zDaG?od0u@l(qj2EE{^qbd;TYxLX}F*1>I)k82dlbtFwn!RsGI7IO|Q zAF`V~c(cOP*~9cjEHo+T4jJ@EECdj;bYiwaB6P)_P6bO#d>#pIKE3DF{3hU1PSgq8 zf%0m86L2ZdtYV`@mE1DDYlT@c2PM)qX;o4YQ;f!0HI#=P!tvc84H_*0XM01Gm zQOc8tEkuO5MwP|eXYhQNi;J_oe%>ReIKm(`BtQ0f*ZRWp(g$+qFU=srkfMZcJH{9| zHamu;6*@P)$0g&C$is zt&^D5sh>e-Ulvgjv4SF|St{CAa<*2(#oR@%O}sp|pdTQ;-%ph8JiHalnpHq&Fs_1% zjAhL#pffmKKve=d2d7H{k_4m`MiX40F}eS24Zp9reW^fw(_!w!C<1u@wN1fDaQE>i zW+zgdIhtYVjA~q-G8l@4knH*C?lM1XQp~6MPmgJw%B9exq+xqZjq4QiDYl$lN{3S%GZL(P zbI{oH%lpI9iwzd8P7(`C_VxTe_U|rU&!=WN%+HuKJ6)dEe^4%sqZBmk9VGv}U2pNE zzD;^4%)XwlXm+{?A*fjnr;nt0{n_Tt7n|vcL#%%9(DVC*@^d#ALqhPO(WYiOB%&J2 zYc108F!^j8uj{kC-eM#f;laC2w%R+yBO1?Fn^-LmasJ*bMF5h3Bmqgl<=|YYpaQrI c&Q(zP3zU_OBh@|l_W%F@07*qoM6N<$f`Q`XasU7T literal 0 HcmV?d00001 diff --git a/emojis/1f196.png b/emojis/1f196.png new file mode 100644 index 0000000000000000000000000000000000000000..260e8c4784420b1a322513bfd52d7b2c61a24ba5 GIT binary patch literal 591 zcmV-V0UL{x{&s7oDsU=b1PQfefY?qqJ5tJCDJyUxtlPAGZkqWylNrQ>eQj8=C7 z7E9wQ=#XZ#x)ZQiI!i#O1T2=%k`$PRhAst*l@@7eQn0`@G#XZvP+3-l;4fV%xYFK? zoAWq!uOH7>Xi{+dXbU}kDX#S3Y=^5aM~SsH z66$(3!ulGE%ln%d{gGi+c`>G;ajJWeKq<8PorliO`HHyhkW6O@^?!58`-)e?X@)0e zcrq}-tmmT%!H2P*TzdMMc+w%HQ*b{%&SHU5++U(S_o$u>1f3002ovPDHLkV1ff(3jhEB literal 0 HcmV?d00001 diff --git a/emojis/1f197.png b/emojis/1f197.png new file mode 100644 index 0000000000000000000000000000000000000000..becc64ccd87f64c90e8934b33d5866797f0544b9 GIT binary patch literal 596 zcmV-a0;~OrP)e7tHJeI^9m_2WoM zTi*nweuMgODJ@+IT$MqSK4Zl~Tb7U4rN?cMx$4C;hz(bke zz*V<%Jtba^3s3uq&!)*y(~Ay^j-=QSN0i%)Cwa zn8m)TAQeFqSDD}7VD(ytC*~PTrg428o#k9}FXd|tt~TtT*eh_UEVX#82_@f4!7H43@~HlP;%#fkXoJ5z z2^egRsUWU3_{)=k!PXf9k{V#JeTK#kNjB(_FoCufoP{jbYzmJk3s82T4Nqa}1FBHO z+PgP#@=Ig}NAc8-Cx~1*kH`8n$KvUW$XE@f{1Wl2d%yANUXb|HYm^bB(K)f=qY zd4fke37r@~#-b?KMM#~0gw#<=@$1e*)?QB#?CB&lGKg|YX#SQavcbvaadLS!DY@A5U)jWUu`}QJpT-VpfXVimnu0iBvUMhk Z_#b~rzIe!Un4|yz002ovPDHLkV1ngh5yb!i literal 0 HcmV?d00001 diff --git a/emojis/1f199.png b/emojis/1f199.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e63b1ead27d70b42d2d8f94c147f9d2d83a176 GIT binary patch literal 513 zcmV+c0{;DpP)QXe3k!CN?>H<}Ua6-Orr(2riQL^AW}J)0@^?VcO^-US_Zc+%;IBU zLLx0Jy9(VCJq1ZcR8WBhK}vNol`<{0D8a9EN!zz?W^zqq1uy=7qUUO`CNC_n0U4}J z6l|T!3(E!|$jW7aXpleTBK_cmT@jv$%mU1>0fd{56R85L(LXy#ExQcbWA@%Y?DQ~B&Th=u2NI<9 zqUgT+AQh_UC<)G{{fLxI^!L};sUZ*&q(T)OM5L_7|NHu`pXj#5_jhX(oVf2t@;&CZaE1~ZDpX|&Wxb)4l{mTO2sen|-HiVFlzG-*#(VMm z+VH#YpdwX>;CjqhHu4^P);2? zBHcRK3lVgPiVk%t>`;gDjmioeqDG=3E-iCoTaPyPJkKu_ytU}%(C5Q{r;hAsK5)48 z*xA!pUg`JuXv)|5h>P1>7#WJm)!Kx*lPKiodz+s~A<}M)u5P&P?|EMMSbSlzo=VEpiGO?%*&k z!V-6O4zdoJ=nyMpt`sO@g_)lvYn!alhqs+cn|A;J002ov JPDHLkV1i2r1r7iJ literal 0 HcmV?d00001 diff --git a/emojis/1f1e6-1f1e9.png b/emojis/1f1e6-1f1e9.png new file mode 100644 index 0000000000000000000000000000000000000000..76ea6e0a34537891fc747cd75b7974a79d8c30a5 GIT binary patch literal 346 zcmV-g0j2(lP)tF}|W=gzz)VN6%xx=mw)GERw{bdcTiJ9E4LR z%CA#M?y!+qbh-=l!yM^IlWNzA0|!4?#71Ia%p0j}4biNiWPr|gNa6c%wjh40Q2 z%w|y2eR`osI;mo#urRvC+Uhlp_6h^u%oW{c2JrYzF@hs|6!K5}$Y3MWge}HbSI6^P)%iK~%-TAr^u#9Khk<{##xks1HpBi_K>75*9I7EX0>~fnFfbB)GJk98Z7_GZME0f#g3Z#snw~Ms^DdWwBFPGvb(&?Zg!Y6d05BZJ-%K>m;-JA_6p<4?v8I#v$Q(ls7i{3_q~eQd}sJ zFxNoLAdN$AX%$;6k(t{D`;9!mkdqLoGf3ee=`_7CL;&+}Pp=(9Dus)};k8jGSXo22 zT1?I42rBEmHR`x19J-x|o3kpBSd3V1&rj%fB3v{>blV}17pL^)aZ07*qoM6N<$f@7MH)c^nh literal 0 HcmV?d00001 diff --git a/emojis/1f1e6-1f1ec.png b/emojis/1f1e6-1f1ec.png new file mode 100644 index 0000000000000000000000000000000000000000..1be16c60929d86526de194cbb1e9ca14d8d45ef6 GIT binary patch literal 529 zcmV+s0`C2ZP)E4f?kxu6xUfwOl00W&m3zG>_gs^>gfabQmN| zZ*O|Dl=G3cUJEV+A&g@BH|#X?XkmR!0}Km`~gWp{qT={r5yAhtWd z;Lu$~*89h%G6r{mEGa!FPt=Lkw?6i8P_?Ofpd8VwXjbWB|NRGk6S}hjgMai3PdA^w T^ry(%00000NkvXXu0mjfQxWQO literal 0 HcmV?d00001 diff --git a/emojis/1f1e6-1f1ee.png b/emojis/1f1e6-1f1ee.png new file mode 100644 index 0000000000000000000000000000000000000000..065229e130cb69f19108465e5f1a483cf7e8fac6 GIT binary patch literal 573 zcmV-D0>b@?P)J&GomZ>W*GyFyhkv2WoZEOgH;u zn0#kWCLx<;zApv{Ig%{FTk6EO&W&MYSzleuv)2<87AWrYX0Q!zYVp?|KR|Jzj$W}6 zyXet-y=k|q=ftSwl7o=zH=!V5FhQ&7uM948sA!qbcK0}kURN0GAB^$vq zh(_O$H8pG$HTd}h5yfy~6lxCg{Bt>dQwy}6yT{bDLT8BrVFS3p&fPw`Iv?@oy+)1> zB!DuOAP_bQK8zru_#vSq(u`7PfaNTK2tTC|Y14r)B4PfL#y|QBF=o literal 0 HcmV?d00001 diff --git a/emojis/1f1e6-1f1f1.png b/emojis/1f1e6-1f1f1.png new file mode 100644 index 0000000000000000000000000000000000000000..a9eefd05d29cfcad24d7e19d2e52ae85f4af8be2 GIT binary patch literal 343 zcmV-d0jU0oP)WzT={pf6Vm64_JG%slL1Ho3jd}r{T!)2QsCzKE zhZ>4#Nl*LyrCW1OMOuT;hkvL0o!yg8nstFHs~H>gd?(HBfHrFo9C@J4g4Ynp&3Kwj z*oz`^jA1Yi!#NhTJq0r}Zr_Hy%mSH&6TFAOe&o5?*rdo)Fa;`dJbr%QCFXK7 zu9_`olz9pgiA+KgUuMiD5-Gw{=2>DpinwmJco>a{1ZTB6vBWZ-f?!6=Ii_YD#4(A4 z2U^Y%DDxC-MG>d9I%5kw=Mxf%i$;@FLX>%y5Kxojve6`yBa`@v2L?c!C61GnUktp# pxu6SFSV901_Yae_ZHUcZWB=FP~r+J+$99Xy?AY(baoKzln7Bu)EC znxa~RdxG!tb)B`rywTfW*bNDLMx5w!`U#AJ{dC1#7nfsY{^3AH0Cb@jnIs z3trC?q-O&9|>NNhX69w~=vPxuYYubq`S9;dt)mNGy>H3~*r-f86$$!<-Z!-i zIQawJGu1d9BZWFv3^Ca?&N zc1Il!yOsJHfgv1C5{{-&2})eWvn*|%U@!qYzA=WobY9-_tZkoDC`eQShyhN@kihy* zgldbK>-#JZ&+n9onOaBYy}D=G2iT}gIu+UT^Y6X^$Y*KgZ4vKA00000NkvXXu0mjf DCcL|x literal 0 HcmV?d00001 diff --git a/emojis/1f1e6-1f1f7.png b/emojis/1f1e6-1f1f7.png new file mode 100644 index 0000000000000000000000000000000000000000..3a98a614814cf9f2b2a71b1735fc03d96f6c3717 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|_fd z;vGG>(C=`7NW;VbCG9<}Dcs8ziE4;=ZeB8T?h2(^Mwyq&50+QCYdRdghy!)%s#SMg%j$#XC#-+_&peK~0v+FQ>&RnIev7W-}3X89vuypqsYs(pq-+GSX zCmYQXcbOC3WlkTfr8<3%U|TD~W3x#Y3ryea=kwc_SW?k+Wf-Ifb)fWxZj&LMsN_&z z2To@PG8o`j8yiLHFAwY2*UwsoY=&KtYK+!cC1IfrXl*bh4My`Dn2Ib7b$2;Jll~=aG10QG}ErER6e=;)gqg)eEAj^GK%_ zq5McHQiJ@U5iD5&rc8u~^ENY2r^!8fOla{vp7J2RngqgjD7ZdUqzmbf0s_Sr@e_p}{nebB|(x*30Bl6-eJ;p!@46&tyitYAJ@YP)_;FF zh&DGniL4*sb{Dm<=>~f5Vc-LBT;TWP=;US)J=h=|c`B!w%a#4DlErjlY!J>xsQ0rt zeU+xA02_q2TC3{i)8{ho&7Nz0(nJNv{u<_c?JD!DJL`s(g_&jW#px!>E>hysEzskEa#*H3+w}$=righ<+ zu~htFj_2NJs?GyYBn#U)l0cE{N|HFk8bdn$d_Ev5rvjK7R+I{PI=jLcK@z=pktgnb zVSzOGof?)TmE@oF=j|6!ITdg){lM=YQW?JS^1Y8Sf+YI*en3=tXU4eMVlh?lV%yTDND4CpGvK6O7R)>B->D0xgODJ^f z;13AmAUIWUadR$(t|fHI;?fWm5iu!rEKg|SkaH-Uf_K-#^}2vTHZil2FL1pfV3LRH z)m6YGKT9~l7sn9e=NDv7I@f^0cK*&T2suPWLY!NaoJ&^y3HxYCrT2h#Rz*fdCgtC> zd(21vNTMa$X_?ZMO|tlAJ(!ZNHpqyZCmXp>e${lq<`D6Ap>qrs2+1#0xNWv*H@bj9 fHZiXsK85=M{`)VTr~p(j00000NkvXXu0mjf6U}tQ literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1e6.png b/emojis/1f1e7-1f1e6.png new file mode 100644 index 0000000000000000000000000000000000000000..04bf6084cfafac21effc195ab8efbbd7b0d23273 GIT binary patch literal 399 zcmV;A0dW3_P)BXoH+Ui+{AfTD-<=fgM$lE z(_EY=wF8G~H5W?lf+=rp_FG%FW)HGcxhntw002ovPDHLkV1jKnuVw%M literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1e7.png b/emojis/1f1e7-1f1e7.png new file mode 100644 index 0000000000000000000000000000000000000000..71727febc9dfdaf67bc74f7946c125869d25d4c1 GIT binary patch literal 307 zcmV-30nGl1P)W2qPA*LBYnt!667vlDRe(Dc)0@Cg(750oC?CW!nXc{J1#2r&D`j+~wmM2WJh& zB*alqDBE+OLLT#5>jtQh-?HGMpbEp0l4USe2taWX9EKz1_eo z4k7{d&5$_BNC(RHMo2*dTnrvNHstEI&-GoOrVa5CJeC%O!`)fFQe|aPczDK1@Gu7U zY9%rSWAGAwF;g=9#Q^W*_bPlm9WiISK#~7Rh@&18_YEBLJ#8v6fl>ef002ovPDHLk FV1g66dglND literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1e9.png b/emojis/1f1e7-1f1e9.png new file mode 100644 index 0000000000000000000000000000000000000000..f18a7e0bb493d432f8141fcbed7516303b595f37 GIT binary patch literal 307 zcmV-30nGl1P)j|N+wM(~!P1D%?Z_n)-*Z#WArjWy-m6fOM+ zO^wpf5IAL1U_LMv@pla^kK=-L@$+Hp6m6H&%(_6rdI|=^o}roD0V$hkWzGO8fr`Lc zv0`7~Inhjv;tzF0;Arl-f0^N?f(JgW;=)yVI@lpb6S#U?a5@z{ziLa*?dzP15Tz+G z9`dghq58se@-4(@N(2~NMMxBkjUq-me9kY;k~MeF$8WJmYIgm$C5pP$C}~t zco$EcAs|3Mwe(ZVe`sLD=0=Khm($9+K*D+o2E!g(_XDN7K!lRFd|&_o002ovPDHLk FV1meNg9rcs literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1ea.png b/emojis/1f1e7-1f1ea.png new file mode 100644 index 0000000000000000000000000000000000000000..bebd11088a730a2b6231e50af4c7ebcd651b55fc GIT binary patch literal 197 zcmV;$06PDPP)HYi2c2@^ibc*ze|y4UZ4+)4)jIbgxTcW_O?>!*Q|P2&l-n7EZ!R zI0+}=B%FkkfR=o1ky1K@5Ne?0KYi0Z&rI$Mz{VG7ER?og00000NkvXXu0mjfuZl~& literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1eb.png b/emojis/1f1e7-1f1eb.png new file mode 100644 index 0000000000000000000000000000000000000000..7da4ae8614fbe3278890a1948e4aab200ebd2ceb GIT binary patch literal 263 zcmV+i0r>ujP))bvmc$KcID{KaN3WK>!rowet!|GX zQ7c48B9bv7GjBM+LyW@b!`rE!O0^ppe*%w7z z^_NWnt4L$PNpnMJB|qDj^E@EDNPrF5Z4|?1mqB9!lz7g8`D)7BT>#6wFBk+-$kPA- N002ovPDHLkV1f?taclqp literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1ec.png b/emojis/1f1e7-1f1ec.png new file mode 100644 index 0000000000000000000000000000000000000000..f62a16455bb092b928e814ea6d8d528af17b3057 GIT binary patch literal 195 zcmV;!06hPRP)42ZF2AX1g20p!FicR%80c>Vl3KVKPM{DFHbAfeYtYnG zkQyvA^nTIjVR0d))Jp1rnt7(2^VuZbfrbK-wh?G3x3Pea?Ozu>>^*+)h&b7981b;% x*+@%XbdS?bglh zK;*SmdTUl(XJ0W4qYC8trQ~$Cw)eiY;d-@t znq&$xF+$I3xys3KW^1(}sY*x!3NfMm;eD3Rg72&Ap~w#e3CP5V^td`SKPL^&O#8@k zNCGndBoh-lpMLA+E^_Z5RXQC(0x~foo6$0x%i8$LVoOq$kOUNBLd*8vmo{9lR!@38Dvek!48*g&Dm_ zk9|*ZQ z@fm?*4Cm#FXG53s`Okjk!sG9~`VwyuWL0dY>|0pX`uZsV5I{f}M}Pn!XxmVtxG$X% zLQc)7?rXq~NROLjxA+i}ESxz}@2OJD+-sz<;KNwr(-*L2>cK)poht z3cukX#iQX)Ygmiu2msE!h18L^fFc0M`Uq>2yCg`#!6bA{K+pB_F#{PO8qj?$5M#&? zCc#09RnFy#TXYGol?B2yn~SsCU0nK#0_qUbXpv*70x9^kEm;kaWadn4pJ%61>)Byp ztxr_3wbzg`W@%K8>hxwiimJg%mu)krQM>Yd^d--bagao^TYTu1a@0m|J$hlLAfGxH zkKVW|0U`lJ_=OMvLeO5ZR&gHMV|tHY^@IIQ+(2y5#8=hr+S)YdfW!Gg#-YkuR6Bbt z06<_IApnHH1fsoqD=KZB+H7ADtjpWTk0yS6ByuED7`@$6Gko}TI>t2~rhu4D%yn{q s*jiQ`pvdzb)^dM`wcHPXgM)wc6S-9LDjIZ4&Hw-a07*qoM6N<$g5*~*6#xJL literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1ef.png b/emojis/1f1e7-1f1ef.png new file mode 100644 index 0000000000000000000000000000000000000000..d8021a04ff53119e51830dd1e46cbd99acef69f5 GIT binary patch literal 210 zcmV;@04@KCP)yjRYu&HxLpDi4-4a zz!^dmkNdh$bIS-(d>rs5NJu0k5}+ntt(>n5?63lI{?qPX&4$i>0H@9xsKXa{bN~PV M07*qoM6N<$f@T>_y#N3J literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1f1.png b/emojis/1f1e7-1f1f1.png new file mode 100644 index 0000000000000000000000000000000000000000..044ab7d70b4f4ca120d7414905f8ad757dd5f8b9 GIT binary patch literal 556 zcmV+{0@MA8P)CmCVONDeWiGo0k#0YIgXPI5MotbZp&c^nKE*^Rw{yVAFYO}uY&jTJm z3Hx-9eNyCr(jyR&1>^hvBcMuGT&MZv0fk(HR`{8eb7Yiur;pO`J+KGqQq^$-ROyk( z0G&9Y6Rxlu7D)AXR-iadA_G|bqH4&rzIUhxAx0vWKHcHPn-SK&RY;vUy2a(mD@?g{ zBF!=Am2mPoQWlxbod#P$lf15ygzH3sg=r<2Rzeh5B;h)FU1e)GWOJuMmm%XiMYbC) zg7`Gk+fO<7_#vf2A+A%T%aAGeIc)BRplx=_4ll0@?kEP)N?*dX<~t>ECj9j`n6&q7sLBcm(< z$2NJX3_z^%5bX_3>|rHpv%Xug=(m)@ibPl*8pb3S*gZ9XtF-F{>$4N2Sy8ce`ucJB z!I_?cREnkEen4=^%nSlVi&o*w%|jdq<6 ztC2uS5xu^3^nFTDJQpYbb_2mPr${zGp{DH-i9$c#_BUA9kCu@0@BwGTb4)KdAaL_e zCl_AXl$Wig+WUp?9EYLEW0Ju_qFt^0qO)s5h(Miyj)G$hms)OM1Qwnulo(t~u^4vx zEzhTIYQ{&&U-sj&Fa{+CjR9kDSz^!_l;eOAT<>PPaf-Haq@xz@rqt z`|X6cXwv&j$!#5{V!$9+Xfm{KDvP}@h2fqF%4P+Ph06ja$&eRC`K+K({1n$9CqP{R o3ivZNNWDg+1Ehn$Wbu!_0h@%vz1rO|c>n+a07*qoM6N<$f;O%G8UO$Q literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1f3.png b/emojis/1f1e7-1f1f3.png new file mode 100644 index 0000000000000000000000000000000000000000..1b121dadbaa9757e6672e411dec32ce4344626df GIT binary patch literal 547 zcmV+;0^I$HP){56it5m*zo0{x zfna|@e?TB~kb-W3fpo|MjdE-eg=I?ULd>S^N3QmKKS`$uFQY@R7yq3+o;q-DB4?onjYA0Ht)<*zMH4|G)mJO z!ymqmYb20}MW_Hj06~(;q_Rs@N$lUp?XDi&*CY-i&8>J^M}acki>p@K;WxuS`USovxVd{IH^2Y@002ovPDHLkV1f)d{C5BV literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1f4.png b/emojis/1f1e7-1f1f4.png new file mode 100644 index 0000000000000000000000000000000000000000..b7fd167862f61d0e1cf66a9a28681826238be795 GIT binary patch literal 317 zcmV-D0mA-?P)^wPq&xz6fnt!cMd)$S_ zM&wjZEQjxUM~22m6cid8sbF)&bb<-XG-~yxgUi?~aQjdt6L41lpyb84NSu87j}hH; zo5A8PU(G7u<05gesiyaq@Dwc597;Z4V{EE%Q8)+>D(f+q!3z?oY{Uo;C$-nu!o~7u zm@-jAG-|l0=T68hB+#a~w(?DOq?Nn?mdNL)l-Vn#mDd7V6fl+o$&7vh#yCra9ty0N P00000NkvXXu0mjfG%kl) literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1f6.png b/emojis/1f1e7-1f1f6.png new file mode 100644 index 0000000000000000000000000000000000000000..ee4187ffdd641af9ec6025b7eec535ca9f34b2db GIT binary patch literal 484 zcmVV|N51Ml|6^H3cIs8aFTI}R1ei`rL?t^X2cY6A3j5pG%F#OX5V#r|C;%r~TTsr{^JP7Q+wEa8^nt!d^JMir{~|$9;`8~Knx3Zl zb`QI`9LtMwVxMby9*SYx>`SsoRaLHabPx`QS=*94ed%B&^^t=}{vb$vJ^xIVc literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1f7.png b/emojis/1f1e7-1f1f7.png new file mode 100644 index 0000000000000000000000000000000000000000..a48615e3f8d44365bb1af9ae319e45b66ac0ebbe GIT binary patch literal 539 zcmV+$0_6RPP)^y$P^^JLDGEA-oi`#F(I0SN$=KnQjSXp`5y))jo`#dDuXzZ@%ggG}=fi&|xEUD4 z?-~PCHpf7i;|hM)Gr)sIyVT&0FAD;0rT4Phkobcs0t(>4!t1CKJCr8WQKG3|Epa~O zXR%_(!lPhurmMiigNr!A)R-_I#=fRGqL1mBbl%kWnG(Oa@&{XzCT0a z^AL~ToF$vHk;&P3IqOC1{K?&;pKvO5;zgCZDQJ=jYf-Je%4FX>=XNe5BzTe-!P|3y zkw`Bmj&-vtJ4wzMTprdr;wo{x)8KW%#Y#;c>4!AlRq>>NPicDCG z8a0Jjt_!==U_dPc4PGR=F_wQ&soQw_KF_t&Q+U)b+{^Cf!kmx7nvEuzuoh)q-4whk zbfA~FaHB7U*PZA4iUaSSD%Vd=5DLr^ne*}B>n`f1;5P+}$-J8n<*mf}(@dZGNK>-7 zjnGUlixoRoGGXl!pt3=+rVz_*$0;{R8crgq9`b88TKFb-JTQnU#sHPgF~A&GFo}a1 d=Pyb8qhIm~pI=0j2fzRT002ovPDHLkV1jU3{ILK4 literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1f8.png b/emojis/1f1e7-1f1f8.png new file mode 100644 index 0000000000000000000000000000000000000000..7085f732482bcb8250e335a8fcab6ac793db48ef GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|`e) z@s1ue^kzzwVE^#{v)%jGCs(J5hdXmjbbk2k!UVp)T;8{NwG8Ih^9n`xJFcFcV6nwy z3u|qgLdXiufGfMKYqc^abbQMA@cr4F@|AaqJYwv${_cTWdzpopqXO9VEhHHj7#KWV L{an^LB{Ts5MSYh= literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1f9.png b/emojis/1f1e7-1f1f9.png new file mode 100644 index 0000000000000000000000000000000000000000..a13a1b994106a1f291e2746ad064ef79c5ef95a0 GIT binary patch literal 465 zcmV;?0WSWDP)G~|*MNRuQdl!;a-7G!dI=3$2S#RV5xX+%Ts`R~GDf8+kn_T**M_&a&? z#lEPsJ$V;t>k33$scfb&jF_mA7c<;1WFn+(B-u*sVQRbi@}AG*%&zd{Cb`k=2^$Gj zBzIGHg4H}xhSwl6$D`U}l!;Cb~{C@|YXvNw;wEHib_-e?$mMA|(|yqz>_+m4^e2 z-QvhO`mYejzL}Yzr<>FkLQocoy_2m;8@k8atHd#xUF_V;%Ca>Ub1de37fgisLVbrf z#U4cs%0hzX9ZbEnu7r=0dLs+*Gj-vhHDU^5Gz5Q=@Q=O%TPu2&ZX~LH00000NkvXX Hu0mjfv;ERE literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1fb.png b/emojis/1f1e7-1f1fb.png new file mode 100644 index 0000000000000000000000000000000000000000..62329ed119b22438cb47acb6961bb3232a29826f GIT binary patch literal 303 zcmV+~0nq-5P)$!&0K|<0`H@DR7O$>b=CQeRg=hj^m9|9!?l^T%JciMP zV$=Xn{GcEd)3J@z@46^H0!n;SK*$%)Q-93FeF5OKp+qZ1OkCTAaK7OyB}Zo0h@&(S81y*m;e9( M07*qoM6N<$f~QSR^Z)<= literal 0 HcmV?d00001 diff --git a/emojis/1f1e7-1f1fe.png b/emojis/1f1e7-1f1fe.png new file mode 100644 index 0000000000000000000000000000000000000000..6ee3c78e49b7a70a24d1db3ca3a111f3874e570e GIT binary patch literal 315 zcmV-B0mS}^P)Kj+dVnMsFEzdx4leF zZm(BPzq-$b@0VBTu+u-3g4Ac8unHgo2?1T!K+SP{bC0z1h_n;J1W&J)@zZ-l&R>8D z?l+on{COnJ7ECY+0TL2y+c3e-VhQox19C+VCS-JRiL5t^dar@=-5KbT?#eRc)FhB7 zgjNJyJcvJ^h#4d$v?&Dg$_aNi^Gk;+3|t6|P9YM%sz#OLEsTRPrXl)lnT5p0{F7Mc)^REWkwfnefbOiYx(KkyGQ zbv0q?A8;|o33fLtkvJ%*G+`it));N;VB3Uii$J~WXF8xCZ0O+g@ZX7NeFGDt!BZK) z=42YW^cO_zMyBcsJ&H=eP{JXdvgpchH7S%_kQ`x1zh+bdRuo0Z)R~`)Gd1S0-`VBB z+hgXzAi4K-vWsPY9QY`r1_~iyem2g`?G(!&m-xK9LAce%){{KE^N6m;&%YogziB9v z35ThxHfL(<%qD|eHqYbRA)L2G{M8RkkJ%&>4k`mhdf4Ku(~srEs1!V|^^bE?uJh^2 z9+3+pn0628;T;NJT@Gm+BQ%YUc@Zyii%{}9!Cr_@-XoeCMF@@K3>5k8Ce>Dzw$|d^ z_g9oQOnlM9Q1}hKeFIcmRr1>nR0fJ-$tAa1=k8>jk<<5ym}`WLFd7Le?Qi7P>J&>Z zDg%X-kX129lB2d0000< KMNUMnLSTXkcIq(z literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1e6.png b/emojis/1f1e8-1f1e6.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2b26742fca8058217f5f486869df1ae8217c3f GIT binary patch literal 357 zcmV-r0h<1aP)OB>zw7(PB= zh65(o)-h3piM~ivq>0e0?~%N}K@x)q{i6d+7&5)NLz<8l$4o4(paUNhhM+aN>rtvM zgHA|Oq!krTZ6BhD@c9X}rZ~UA?8ya#`&-f!SqcT5`XRdCBkr^*EiQowS%f?ypcLXb zAVMAmw1Em4#C8zdVT877dBK)jwi0m4TnQ5tq#8DzYE-S(XdJ6?M@Sw$groE zju@Ic&B9ma8$4RFQzyb=*3iAP+<8gmHJ6WaEbosp0fAI09L!P3a&?3&2iO-enwQA$ z;behqD0S;N}e~i0th*4dYn0`x)05LMXapjr!w7XPs zdx3g~2j_Xb#KT2a))~xkW0V(P$VE(_<5`W!FO797RoiN9@_a=i3@E>%7n3oeYzyyN zOr7CJmu{a=YkclV92}tDk;s@(wuO&vo-EVuve={-OPnh5eS>yaBD9U>Ce>9o`cfnN zDejeuP(#TM&3^E^S|o5?Y!Z39(?liGH-|ZYDfEwi0t$p^leJK~O8@`>07*qoM6N<$ Ef;!-@^#A|> literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1e9.png b/emojis/1f1e8-1f1e9.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc9b1766fbf96cc044bbc7547ffe02130efb09a GIT binary patch literal 624 zcmV-$0+0QPP)2QG^Rr|!D^e-d)Hp>x)4Ot;b$1Y`q)p293Q z7=_Hrs7t9h34xY3-+SrOYCnb+f(&aUu*g!4>83qhbFdnc0D#jzixtidXyZSoXz^26 zf;IvzCKoWYgk2>q?VD5&K3NdUlUpUDbm2et9F zDO&s(mf#;q=IIqs@`6VPgv4&HX|Yaq%yZNBd}YYX0U_81QQivc$OaNUjahCWiZbO< zmr`*O*qJZr`mtL_hAzIocBwk=D{h4CuyY$=K^nmXhuy%iOTPfFNaFJOa2MzR0000< KMNUMnLSTYmqYkbB literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1eb.png b/emojis/1f1e8-1f1eb.png new file mode 100644 index 0000000000000000000000000000000000000000..6d2e94dd8204888c540ddca4cf074ae3f94f95ed GIT binary patch literal 383 zcmV-_0f7FAP)pP$wn-!i`KON(NcnaFY`M z#F10)X;8KUUMt}eT0>lTy4+8=O2oNAZT-&7*`Kdf}fY1Mw dmr4|=xp(bhbf@(fjxPWJ002ovPDHLkV1nk7sjdJ3 literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1ec.png b/emojis/1f1e8-1f1ec.png new file mode 100644 index 0000000000000000000000000000000000000000..eefd21d01845078460e0fb1e2c831f04cbf40fa2 GIT binary patch literal 401 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|{qD z@s1wcm=$Iy!S>*Kjk+`6!V8Mt3!A#D*{1W!?s~$+;-3r#%ec*Yxo@ z9iL>CIzeL6K^ePx182>*k-u#!iq3!d_0&?&&z`~JP~TL8eS0U>pYLluRR8qz@A>n^ zV&=p#S{&qaz0oxF@0*AWAKhucp0UU4GWcysR?Rth>Rr!;8Bsc>zn2*N*m(e~>aOHM z!>tin-#kAi96H$KzNSSt;^tgIso?IVY4b(+)qI%v1JH!-YIPQr-NsJISsSms znf&NrOEt?obY(UP2e$}qOGqtu1G!>WZII234;+omAeSNA$+wZ~PR-U$*2*T!#Jtbi zY0CNBDBrzj_rI^#c8be0$~;_9zuxw@O67;9+NY=A+fT13`p?jHYm&Ft6g?XT1_lOC LS3j3^P6Tahpzf06(mb{mo7eq z4my=C35Bkf9H~W+m?(AW_i=DC9`w^Jh6&JRKkI3+y0a{X2VlrQWHFp7Fr zMoOEiBFSeY`3$OxHcAtB+#N(f1a}8_niw_K>yg~&xH}e)*gAfkBO<(BU$QAnzB7Ih zFhc-gM>-vLggT>UQx?2jq_{gL^Cz~R&(9DMP^C_3qKb&{MMOZACPo`o-fph=q)HnD y7Ql!G@5?2BSjc$LPqP>%K$rcjr^V`)gZlt|;X1B)h}wMs000041uU(gHyx`r-rs;+5*=m1p=a2sH$s_g)+s;^}M5>yQv z+yclZO)v;7_Y0nf&F$`Ij^0rNDYIYs8#bJKPfQcmo+RPQ^h$M!Z}Y z2_s=7jD(Re5=H_7@j~+GxOztoq^vX24h@@|07=~z(VF~mrvLx|07*qoM6N<$f>okP AKmY&$ literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1f0.png b/emojis/1f1e8-1f1f0.png new file mode 100644 index 0000000000000000000000000000000000000000..9cb9f2844565a54e585ba67bcd7f9b5e0352cfed GIT binary patch literal 567 zcmV-70?7S|P)m;4YV_G&})ks)>M%AORJRR4U>g;YgBLdAY`aVDFv1SsR6da78&tZm@;xp0ph&8095i~70>Mq-O>d@kT1(9z2lEK4yq`5vFgg|TT8efgGjCQp$B zl0Yq6P{8ZiWqy#9piY9g1o-$fSx|ivMFdoYzohYxz5p+>%UMg5tA+po002ovPDHLk FV1k2E`^f+R literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1f1.png b/emojis/1f1e8-1f1f1.png new file mode 100644 index 0000000000000000000000000000000000000000..8654b2177f39345bca0484f3aaf4266ceeea0734 GIT binary patch literal 284 zcmV+%0ptFOP)Xg8vxulu`RKD<6%Rw`ofcOn$tKfbG1-InTIG}U@-6+6%rjIokT zUTf?@D=aw3^Upd31&Fg?3_kQr_QY>N25$qwhgQz=7q_wa5K0nC5@5mp7QsWS8IKy# i7zo+TYMw2p9NZSn)j6=LNr$We0000D7cE2@aA&OAd{LB7v7jR|cLY1E-a-K$bUz1SUpVOKc6XiOG^c;c#4-0v0EQ zgVlI^ApA&x1L+;qWxMYOQGEjVeCIk}o~QiX12p|Dq}(@XS^xk507*qoM6N<$f@~aR A?*IS* literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1f3.png b/emojis/1f1e8-1f1f3.png new file mode 100644 index 0000000000000000000000000000000000000000..ecbf96cbd915b71f31da4c06535684f9c49c04a7 GIT binary patch literal 292 zcmV+<0o(qGP)1ea zpa~KJp`^4|AYvShEjsXh9G&SlY!rvK1JpRoY%ocB8i#fWH2KE1GgdExOANn>L)#Xh z$(~^+9Sfv}5?aER0skVWar0csp()}JIjj_w0P(>x-d8 zGptYS`&ga1wwo%}t^+*Fq}$_rkyyJYP>>-W-Od69`AUnDMM=h=MML(@2@M%1i-!C$ zXvqE5qak7X3_wYq!8Bo89en5j&oZe`?=!2L0X6s=DzPt3zW@LL07*qoM6N<$f*%@5 AY5)KL literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1f5.png b/emojis/1f1e8-1f1f5.png new file mode 100644 index 0000000000000000000000000000000000000000..49d3cee390e1f86eb4d0e27c323effbe7edd21c1 GIT binary patch literal 195 zcmV;!06hPRP)Py7=_W#8*1`Gte%MrFoFpQ*xT5-fJ0y@VFo%o$Dm;qup@>A zw6TEF_ZOVQ>Naf88LlXSn4d>|;B?%x&~|)oH8WE)4poFJo`5I7HSwtcPq>{h5=O#E x7zra`B#Z>~gzF>T?FE;YK+J!pW_;aQ-4~{*6|KLUMGXJ|002ovPDHLkV1nVwNi+Ze literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1f7.png b/emojis/1f1e8-1f1f7.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8bf34526078720cf99cb71a1c9fca1cf6ebbb3 GIT binary patch literal 288 zcmV+*0pI?KP)9DE**PGMLTlBFgPXFm>huO*T$zo5txM7n$_ z%WgeOa5?!Ij@a?oQs|QRs~Q`T{5fBZTcXnm?!y!Odgut@OWf5NpT+pRsd7>*piA(5 zJ2O5aHfuM=DGFU7e9mK={CtJcS>pBw=#tFqGyhU}U;@@Px+H8~a0n&l{TqrLL3k__ mhE*Y1Y65Zg<6!q%9Niynt2D{SY=}$%0000u zW7z?Nq|du9=5Nc~U7_{gE@apHQ+g}8VpuqiB}xcPZ~pMS>_XW450SeXzWq?~{LTJr z=bnq2me*2x91RzQ-dA8@PWUX7=6~FtiCJMrL*faOkCX1PCGt2sWo*42@NI(7vlvZ* zp2G$SuWDyh$uGE4kiT?)rC*_52UG0v6dq;yD+^=QjchYjl^(y5yqv_4WqwG={>za! nU%Sq>p0d?hf$m9z;`-P7k~@4`E?Y4$Ffe$!`njxgN@xNAmPV&O literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1fb.png b/emojis/1f1e8-1f1fb.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc4815f944795b12858dfd41bbd2f288fb0bffd GIT binary patch literal 347 zcmV-h0i^zkP)o0~xrg-$ZLIg`~JAaeyqqru`; zFoVTp^3SFPbyEX4HsEl+Pf>Kt9Z(_oJp4PMuvaFXuK_9krj2uTLppy1WSNCXQGqP8 z%PDhGLU{2$`Nd~`Lm4CD*eabf6j-HFxFMT)VH#84UFU;E{Yz|YhvKU6P8^lN9Y_+V z8N!&&(?dQ*>@|U|Fi!0QPCXnRVU!UOh@^Xbr^x{t4Vc6nm$vz0TO<<;bh>ed67fFW z-T>M^hjWp+oufoEsqJB!p43Xp$4QFiAF3j6VT~J tnWBwzb%S#a91X_!R`7iTIDVqc=@sU#QPa64$~6E0002ovPDHLkV1hW=kCgxb literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1fc.png b/emojis/1f1e8-1f1fc.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b91be3c1a35bac126541fa5db706deefd6e399 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|`q_ z;vGG>pUW|j;lRWDmaP5O^y2X6XT!{?mz*OQq zSF?LQI8W{7{v+_x>Fib8`+MBG%>Q_m-Fe2qz`)??>gTe~DWM4f D*2iw~ literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1fd.png b/emojis/1f1e8-1f1fd.png new file mode 100644 index 0000000000000000000000000000000000000000..1b521a6e77780bd02dc138632f4447a52c9aee08 GIT binary patch literal 510 zcmV&gH6Z8i8z^blm|}* zzmR0;!UEGrO0+#%vuTSvhSA=DZ(6wV-eILK*mUHVH&}kRNn4{hNY)!A-CHE@DW>9@ zxsrte@|zaVzwnc?l#socq}dGc%1v%wJ47t%&i~4XA)E zijMw>L%G^Q2ZrA<+QNHvlG6Mny1a`m3MlZy(R7sar}xl}zq+5|%vI_iMhF`2hS-N^ z&$N7Q0a12Bj2GHlx@WiQECP${lo9HM1d4z39kd0aeEW=5Z2$lO07*qoM6N<$f`+s1 A-~a#s literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1fe.png b/emojis/1f1e8-1f1fe.png new file mode 100644 index 0000000000000000000000000000000000000000..baef68b99dd1e8abe1f19d2cefa5eee9d5a3c15a GIT binary patch literal 333 zcmV-T0kZyyP)SAD5C2YTwOZ9$dj=GlP0xFOZmhM}K$$s+$c_SKrsc;3 z%E}a^|Asbi!3_u*k_2pg*{}@!Eac`m1BH%MEGu>TDG&2tr6nu)L7v<-Jb# zv&Hl4BWbgUAS5v)h_WT}nF1T f2{>d<${&3LLgPv8zb3=q00000NkvXXu0mjf$ySNJ literal 0 HcmV?d00001 diff --git a/emojis/1f1e8-1f1ff.png b/emojis/1f1e8-1f1ff.png new file mode 100644 index 0000000000000000000000000000000000000000..ac404b0e3cadaf40d218856b89c0115d4b026f04 GIT binary patch literal 385 zcmV-{0e=38P)9yG=Vu*;8c zUQV74F1&lI^QyP4g`+WkSu@Q2`2Dl%{5n=18}gO)o^}P!b;z1w22k^wEAi7%R8qK{ zA0O5^tAPWuW|#qdA`((Kl5#~7R(@u*AFZk);}5cCm;ro~e9S6m;aJ5#&|B{7aw{ML zhyWsh2p|H803vYwqH0;lE-fRI&!8TTA57Wl+~(bt(pf2}0`+lx!39-U9&QT@Rz#B^ zBsjnU2ms7idMgH#mo)O8al<*m0mSFBNqr+7QadU|6^%)-qru6ESv$4E01p~tLx>=Y fcI#+{geH9eCkk+lLuBl>00000NkvXXu0mjf0mGdB literal 0 HcmV?d00001 diff --git a/emojis/1f1e9-1f1ea.png b/emojis/1f1e9-1f1ea.png new file mode 100644 index 0000000000000000000000000000000000000000..1664fe83962a2729ce866af36c921b23366125d4 GIT binary patch literal 205 zcmV;;05boHP)ECis>jrK7QE z5HsK_{GP=%UDq8;DQB#`<~B{!C6`jZur)*5w(kjB^9@O*{N46yU!D!Y8sKa%(B~ z*Jn`_mFL_tgBNjhXso5z zNXM)+mG4GwG9%@u0{kccFb1kh#vcGQ{`GYr!^*B596qw0(fMKWxl$~fef;E)@cDO> z=x4f5dpb|ON~NI)sj-2avcSgB5S8_2d?i-aot@asTe&pqV{5jI%90j-nOLG*Zsqy? zZRp-V)=cRS!<_gr!DYn;E6Wal24^^Gj^K_7>m8#G%5SGQ~+?|gzrX=V++5$UU7(BmDBvzo_ zYD5HPBbu_5#2<>%|8yg2uE5CHJY9|&s;kPl?p3I*HsX@23HfG7=Oi4?W@f@M!ixz+ z$G}ixOZnrb?M;=8-i{#Yb@VuGOaxYlr#9(z*;tOQad#n3PfHOxT`@O9DeUzooU$b; z#wL_!1ci5k;h14hXPwC93z~O)372dU6{ZqK|A=5Qm(y;q&~8sHqpAhEJ8FcoluS*} j#Xl6$=tCZbjz{zl1wJ)W8D4$Z00000NkvXXu0mjfnA3jQ literal 0 HcmV?d00001 diff --git a/emojis/1f1e9-1f1ef.png b/emojis/1f1e9-1f1ef.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed815f702bf48f3c9d5f7c025f5831397c36678 GIT binary patch literal 401 zcmV;C0dD?@P)Z$QHAWk$j zgv#41Q(yLfmsRrcHgp>y4pA8EvjkF^ek(SYb@fo6XcA3I(w6juH#_3G6N6S=2n-#P zwCPF}D-5j3v>lttIE|Pi0y-f1po(|AtZz`?+Cf*UeDY;%KI`aoLNqlBgTkONC=3dN z!k{oHY(7}SY4lSG9Zw+rBrOe7;z#(E^Wc)dv1vWylV@rUN6t)Fyi;%6XX zfSZHka{&^DI}=9II8Tpvbi4=W3DLGJ=n)0Zad>rsEek?~k@RMM&2Rd2hFve&y}nc3 zWrS!%(W8WpQXq;DVH_{O2g7~p{QK)RHSr@5@jp%8))|xA1F={w*yyKang9R*07*qo IM6N<$g2kO{ivR!s literal 0 HcmV?d00001 diff --git a/emojis/1f1e9-1f1f2.png b/emojis/1f1e9-1f1f2.png new file mode 100644 index 0000000000000000000000000000000000000000..e45677393534fdaedbc6401591ac3f61b4f65c28 GIT binary patch literal 360 zcmV-u0hj)XP)nKHzaRfj<7lsdZPkD{Ka?^a#mSJFRi$Z;X>?jB zJdkyPZCwF23(#zPfz4Nh*NL^pB>cS5EALgX-D znwp~$#mNv=)=6Oo3GN~Ww@IHSlmdU$z!Be1LFLR2ePhlR$v)AOZo;fd0?;SwFln-0000aC3Ma^oE{?e`k!umKQuTvIm6ekg}8Hb6MKl z{bL#>hfW`ep9>W_l%5$m1ETb3oE915Ga-N|eF~u_1p&#FokVBOn!+hRA`F3TxPx>a2hYP@aRUqZttQqYQ?ebRTh1p)8Z3H zl{<8#dv%SD2~2El(so<8r%)=RBM3;iV&IMbJCAe)vJ>`yhv`jyP^klh#0EhK a0{R1dZb_iQ&gF^#0000XMS%p35>XA!LgCQfA82uDvc;|c zAOx*}(9)JP6a+yRNC=7`DaEZVyA!r8s&2Fynl?6E_CnJ zay^?nN~>DL&H`aN)bF?1-q@U%Ko|pe8|L2N`|1v-@r{Y?^#>IO(ZYp}FgWf(=^_g7aaprbZb!NPz&9LgykjyvHvs0T&@i6a*{Jf)P7} z^HD*ChY*%Rr!ctfgT$)COc~Z^#_`NfBHR`x5_rO(A>ld*)0Knm2U*Ah?^${#28i=b7&N>OlfMe*6qnyR)37j1@@c>HV z0s)NG*p@$*(i)>i9Be}uzK@kNj#aVVRJsKeSdMo&^V_ni^f^!=hlbMo0;rH*Rqmd; z{1L4|EJ02|L}Zbr`j{UBzl^>+B#A84R)^P}F54R}X#@-U^CO3jWX_0O!jG0Qm)C?8HgZ-p|9tI)cvw|5`xM_xpN<1{)b#f;rg}Vqs2)g2m z!Eqbi-@r}cq4pTU*Vm4JWRfP|!vQak0<*J>o7^~_z^x-t#X5?Um>Wfk2!}fb@?$0L zFN3(rrTtml1`;=2!#@M+9I2;AL$rgL?BB#qa zyy&M6%C6HSO~sVT<3(;=?eddU>74IqfW_}wQVTe9>P@TwAzJe+q_ZkjoisRUe!=+w bjX(MV=Hgs7du_U~voc8=lv~ zHS@Rs{_*G5+UdF9dsqIiyyxFu8@KJQps}*ft-PrQ#`kPAr{vp9tA5hf^HOP@M5K`NC znYFXmbdo|zCTg;q!gizNvr4i|L~tCHb>K94&PaMycy7 zgE%&15T}!iJ|XpLfv6Zn5u%S?#x(hzz4JH!Kt(C>{s~c>(?k>S`Syg`Gx+H%hiA8R zj|Vi-1XL?ewVa_ML$#a}q6l!O*C?Hm9h_r(mxM@B6g5FL|AY`-mL=Ozz=X|B#9Dim kW!XK@rJXPD{R2C<2CTv{fY$MA(f|Me07*qoM6N<$f;v2T+W-In literal 0 HcmV?d00001 diff --git a/emojis/1f1ea-1f1ed.png b/emojis/1f1ea-1f1ed.png new file mode 100644 index 0000000000000000000000000000000000000000..7a7af4cd972afb8fec06fa39d7760f595913a17f GIT binary patch literal 351 zcmV-l0igbgP)J2^`NEqmWgtZ~J*}unRmX46`Er^V zqB0@tItEVJ*es!#z@pHX2;nTSIhBBprHDcpN~5@RR>;+^kjw%D;m0T5Lxb7;23Qv3 zXh!(YE!qdiDAz?q=w8=R?=HRCEmjC3f`}j@hzKHr<}YE0@jM2UEsP_KkmVfCMU^lS z$2S3~yHn1Cp>YpZstnB_4& x!vtQ`>VCfPl!=vr6w&l7-&7Q(EvBKF(l?iFO~x*Qedz!I002ovPDHLkV1kirn+N~^ literal 0 HcmV?d00001 diff --git a/emojis/1f1ea-1f1f7.png b/emojis/1f1ea-1f1f7.png new file mode 100644 index 0000000000000000000000000000000000000000..2338a490150bbfada3d128fd7abdb9e426b92cd3 GIT binary patch literal 511 zcmV3mC+qpyCpUAV{tyk;GiCc}%1(6{Xd|&xij`uHLzMWq7$!*U)~1 zlhE`y^zGIY=_IS3m)^^`C6Ap_kB&1$h2znrXWgIXpQgTsx%e@~dUJ`jc9u-vW{?c% zF9aa`p7=4tAxSFHn$PmS#Y#5IjTd=3BOkZqu~X{NafYby3+rB}@PL`b-4VgA!K_RP z-dRLy6H>h}=bLHPn@g;w`0WwnZJWWPBpuGu zs#S1{WxBZnD#B5QpA;q^47<-R;1<4l2T*m|--&*IPW5X{}api)FgG0xH5W zeUi=kcD1*7rmi9>PNon3WAi2LYyn&R6`K(M=sQedox7}A5f}gf002ovPDHLkV1ffE B@GJlT literal 0 HcmV?d00001 diff --git a/emojis/1f1ea-1f1f8.png b/emojis/1f1ea-1f1f8.png new file mode 100644 index 0000000000000000000000000000000000000000..106343e04edcfd9ac68085444d44987760262a89 GIT binary patch literal 321 zcmV-H0lxl;P)0Knm2U*Ah?^${#28i=b7&N>OlfMe*6qnyR)37j1@@c>HV z0s)NG*p@$*(i)>i9Be}uzK@kNj#aVVRJsKeSdMo&^V_ni^f^!=hlbMo0;rH*Rqmd; z{1L4|EJ02|L}Zbr`j{UBzl^>+B#A84R)^P}F54R}X#@-U^COIW{6cj3cjzAHk&{3oiC`}A#b0!UmNzC=GY415vC_O?Is)N5D|D9M`$liQ+ed>Py zq%=8(Q;y!f^(SeZU}%%MZ&!J}w2a`8@;T&b$y#-mi@7=x)1@u2xe1(m#(+u4(g_$~YXR6d% z88({J%;zf@QWK=CyHSFQJ0;5T3)I^gwz>(NQHaauHksISD3(fC@1q1McikW;%Qnxg zWuEmG@zN5p5BA#-FSnkOb+&Oa2vUFroF?F`)8xtK3%si2C&SnLhNaNlM)ClNF~;yU oe=tDvNFj6?pE7?#faD+j0NRk8nTRZIvj6}907*qoM6N<$f`jGcwg3PC literal 0 HcmV?d00001 diff --git a/emojis/1f1ea-1f1fa.png b/emojis/1f1ea-1f1fa.png new file mode 100644 index 0000000000000000000000000000000000000000..8505a09704d1937fccf33fb9d67444d6680eb935 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|>`S z@s1ue%sLdn(D3lTt#IJ`s1P<64S)Tqno9)5EN-f=$ zV&QAPOR8}F)=Sw`^&maaE!gnFl()K@zuNAXZdcgyWBPWdBvp;u(PGiFRXU$7HB<>} zQrKd_>C_#;87J*rGO1;b=qJl{g&jU6?I)fj$0(<_s(1=*N^>#X{&-SSp8K^Pk4Y*z z%{D_V zx1?;+x*&h`qT~UQ6%!0*RPvUAq z`iN7Zi0`)U$Xl%soQVjXhg-Z;iYOH+kWyai&Fm$FFaT;?W@l#aT-`4-?J+cJb!`#= O0000_jBvC@89Xg222>WAgWXfnP73cQ8Pfa^?@L+c6^WndfYnS`a#X7sL z_YF-Oqa8|o<74!CUe`9UgPevzb1Gf+pzGOF>v3NU_5K5SARhH_ ztVURD?PfA1Sheg(pjq8Nn6)AncxGmBU%bLyUE{>^Jf6Y^k(W>CD9^D)1VlgtMEK1% zow+0q+nkjQ6bj^LlYpi~*F@1_ms1aK5V1c~%$kT-^E_~gPsdMUBxAh;tyg*oT3*b? z{S-egvUc|l!TKPxKAVZkD4yy{V*W4G*SQ2%zN76%zS>ciD;h9{Z(SYmPE61{?GOto z%!LJRe+x00c1RozqMc2aszMa~o8-f7_}`d}pE-i|wUE(em?KsMef|IuS2L`D_5?wt za9z!ip`aSjE{DdGg!4u8>^l-0>x{MRgQmlnt|&^BA-McvutgbyW}Ap&zWX$xN)O)A zM~qxpC%YP^#AKI}Qpb;_B^t^CWO8xV%L9~{?2;&hRE15dGtQqBkY?}FrbhP&aucxl nJ2?%5rf4+@800000NkvXXu0mjfY8LzJ literal 0 HcmV?d00001 diff --git a/emojis/1f1eb-1f1f0.png b/emojis/1f1eb-1f1f0.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac15c56043f4f8197d7f6c4f6dee8d77142c5ef GIT binary patch literal 576 zcmV-G0>Ax60V0Y$PR?K~W|#LkyvyQ(f{RbqEQA=oAsX z5WQTqL&t~?frnlQvV#OdW#kMqy|v6*b4`(rk#Bn!+4ld{qjd3-(xK0X|4y|uw;gLe z*LL~Ryu#!(D?H!mg>RR9Cm8Dfa>k# zl$cJ0WpmRBBGI_VD2$HrM`3yvayb_LV}M|h*$Ti-O+zhLPkR~okzzEK#ozCTXdL6b z`zSZgdfE2*BRY{L)7?Y5^A1~rpBVWzgRd_E^KmBTb0`#N8a6XDk-*>26601&HO7l> z+Ji1`@3*sF6rB$SDR$Vn-n5BB1CxY-`mH7O3_OKw3cIV6stuI{0OQD&cW41EY5GHe zZbJ8cM~m?Ml|n=Tf=(u>+gpjpWiS-;kk2Nu*zy{*uq3Y`k3x%JDHH^)1 z2;ku_qS+$IW(dbJEOYQ%!~i*^P}c-Z)<8j0kPZXECy0+V5|-KcN52500oZfI>I(A! O0000ROBpl0T~2cfY1fB*V=WswY1qC zG$$BQW7BH|l2WPpdHyvt91cez8hjoWPVJwZmx|@e8Ib00KI*mVg(;RRmw-zMM=LKK zcSfE5BuK<<9hK^PfW-ve#a0zkq^qy@zcSloC4B?ti zESbJt+t_u17GMDjSip+V9E`nJzycPqfCVh@Sg%!2S-5Y)Ph@-A$2WHX0000 z7;73V20^gMFp62>R+U3UblaPy7=_W#8*1`Gte%MrFoFpQ*xT5-fJ0y@VFo%o$Dm;qup@>A zw6TEF_ZOVQ>Naf88LlXSn4d>|;B?%x&~|)oH8WE)4poFJo`5I7HSwtcPq>{h5=O#E x7zra`B#Z>~gzF>T?FE;YK+J!pW_;aQ-4~{*6|KLUMGXJ|002ovPDHLkV1nVwNi+Ze literal 0 HcmV?d00001 diff --git a/emojis/1f1ec-1f1e6.png b/emojis/1f1ec-1f1e6.png new file mode 100644 index 0000000000000000000000000000000000000000..140bd24ef90eebf01d7704006d3dbb8ef9cd310f GIT binary patch literal 208 zcmV;>05AWEP)zfjJ^Yx)bQYc|C-cVI9^|5XiGh7e|1OkCTAP@)y`oGg*>*?+a)*jg;(+|t{WnMIkVzh`L z(>^S1S`iH`=))qaA(*VlkD@ORN-**;idHI_j_K}~#3?yoQ^k*0DcK<6q*TI;#VEac@A4emj4WFn%XdhJ^L!GK?2 zux}5i+8LAjpC_gpE{MV1l?j_aNBQXWxC&{yUyLcOHC@t2j#<)rZZNqFDX;(1 z6QkvezqLUGGiX)Tf>>{z+PuX0gf=iHC;OfD=U&`W3FRYfLwvwT`+`v0 z$vPoBE(yg4d`ti)5UiISB2}G{fO>KKC~Mawlf6X}5ud|D9p&U?V;qhu|v{e3B&ah%S`qbNkn{F$tHhrvGW~c`83vhLr4PU;V%`Hcm{u1kDhla95n~`W$kGoa7L)hRP)70i9A+yD{%}+L= tNK#WPNK60`^ah%o_;BbH`(d$9zX2;!w}ynE)8haD002ovPDHLkV1lga{$cK zITCB$_?;xlNob5202RE)ji;z~llQpM1l4MQ2*#LQ1yp#J^@n818E!Noj~h+Mk~6aY zkfmzKQqb+Npjr*`s8$32_=lj|VI}l;DJyD!4}br_i*&|XI>Ymy+TX+9Kd>UVQO%P_ z2``){kK%*E!u2^Dr8DNuLlz2?Q_w{=Q4(t;)=0U8ySPHiB_!6Mi>&D)5^JPf!d+Y; zhxH$XM$c97^Rs@)`yYByO>tp-asK@>$l z>h*dRkzZ2Vv490EfB#u`I)KUqJK~O_WG&J-VRD%r; z{RIt8O${|hfm=jL6hwPNq4v`V)AP)`-mAeu!UK$NtNrhuv96l7bkRd=d7HqGyx-=835GU?{hx9+P<%bv@!JgnvYm8mmoa+)ZBUp9 zjx>S^mnNbx_-&uf0}~7;gpRLJMs&cxS$M+=G$F(T;Nz?OjM)Ecmr=hV3<*!fN&$tXrwX} z+BTw*7a-^W%O2f3F2gu`oiXu!oSlrv<6Gz40BCZen9a%iLrOXsk@UL!vhm)(sB`WW zXz`oD#Z3+Z7`2>pZ3S9HT;6RdDLyN03cnNnjts_N_rB;gs=js*@3wg8@Qd*$T2LrG5H@blL<4de4z2y)JbM zzAXu)(s2}meti_k$FMBIvWaB+0#97=KV4LUkI_!e%` zH|W^Gb}2;k8FVNVMIn$HxU>(D8;pbB$Hj@4a;59L-Ux6w&0)6x87trQW4c16;JQKFxRIh~V&vB7xVKJ{jG%!L(bp6A~(FeLUwYDUmM4N z^q4MH50?m^U%nu2exjZ!>X|}+ZE-OF9HI!9ha+u%q|r$@-`Zd{zF;=KAY5BzFHA_A z4O|L`luAsRg!1JdT1iH3#As&veQc_6dALN_xz>cnQjawCNMnHQjz&aqDG<6zf0>0h zOC*hb-jB4&mCi<4eDV~pQUQc+ay&O}=|zOTT8CV6R0eD5MWtU3DRgGRLV79`@qji3 zydjH;_@B0tfq`c>ie3XlILwt`VxhpLJm`C;2*X{0U3$zZxOEe@i^xY%+{t3KiLU$8tS7+2NTPzYWW%2@j{{-Ii%X{=)A2S%T zNQ8A@9c7v!B7u-GLdFOgBV>$-1ZDaT)`4|k9asm}fpv(%b~Es!deNeGe#$)h;hFJ6 z!aPy1j$j>Snn5H$#vo&mF~}GqLHU{ytRq-Qu#R9I!8(F+?)N>5x2^+nB6#ac1LVXjWU(pHkjK73Lk>-k zhCxYgmmL~%e_zp%S9qdffIz&EthZTRRI3(9nPv>b=fv#(dpQ|dOV7G}00000NkvXX Hu0mjfP{2*v literal 0 HcmV?d00001 diff --git a/emojis/1f1ec-1f1f3.png b/emojis/1f1ec-1f1f3.png new file mode 100644 index 0000000000000000000000000000000000000000..e1ab17b0b33068ecc704dd42ce21ba018ba0c801 GIT binary patch literal 199 zcmV;&0671NP)41OFBOL=Ie};qcu*|Rz!W4mM_mm9RsqEf-J(oTM?%u1 z2}w;2qL%wbpNH8k%H_HU&R0On&-T)@Iu1-d-x=rEfr*Z~xh28*2aprvwA%~FiMJ6( z!blhiBVi5jx9AbwKg`? zT(ma2HR^o+1eylY@c^MweHzI19N%E5Z~Cjb%Ic{xYkCZw|j%w!fHE-e0GbL!xiS<=ZNXd?gX*5 z1xqXw2^LTSrWjH6p{=3_4S$qASV};~3Nfw2uf&4xfbeLDyPBfecesAZFg6lm3{1~z zCLd`^+d@6fK3&v=9U(u@?{f8|=GKUV*I*3_#gi)l7kZKroB3siOxbk=sX1U>=?icNi!UC=9A%8TUKHc|( zS#I0{iXTdOiL_Gus&KF_a<-}XlCe@4sU$huMDv*%3_*+FhNTjNwU%)im1B|+NzTw zD-G(dLmZ-0Q+#`S|DaP-#37njLuMiT^KE7!j&DYFA-y a+%nVAtvxAzmsf zFVd|;2nBTtDuVt%fd+a|!Bq8czWd^Z(GuY3p;kaJSfOxumWJBTRK`b0j$YwovS|8qs9T+e#3u0T06f0000NH7>Mi|_}SEMjM3lK3wS zb_NC$5+T8$iBuDnNE3t5mR#$ud3Je~VDS0y@5D}fdR#ZQt(UZl^8=0uOCuCF)xF)l zyB?-oeqqD9ACP$+b1@LWOd=#H1M11^m@BDczSW|6X_oo9G@cbukHjDy{lHn6B2&5M zq&>pIWDgb^6N$l4PZGN+$yj8NVVxq{*H5pkV4^SxG_*8Yl%Jod79a3~ccP+(iNxUc z?vY&nkfS%7mxe6yYKEJdjfuqI+;70WIAyBijOETf_74PABqj<24QyW~S=Cuqaub}F z6V#(T;THgxF9HNxS6zI^6MjK0il;?SRn|&cIsAYl!qN!EO(oFBqr6Td_!Y??eF86n VT|+zNM literal 0 HcmV?d00001 diff --git a/emojis/1f1ec-1f1fc.png b/emojis/1f1ec-1f1fc.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7295be8a185420c23b455ebb2defc3d9b8c300 GIT binary patch literal 282 zcmV+#0pyTHz{ zFgrcC0|tXaA*LWDgr+T&iV4&jis1XWI`v}i+Meb5fX#{OQ_REbmVX2vpSySMS?(85 zr-0{yX$nxMxQ1{c;lz9&2AoNg`8_1NNwkT6;*Inx&bnK+?Gz+Q6?rt7nrO2)M9C}( z&Almw0`k3b7)~F_qsb_srEm7VN;Lu$nG{8wD)MOlbjr651qc@sU`cUHJqlNzXSqIL gbDn_l;*G020;v!;R!LI)`Tzg`07*qoM6N<$f`fH+DgXcg literal 0 HcmV?d00001 diff --git a/emojis/1f1ec-1f1fe.png b/emojis/1f1ec-1f1fe.png new file mode 100644 index 0000000000000000000000000000000000000000..147ae88ee95d6ac41c4a1379791455897767858f GIT binary patch literal 575 zcmV-F0>J%=P)A1vAd;-9jf@4ABz7>ieh`SkPD!Vz*r5(x z!XOVTJVbPg`U6TzIu3rh*$h4uj?hJ+bI5gYi`AKDJW!_F8Y=kqwgwQG8 zRK557KXUTJ7jG!ECyCoVtwLmXxX|QiqqM%te;T@k28cluqjq;p1rrbHiaIf78E^5EkbP{Sn8CVbh^Qk*?d}+A7{L4_sm`x5yPq$3-NA)tPv{=jt7I6VJV$|-A;V&8lDY&f2qc5Rnx0%)b?XbaGmSufH z?c@n%z^7UlJ5KAnn!C(ZqhbnZh|n0}H%`PP)Jemt!~-S$>J9Gjw=fl81hsv=)YM;% z7k2QGxo_(0rMOn%ridB|e-J>g#7fbKl=% zM?y^jR2}t{^vIx$(D8nGn!47WWK7%BnUuI#`s~35r1z3JH`BY%bzvxMjYG3t`!p#` ztvquR2>&7w(yaT|*(3IYE!UH|S+Bt@5t}3s@)Gf3*8JcEwnD%b{Q|8#)o8kVF@pdA N002ovPDHLkV1oT!6j=ZO literal 0 HcmV?d00001 diff --git a/emojis/1f1ed-1f1f0.png b/emojis/1f1ed-1f1f0.png new file mode 100644 index 0000000000000000000000000000000000000000..bb7939306e2813442582e0a73c17da839f8ae8be GIT binary patch literal 459 zcmV;+0W|)JP)-dCeoXyz4?|_qt1`| z66zdjmNZqq&%dD6Sf)6)NIW$Ss+hQ+v(NizyG@oMLxO<(^$CLFFg;f)oE>~3yj&rk zng%gsSu#|WT=gmv_VD#tjicAAhzT%p0o0Qv?<<8ppiG(whykDQo5@G`lVk9njD4&4 zJA$bJF&(O)2_62ZMHh#P&RS7f16|`U2w?a}zW`vOgC<}^f;9jD002ovPDHLkV1m02 B%WMDu literal 0 HcmV?d00001 diff --git a/emojis/1f1ed-1f1f2.png b/emojis/1f1ed-1f1f2.png new file mode 100644 index 0000000000000000000000000000000000000000..686b24386ff616804af0e8f07189662d44c0e26a GIT binary patch literal 559 zcmV+~0?_@5P)e_p}{nebB|(x*30Bl6-eJ;p!@46&tyitYAJ@8Z+9lTkw4xoyhoRLN=WNDTnbai@B0bAAmkhWcj57`ZRapXi1B^ zYhs4+9xBd~F0pO+rk5y!5YwySIkCDnp35zxLCQy{Frb$xPcNR)AVq{fl>Y=y)Uj99 zhMBQ<+U;N%f)LZk)f+Lx*!UfrQ1R>alePb19d-ypO!NB%Z8%zTKuL3@$oO_bmd}8c f!+4g(oTK{z4W2*Vq|)_500000NkvXXu0mjf00VY1 literal 0 HcmV?d00001 diff --git a/emojis/1f1ed-1f1f7.png b/emojis/1f1ed-1f1f7.png new file mode 100644 index 0000000000000000000000000000000000000000..57845ee8dcb32b683417f31639893d96767434d9 GIT binary patch literal 338 zcmV-Y0j>UtP)nla?NLPtGKl>rjUNevF;iom<-2cfSrD`7y}|!lW>`=o+W0 z?nT$8h+IbG$am^9aaoxna>)p!#pU!SPw_0N(!?`+FE>mjJ$^Gqzk<=LU?e@Vl-IZ-%M*g*^D|_5fz)=`!Z~Pw)?_L2XiX9Xh=N5b2?EfXJd%G> z3?Yj}h+|UHwi!m%YEANpw-T$}TT=JlI{KkW9_9NThIypQkJnG2LmmmV`Mb8T?VYM= kt{njmqY3-{yA#Il8yZJUb@;CNAOHXW07*qoM6N<$f}^O7^8f$< literal 0 HcmV?d00001 diff --git a/emojis/1f1ed-1f1f9.png b/emojis/1f1ed-1f1f9.png new file mode 100644 index 0000000000000000000000000000000000000000..44233b0659061c329793497698d9620d291c7f01 GIT binary patch literal 364 zcmV-y0h9iTP)Y;5GC-{5z41&Ci?!rkCHagLJ{6;ig1! zO@!jPY8@+z4_((tfeU;p6Q5S`5CMi!T|eg^L@W-Gkr;OJ{OaH#NuN=r*X=S@zF!@rK~ z>%VFGJI_`{+~|VQ*^1v&C##9SYgq17q{#JPr8tZ7*XhP$yE>wESd?q);v+Kl$!!qm vVbQpveKt+JJ$3&nhtnpHpMSJ7+HLRHAv!l?d2AH}0|SGntDnm{r-UW|u{cOj literal 0 HcmV?d00001 diff --git a/emojis/1f1ee-1f1e8.png b/emojis/1f1ee-1f1e8.png new file mode 100644 index 0000000000000000000000000000000000000000..ad720c5595e10dfee80edf7778cfc796a15ff473 GIT binary patch literal 304 zcmV-00nh%4P)A2<^tnd(-opa9>^$q$fH($+r;lk6egs3D zgp@=@!3)XVn{2Bv8#^&00007#KWV{an^LB{Ts5xE@L+ literal 0 HcmV?d00001 diff --git a/emojis/1f1ee-1f1ea.png b/emojis/1f1ee-1f1ea.png new file mode 100644 index 0000000000000000000000000000000000000000..92bcda936fa880a8a3610b95fa7d54df3080aa91 GIT binary patch literal 200 zcmV;(05|`MP)41OFAd3s&;eRDxCC26P$$@c1i=jWS}>^Ff+Z@OZh%E` z3)EmSh+6I!eI91FSRb3c3%&(PeqwXxu-P)Td=0F+I}>B<)2(p9KY)r1mtE}zROG9L zkuVZQ!blhiBVi;UkuMdW?s;;-w?N5%#@N5F%D#TFB^;A!yy0000YCU-aR4D=r>`Z76^G{KKG>kC7##M36IZ1JaB!r%jsc-4N;_NGDu0$=?&O7 zWe!Z4PH%ve6j?MY(qu?xo>sHYPdw!-p3-X8NoJlbqO~GzYg2J?91!kpv#=8gc_h4j zV-<3CREf31P=NQua$bA7vDV%LRhBb$&b3*)e^fF-!aVRq@&Et;07*qoM6N<$f(z|` A_y7O^ literal 0 HcmV?d00001 diff --git a/emojis/1f1ee-1f1f2.png b/emojis/1f1ee-1f1f2.png new file mode 100644 index 0000000000000000000000000000000000000000..339e561bbab3c1742e7af4c456beaef5ede98efb GIT binary patch literal 342 zcmV-c0jd6pP)DvDLReH?qHSX0^x9se_u4Oa*R%%D!@pBb66wXPrWb%Xy|F$a-muZ*Z(C4!Z&t(us zj!whDtyuU8d|d0D+V(L6qe-N9%k=Ih9eaq6!&8C?0(dQz^wAdI*Do~hZ-`AMX+As= zL=d9&_)Kid;Pdhv&mojb5Gkqe9q@H=#n{RcQ3Mg%-8PlqHZQ`lRwlzw>BP80^x#fB*mh07*qoM6N<$f_o5-lmGw# literal 0 HcmV?d00001 diff --git a/emojis/1f1ee-1f1f3.png b/emojis/1f1ee-1f1f3.png new file mode 100644 index 0000000000000000000000000000000000000000..49154ab8bafe782845935e64de7f767f0eb40307 GIT binary patch literal 270 zcmV+p0rCEcP)omSxQ64!} z#bMU1KPy+1$BkTZJbiq8B8za9kWC+6K1s7)AFwv&VqgMVO_wx^4A#bkp-&k4*eE88 zq96@I8e;;YC`JHd0zgP3uZwm<0s3e6O%V#%aJ!9^`?^j_XHpWnaL@twOn1HGjy UVh%>O3IG5A07*qoM6N<$f;}f`)&Kwi literal 0 HcmV?d00001 diff --git a/emojis/1f1ee-1f1f4.png b/emojis/1f1ee-1f1f4.png new file mode 100644 index 0000000000000000000000000000000000000000..f96b7e2809c3e426789d06acd4d4c2ea33bcc919 GIT binary patch literal 805 zcmV+=1KRwFP)U!D!Y8sKa%(B~ z*Jn`_mFL_tgBNjhXso5z zNXM)+mG4GwG9%@u0{kccFb1kh#vcGQ{`GYr!^*B596qw0(fMKWxl$~fef;E)@cDO> z=x4f5dpb|ON~NI)sj-2avcSgB5S8_2d?i-aot@asTe&pqV{5jI%90j-nOLG*Zsqy? zZRp-V)=cRS!<_gr!DYn;E6Wal24^^Gj^K_7>m8#G%5SGQ~+?|gzrX=V++5$UU7(BmDBvzo_ zYD5HPBbu_5#2<>%|8yg2uE5CHJY9|&s;kPl?p3I*HsX@23HfG7=Oi4?W@f@M!ixz+ z$G}ixOZnrb?M;=8-i{#Yb@VuGOaxYlr#9(z*;tOQad#n3PfHOxT`@O9DeUzooU$b; z#wL_!1ci5k;h14hXPwC93z~O)372dU6{ZqK|A=5Qm(y;q&~8sHqpAhEJ8FcoluS*} j#Xl6$=tCZbjz{zl1wJ)W8D4$Z00000NkvXXu0mjfnA3jQ literal 0 HcmV?d00001 diff --git a/emojis/1f1ee-1f1f6.png b/emojis/1f1ee-1f1f6.png new file mode 100644 index 0000000000000000000000000000000000000000..19ca01515315be7ca14dd74ae30391d5c980e935 GIT binary patch literal 345 zcmV-f0jBK~%-Tzb^w(0KoC@d-r9IXS6G@pc~Y^O&CN?!SegO3!qQ3=W{E?k4@&e>`v}n~kFeDwoX=Z z(?-zN?UR2f`V rXss8elskY&e?ntSNocK!LlV;;;37###inL^00000NkvXXu0mjfx<{5g literal 0 HcmV?d00001 diff --git a/emojis/1f1ee-1f1f7.png b/emojis/1f1ee-1f1f7.png new file mode 100644 index 0000000000000000000000000000000000000000..155fe444a4f29d06c5fed2aadfa2b93bf6e2a37f GIT binary patch literal 286 zcmV+(0pb3MP)&7^iTjPGq@)81 ziYqRE{gbAXlyty`l6?teaN1=Xa^1WlkI9xSzQ&*wUi}EQ=aNUT_<4OtiN>r9>BlFB zy*7CqEOgB$i>74b3A%cKjbP!2Emr9qjKL3E*ho4YV&m~|{`P{6%a`Z k*(HpCD#iRh!Yw+XL6f-U+FNLB z3?j7Y7B@%Vf_Mjk2!|zI!&95rzw^Ms&xe&0cFxP>oF8HBz;=4iQ2O=2#CQ@IkuQgL*nS$*ACx2 z3hzO%_SWgrvTYVoEJ}(zXQ@3;u`Cw{00000NkvXXu0mjf D98yeh|X+7&_81VOB zK~%-TO-Per0KoD8`@HX7H#Xgzf=q;zFs&H$fgVx<2_&n#l;+J3GV)-# z#EIb;Mu*faFZN-HiFA`FJw&HEWF7QSU?35FPz>GNrta%~a!??vgW#dxkN-}YZMj-o znlyFWdz;O|Zeu&ehyw;vnAy$@*dCid<nda*T~1PQC>y~ucy+#4O3PgJs< zMh0_D1*Y;6g5FU=L(`<`?ou57c2rkBnFKo~`4>Tk&6o288hS{5`GNCR7tRq6sjoi? zoaX^3ykh-cgbtKa+E@9&6JXPz8U8dEVuR7%6OvN-rH;zb{jikgd#HJ m8;j{BMFYyFlQ4HJw literal 0 HcmV?d00001 diff --git a/emojis/1f1ef-1f1f2.png b/emojis/1f1ef-1f1f2.png new file mode 100644 index 0000000000000000000000000000000000000000..ec14aaa6ced6bad2c0a79ae63e6c3669bd356ddd GIT binary patch literal 634 zcmV-=0)_pFP)0x9V*Tx@s6J;i6?P%aY$q9+&4igXsMs!j)WDpE_f4O?E6cU+$XZB~urmYzJ;the zuXb52Az5YoEsckZf4FW@+^qhgfe$kN zfLrnV+I~{RdE(=&LdV}wH`eTXC#p>CLdClG!PLF)t{Q;6qk7sJi++LD;xwQ8M(nQZ zK{+->xs-qi=R5&R+@r>G~ihCzZj9!$GW>K9lA@s+1ZRrDrw_2(+4 zP=E}>kg(0!W3CvwW-4XHl0x3^H1e+A(Y)j<%3&J}J3t8jfnaBZbDn?#&SduXWg!Oo zEUu^sC044%#8!!W%GjbEZ7!`ea^m%LfOtN_P@q6TV_nvHcq5aG9?0s8j_UNxH^`|> zP=~z9tzzq0{XDvO&e3AczSVb2N1qo6gFK>Ze4w|(7Q=BfP-*1o=z4{DK6QwGbr^+$ z6;}<6tnGsu>Wa21lXsnQQAQwZI;8~2^SjyZzD}poLL_%-sm_kC)abUv7`AaF#xFL? z>5`+0)8(5=d(35r5Bdv8&Y+fgoAtM+qWYZ8RM>?uvz=sQHWOynAd)k%Cm8nV4>y?Q UujzeaQED@57lY~~ zAF^HtW-gry3=g_20O!UU!dH8o~(M#p7TuK%^!l_woS#LT0N0+7^ z?8*zzSi(@K2?2tGots=h;U!RI>N1J;10D;jt_ z8;=I%e4JWD2e*YAI~Vi*`07(8A5T-G@yGywpG&2^{% literal 0 HcmV?d00001 diff --git a/emojis/1f1f0-1f1ea.png b/emojis/1f1f0-1f1ea.png new file mode 100644 index 0000000000000000000000000000000000000000..594fc41eb3b8fb7b4da87b56e6061942c815183c GIT binary patch literal 344 zcmV-e0jK_nP)*5=@i?jF$&Mxij zA_(0bIw*p=Dw3{>#-wdxPlAhtb0`k|KITr?4SUDV>?4`U3Nx5m({XC0r=~M;x*``f zW+XF-qnuSKa#5qi^E`qez%?YUAqj#2&+{k~xu}_87@~8q-@&-(A%J|h!+E!dj=0`# zDKsA95nuL#*5e0-%e^LNlOa0h;CVoqKyYu_T!}G-ucr!WmZDIUnLq^i{Gw1KSpo(> qvV=cGf(NZ!ClmNTvaajy4@AqQQsYD%6~XDhCLnB8hSW z1O){YCZT{tmNB#5*?GtfT1Es3Qsn#i@8om2{%I>O_kk{NGsNsbxAO83=7zN0&y5|iy84IfPh<3;-7{vs3G!@sAz>z&nOgGa2Rk00000NkvXXu0mjf0b{7* literal 0 HcmV?d00001 diff --git a/emojis/1f1f0-1f1ed.png b/emojis/1f1f0-1f1ed.png new file mode 100644 index 0000000000000000000000000000000000000000..555b891a6879b94612a524bfe130c31f856eb0f9 GIT binary patch literal 360 zcmV-u0hj)XP)M11c&IL4m}V5PK;E3RU+vEU@@FJnxc|O`W$c=g)pbq zyAKWnX?_Ud)124<^(!)U4s%^pGluozAqO;G_QG$lr4Fs5(a!cAg{m*PSI0000d%!8-Ij{CA?K^+r?9ptD0+ zS<|xvs*LpTo|a4Zge&*Rk`mZ3v4u(pLJb;8K?w??vS2IKE`zL60vjfhNU=h}oiLWR zF!2ycDS@C#!!|IzaS~YLp{h+GU!u~uX>c@}ncM2hJeOsXU zYzf5$CI*~7sw=HDp0@GPHH%p?(0Z|)Nw3WMMuhg}O2UyClO7qhYyLpz@8ux2Tq93j zjW9eqM_I9%UWc34_9+h9B&NJF-7j63jj6=r2_8KEL~t{THETCwe9D*b&a5yxxk!C= zKC!sM+o7KvtJq7nlt$m6ha5{fhfA_>IDJH-3Uw#;F}o1p%lJIPR@b#;$xJhq7iZDy zaHG?zIa8g_(1;)ZuXWDV6f(20&hUtz`jh!+H7fevdnhY1Q+3E9iFMtzCQTa|MS)C^Y5O-S7$Dpv;YkX zn7H!?>+*ii$~@PSctYM=dwzLLWszphy{cQEuQin>$VRYVYXnj48%{Q)PmcGG+*x?O z=4XZY;cF=i|2D>boBZ(@=l(nY4>sKVe0S+{`M*ZHrL!p*nh zuQqp2{r6HlGBQVIUFZ+(M1{?g#cRu@ca>e+_B#3Mcj27b47u}VS7bhqY2gd!na6ZX zs6JBP_X@EkYe{}<-zE0=zM+;qZ=fq{X+)78&qol`;+ E01_+IEdT%j literal 0 HcmV?d00001 diff --git a/emojis/1f1f0-1f1f3.png b/emojis/1f1f0-1f1f3.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9102418e68bbeeb9728544b9fce16a54988ae3 GIT binary patch literal 590 zcmV-U0B2tHlIEk&aLnj3*9-xDwrQIq* zmw45RK{^B~G$I|0AOt~$A_y)P5nQSi2QS1l9u(V1TXMXY_wo)iWGK>R>EQR_za!%5 zJ)LfMxK1MUTiZ4}?+m0JpH_tjb*5=zF8A3w)ALn7tO#WBnyR=p zFw}80#01m0(~>t{JgBhAX`)&d2pYD>P#qs+X5fj$7iK&XR-vdnvUx?j>wK)<94?CS zt`T`?=psQK0o;?lr2P1tU`S)CuQcP4@DDy7{ZX=BE}}ok07*qoM6N<$f?1^n=Kufz literal 0 HcmV?d00001 diff --git a/emojis/1f1f0-1f1f5.png b/emojis/1f1f0-1f1f5.png new file mode 100644 index 0000000000000000000000000000000000000000..d484fcb475bc7b26415fbf2024f688ef41ebbacd GIT binary patch literal 374 zcmV-+0g3*JP)*l3f-XG}(}3+v*#)jB)(!GW4G0-N|IUP{!tyJt$!-;w1CYiwr=LpQ@k01>!Tq_z-?OtLfp1Kp`g$P7t|f`lxV!Z literal 0 HcmV?d00001 diff --git a/emojis/1f1f0-1f1f7.png b/emojis/1f1f0-1f1f7.png new file mode 100644 index 0000000000000000000000000000000000000000..34a7312419fce87cbc9978d4286b6a37090a4651 GIT binary patch literal 582 zcmV-M0=fN(P)m|AZruWp z9=vq%5_IT~$mg349}YzpNm06|@aY(vl!W5Jz9Q_~26{0Gsza|A|D8-vPj^J4(IKFm zKeG!Ao6%@=6sS2kIN;Um1+HFc$K`TylD)k>-n?7n#j806E%WsmH znL{bXaY`u?v-9Nhn=B<$Xss#oniOTSpAiup4hPOMC$?>)((CMuB`9(C#j(SFyftUp z-riwteFNLJiG+ff6oo@UEX(54a+2HeTl~mw@TGTvg4(BKcWRzbdizqN!l*7 z($pBB#N<#@V}Qnh9}(g0%tw4`A1%VHr=A_t$-~JxYQui|@7+N}IAU^wmv$AZu7&T0 zlY~`?2I{MPJm6ObhgMeCcs@3P)|$SaFcamqys#?Kz^O8mmiT3~){Kl#va-6y5y#-* z;Nx^A%W^7>uhvT{ljVAQE3vjZ3=z)zJv@07Bhuhu@%;yUUN1|@6e2=(^%+cxLcwN| z=?q`LZDEL@lp@mL;pu>fBT6Z9`ArIi0s(&mpV!Z literal 0 HcmV?d00001 diff --git a/emojis/1f1f0-1f1fc.png b/emojis/1f1f0-1f1fc.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f513b23c9f32dbc67553605749c869608521ea GIT binary patch literal 271 zcmV+q0r38bP)gUp7=YpTocpO8>eg@*!73JuL}D~{=wfEFTCHZk!^Xdmbm?Gd zCyV`Rx*!Z~m2=8qF`dicdAK{3sOB4gFQq;Z5YL8bG?1soe!QKp3%}(ovDJ$ejj@Hy z>nHwf$rXyiiG|0vFZ9l^tL2D8II|FZtau+z5D{Dn7esrA_Hd=Sk#K2$02HoN7>1T3 z1$1nRmQJHkxDt*u&^0NV)(3OI;!b-I^-P+k^|?YM^>5RDen|F#fOs~epVff7`v<(1 VG;Rc*1r;P)!m4sH5NRjtWJ$ZgRY#nc-(KI_nZ#oeI+Rbe5k9Bn_e6dKqZA61;aee7j{e=9{-< zfTkLo`Z8s#eiJ=sAMz^-xUk&lUX==02ZVzDM>xHGxT#szPd>+&&r;oYhem&b?@WP3 zWjPGtD^)5jcW?-YZ=A_#$mN(D7y=ZJPDg+co)v4~vpYJ$xy!YTek{ae4zD@TR^PIV z@_>z9T}5tWl=S%y%Bvy_6jpFCR>Vvqg8-o=K3=E7#3q$Y!p38@H7&-vevRfAeom}3 z@T+k0!UJr};Mj(RM0?*c0xU4*xKT5Jlgu;Yna1~b!Tvbd{ zPzBdj!U3Dpha&`>5OFujzEd$WSqCfc@`d8byL=&_ipOyjj|eoDeBjckk6>|{igW>W z#c`fwOECBg8_TCS(>lSHV3-ho_SDAd+&f08nM0^)RsO&bC@pr_x-L#6WO9Gd;_)j# z>8ybz!ni7x{D!OWDP_{t6Xr)Ej9aMg6y&HvfPWy6G@xCImbEb-2J`e8#0$Vi&&;S8 P00000NkvXXu0mjfdO-kx literal 0 HcmV?d00001 diff --git a/emojis/1f1f0-1f1ff.png b/emojis/1f1f0-1f1ff.png new file mode 100644 index 0000000000000000000000000000000000000000..44a1466b8e9cb310947cdc95618dcb1a9fa1945b GIT binary patch literal 378 zcmV-=0fqjFP)z7{KA*`+eUzN@x=if7)~ugNmjMU05xyz)iRSi$q-mG1**! z8z@~27MsD;rZqI;^t9D#&#Q|>PLQ+)&%?hHPR@796^?);;|Wks-P}g*>TvEReHL!h zjHVfjux><1uhEA0000007*qoM6N<$f;}svSO5S3 literal 0 HcmV?d00001 diff --git a/emojis/1f1f1-1f1e6.png b/emojis/1f1f1-1f1e6.png new file mode 100644 index 0000000000000000000000000000000000000000..75f955699d0188b6aa3d48a1707201d8c58b20dd GIT binary patch literal 303 zcmV+~0nq-5P)548rfwQbm3|+*Dq?-y1?et_|(r1(|d>=a}gIc2#YkvgP+0Npjc)xXG?LPudDu}gz zq<|*XwVdJpF;)Um7?iAKv)sjCx*Tt+xA#X(#i7jYP@F*KPW7sFerQ7 z6Hhk!=WQZo*8TeqA(}`$!58W!OFS& zobs!espby~m{Z+c2DL^f*8T{nvz^7b__$%`z5uc$M8iL#iG%b?@X*0kPgWt!$Q}^xYq#HB`K*(;4f}!pP&08R%1`7uQMAWyZ zIqXoytW&~92q>y(72n{p%$Ho;UD9dqbA39(7atd)!el<-YOsLtN8gELN10TbReb;e002ovPDHLk FV1hAifP4S| literal 0 HcmV?d00001 diff --git a/emojis/1f1f1-1f1e8.png b/emojis/1f1f1-1f1e8.png new file mode 100644 index 0000000000000000000000000000000000000000..ae52ba40bd7246c5479f17b414cda836539acfdf GIT binary patch literal 403 zcmV;E0c`$>P)LPL<0l6e=Nmyr-0cSAMw`|e`39TjtT; zwwWIC+JsPqh}@prS67$AATVyuUKpJvh$6taiCx(*8Y`J-o1V&kQBSVU+K)CSK9T?v zqHfpkkG(=}&@AKz&F9*2cS6)10!VyxiQBy{JKGzYsVg*Hp>3{f(e8EG)+H`J5}#@7 zt+kXY#l}XYLEqSjG?r4O*tGT5!bbrQK!Uzxd*}6uff(LY1D|Ajr*%Qr;@gAr1R3G6 x23YhQIawe}pbnpEd}#uCB|NG?m0yzl(FbKQXQrEtV7CAO002ovPDHLkV1j-2v6cV; literal 0 HcmV?d00001 diff --git a/emojis/1f1f1-1f1ee.png b/emojis/1f1f1-1f1ee.png new file mode 100644 index 0000000000000000000000000000000000000000..7c60af3a040a06842e7573c2a09b733ab7617bba GIT binary patch literal 303 zcmV+~0nq-5P)_x002ovPDHLkV1n6F BhLr#S literal 0 HcmV?d00001 diff --git a/emojis/1f1f1-1f1f0.png b/emojis/1f1f1-1f1f0.png new file mode 100644 index 0000000000000000000000000000000000000000..ff31f6bac1e9bddb2fac0e1a36d3926b648f2671 GIT binary patch literal 488 zcmVP)4cH0D$55`|itextNBgF{Md8Tbjm5T$Cax=p+c$!BscG$-zI+ zx%f+pgR2OlLg`?^K?K2}N~-9!HAcf-a>+H9-pPrP4!J5g_&oe~;@N$1d6>_yEJg0b zln7`_gLYHrPYmSq!v*<=Q1KmV3;9;zU0$ZhL~=IOcn>spXm}I7*QmMBB-5r znXUAQl^1%H7kb2Yx6_O$5(N8_y$=SSqbOQF>kp@?ExA}VkCtsPqDb)li_Xg@1*WY& zCt4{!zcVS6_8A5OrH70t#>nJ`c#a~r(=gd-n8aSMPlDj5Om0X_&Zm8wLv$nL;`OhL zCHU>aa*LU{zOC-o?OWAce`PW1O(38mJG7fR*Y4OH#V`+C>y)>uG#PDNwZ3ieOA(*q etk2(){G%U_l8qI!L~7#z0000TT_oI3gef%!NY-r#G~j+29D+Z)0XzvjifbPOEO?H@j+T zEa{kp2&gq5d5D3yZn%hnGV-2>7-)X?m_!UzJU`Lk`x5?xu`z3>B;_n6b^+w^H-_p= bdRV(3-%?a|l;{MD00000NkvXXu0mjfF)E8^ literal 0 HcmV?d00001 diff --git a/emojis/1f1f1-1f1f8.png b/emojis/1f1f1-1f1f8.png new file mode 100644 index 0000000000000000000000000000000000000000..4814d9ae4af285cdd5c8f276166071ff98a18aaa GIT binary patch literal 283 zcmV+$0p$LPP)fj&@nhIMQ`VxJFXpX*ylTv*E z!KF2@*|^5QNr!aO>$*2=?j24CpNEYT^{aD!E^e7e5oK&I7Hst%4BxE|S!gM19zk*0 z2*^Uqs!!$*J009C72vGcZ<5+_kOg>mg0E}4ONL=rqa<+R1 hR48Z0%jZ2C_X`?3Hznx`6*T|=002ovPDHLkV1f^DayS40 literal 0 HcmV?d00001 diff --git a/emojis/1f1f1-1f1f9.png b/emojis/1f1f1-1f1f9.png new file mode 100644 index 0000000000000000000000000000000000000000..db81293f737f6bf074bcd45cb6518224c73768c1 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|?th z@scG94&0c2Fn7BAiNLc54jee{Aoatf@bCAqX@4C0p7QYU1o5Oa{BiKhRbyjg(`5V9 zXu_?`oZ4{o)dneM)rO}>tn=8s7=)Qy8(e=s&S&#tIK9RAy@Up%5040w8XH^Na-Jv6 z%X@YvO)67tQo72+!&Aevq|rb7-u}!)i2?=&7c~i{$#Sdn85kHCJYD@<);T3K0RZo= BLX-di literal 0 HcmV?d00001 diff --git a/emojis/1f1f1-1f1fa.png b/emojis/1f1f1-1f1fa.png new file mode 100644 index 0000000000000000000000000000000000000000..11a0b27dba21a1c24ff6b296a1eceea39341999c GIT binary patch literal 210 zcmV;@04@KCP)d7nt2qR>uLRD|diRU^&A)4m2nD z!7O13(#Y&DB)Fm literal 0 HcmV?d00001 diff --git a/emojis/1f1f1-1f1fe.png b/emojis/1f1f1-1f1fe.png new file mode 100644 index 0000000000000000000000000000000000000000..17d1ebea4227792e88c41e2283871b8b5d762b24 GIT binary patch literal 279 zcmV+y0qFjTP)B(8np|eT d`_2~J+&^BfGA6-n8WI2i002ovPDHLkV1m7{a}WRk literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1e6.png b/emojis/1f1f2-1f1e6.png new file mode 100644 index 0000000000000000000000000000000000000000..3bfd6dcdd9bd6cf71022ae92dccbbca1e4ba75f8 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|?7e z;vGF`$kh}ebKv3q-;0AaRn#KgU+~2)Sn7};s9x|*N0)c58%NY)mV;TvmHM-Sou&WS zu`MsVTp(Iq$F!s5v(+@$tfTYl8J>L+@cpxtq4-xchb~V-hWeHhGOo`wZbe+Vz~yKB z&`8McT=Lmx>jV#rFKm;Dcs{G0mtXqYPB)&dI#M>dN53r#Ja9RTW$MB{*X9LAEK?tf rKlEpcdHH_TH^&`aYA}0FJ-GK_hVJ9bWv$E%3=9mOu6{1-oD!MSPjcU5!3(tkde@B5s)s<~oqgsy6K32WnRl0r$LJj+>$ynWo1$nso?q)<{Q zVKCk>uj~5Ww(SNl1OkCTAP@)y0)c1W_Xm^v0V2y9`;=}<5&!@I07*qoM6N<$f?Q=u A^#A|> literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1e9.png b/emojis/1f1f2-1f1e9.png new file mode 100644 index 0000000000000000000000000000000000000000..cd8a590e349ec891c08f83a27090d006cc40bcb5 GIT binary patch literal 348 zcmV-i0i*tjP)i%@$$e;~-R3bp4mL^p!ugHh%U4pD4rG%e39%gnTp&%;cFlfoegpx&@7 zrIy*(PwEXz@Mdu_4B>e|)6(Y^1!9~G4rxY+a>8kG4FUEGcVr?V<|l)LPAu6}*qf>& zz+?d-&{00004!K~%-TK}rHq9Khk9i9xJDpjh1v7+gdM6_ResZ**8z9Wn~bs$=5g@GRU=4L2fY0Xkxss|8Jia_wAQ ex5-4%{Lv2tZd_GMl|z{T0000Py7=_W#8*1`Gte%MrFoFpQ*xT5-fJ0y@VFo%o$Dm;qup@>A zw6TEF_ZOVQ>Naf88LlXSn4d>|;B?%x&~|)oH8WE)4poFJo`5I7HSwtcPq>{h5=O#E x7zra`B#Z>~gzF>T?FE;YK+J!pW_;aQ-4~{*6|KLUMGXJ|002ovPDHLkV1nVwNi+Ze literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1ec.png b/emojis/1f1f2-1f1ec.png new file mode 100644 index 0000000000000000000000000000000000000000..f20f72a812babef1502e4883a1f7db754998727f GIT binary patch literal 230 zcmVc(_r67ssEP`^-x`n6eP}dIKqLLz5 zhc0%Ah@>I{ZykdCh=?dG6jvcimxfSLHf$O>bMAX{^L^j;LWM*Wt3$sZ|D7;5b$6;x zUl?#u11Ypj$gyxqs!rb>z)h9aV#ZLesQiw{p5n&NAv#>~fCSuBnS{WJ^LXr9ND56KoP{E2kg)lWwPn!9M*!~UCTJ|`!r!JKdguXU!E3G3jXHW`c1dStew jMobXlFK9ZL_(xv>l!UH0`|F7T00000NkvXXu0mjfYC!m` literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1f0.png b/emojis/1f1f2-1f1f0.png new file mode 100644 index 0000000000000000000000000000000000000000..dd28a2e0ed63f107ecd445f87653fd806e67cd32 GIT binary patch literal 591 zcmV-V0MF#PO~XhS z7)^{D#K0^{Ttp{!2NMQez(@$B6itj$KHA>%uJ@h?9FvQQgTEjDo%N>3)msxx)|PQM z?~>9!4vF*c@rix8hDSn38oe(GGgk<97nyPjGc1(0XzPALDnCb18bN9wo0$5H&oPgf zkVN@el)QjjDiZ9y<&^-s_ukR8HiQu#R(=j&ctph13aAy12uYNm#TQwuwIR&jA{h)h zK_cA7-55sJm!W5dnvg_l6{A)$mL%$#rdIz58+VXl8JC1(pC*iU5k%Ogf%yK6=B7dX zw)-4tpB43a?Ra4*>}QY`5N|er^d%`ll>t3IieMI zX%tT%V9qXKwce(NMcL_`V7RNuWNjI@G(t)%91`*(KF2&_T0v=)M(;dfewv_igDJ~= dPy7=_W#8%!S2kQghTm9;xKf><+vOVC*86837#2(Ds*u~UhO zlr$8yzQ5oc1~;1SmTQ-#1(47=&7W-IFMXfenEQT0Pkm`#$H-;r74QVe-E1Ym6K)}l zgpn{3M#4xK2_pd&;i~9YKJs|$3n1Y?^|^T;7+ecz&KIDm$d9A|0000-!_) z8}w_=x0)R%^)}N^@6XLn+UHNRC`rF zO=*aPV%U!U9e|)I6+d}Godz@(Hi=~Q`Acl^(-kZ%YyyekKShHFt^gBH-|^yMKT=3q z@3mt4KD>^lEp`h#%>JCASSeE15`Gn$;+kO@{P>$iNyR|h07@tX0+)30Ik!w|KSkLr z(@5fAYLlhhB7e^F)aB3fEapC8>Kab!yQ%!j;iS5M z3!J=zeU#oNsbsR)s$1LiJno~safp)wj)8U>T&#XWSF6++nN5VpO%uoB{iEp6n_xHz i1h}12x{#md&Rqh_`gJ-GPh- literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1f3.png b/emojis/1f1f2-1f1f3.png new file mode 100644 index 0000000000000000000000000000000000000000..e70d2e9a25a52a4b7218abfd07afd2e820243380 GIT binary patch literal 331 zcmV-R0kr;!P)T3~4kpme68-c5qIvhbKG;i0pRoJqJ7G}zsIVRXw2oyEh{30 z8S0+v-2ly#13GN=OqnkaC#muN4;QcK8*^MluoDK!&NSP^pN)`Hoik5f;< zU`47&5lS13f%(K`_iTz`eNt?sl!JutnWj)(velVmL&y~y35|Y8Iapvz$Z0Plc`s7g zkFh1>;<3y8xkNasVN0@wyrmxnq+m!t9kMTtg;yPpYUiK^v!{xWfys3n6|jy7%uqda d57~sUp1_o0zUC^X>gMdz;&Ioibxi%zP%mX0ZJ7(=5Dr#i((a$>mWfo~I`X z`?DO^YuF5ycXJDTe6vOr_ep633O>Kx!f1yN`(N2RIcAW?Qf+z!4>KC|BsadL2xR!;r{DdOayT)8<( zU~M~NaPys&XtN;tHFA#JpIJ@f<| zEU%{lgU@snw~sl7<}MlSO7r}9Pxj@G;m$N83vuGfG%A6G-SZ5+(^(pvWf-Q;?92;> zDX}7e7~n?nW=Qt$OZXu9ModUaP}3L(ocv5mN+tymk&+0%r1MAb_q=@Jw{kj|00000 LNkvXXu0mjfiNCf* literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1f6.png b/emojis/1f1f2-1f1f6.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ff03defedef2dd9e6306d442a7302ec02cb326 GIT binary patch literal 554 zcmV+_0@eMAP)f`?NQx!_bq5J|F%&aU!{J*$hM% z`;_6gyo!9Wiq;xiYhFH`#W9m!MGAq-B^eqpDVFQBTAecJCBqCvSIjBBS5@F)85Qa4CE6X0!!RU` zW{1DD4O(le^%ig5?a;ApET3X8UqNhs`Jp+)(13}fP^xhl$q^Yd=~YbSW->m?x$$9M zuYV=;vxK(c)$%NktM^uMxddm&hDjw)@@YHI`iE~gq!fZ?v(46Sfp{!L$JR(85R!j{ zWwz%CxUck4K#CmzbcChkJkL7A&XkQMR~tLul;J1C(qup svbKTSkYsa}GFmK&)6 literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1f7.png b/emojis/1f1f2-1f1f7.png new file mode 100644 index 0000000000000000000000000000000000000000..0e8364f9713b5460c73eb50927469a2bc18e8b9b GIT binary patch literal 326 zcmV-M0lEH(P)vt>C8Ixzn!E32Nh7Ty~1+0$!j+ zw2<6cxrm?`NJy9uH~BR&+lN!=#@~;f6V%FeJlzJ0Y$jqj?kGHc2RLlQ)1CwzG6+EM zCs&bS-%4nn1f+VONBk@W>qrbGdqHZp6f~Teh7&Ve3Q{F|fk|RG(^Cp+MFL#+U9S2r z2~bcg&h-?N#PAZ>bgMo&nGnq_;<-gmCUmPl&w-6eVHkxr@9`dwtyg*hPLE0-e^`u&5N*zjnGp7wK0zf7vW(6Sgv8T3ET@dp`Dy>iCbH?T1_>V15v4Q+N7 z6FAo7ro}HvwstXc>lv#PA$c#H^=d+(O^j1`{SGIaqhme}0)k`19IA4-%c|<6Jr&31 zCp(pfVi9vP4k$`gx(4vl5N@W@Q;kzJ(OhnpQ(yS>DuF)T)_uM8;%T;c+{oZ|ti%WM zkqEweKU39p^nI*kDPywt_!0cIRWui4_`)sdMh(dqZ_#>=25}7za&{=q=bVG31UK)D z(H+aPt1-a-im#Lz^*hm^az| zbcy)49SrMDlt|Vni<{fBlZr)~0yB;}892 z(mM_shX?0k!%F+2MKoQ;)|UCNEn8g`_xw`nT;6bBo}}}Z(7(DRg9VXN$XG!LjiESj z6vr)DNDx(-iEBg;kIY9?*p(%+2>2$#-1-`LPgcSY?-_=WlaP~;lcet-PYmy_F#G9R zalO81N?{jJKmi4m)a&c%nUbaoD4>7>3S2jn-Yz5e1)DNPj%+HcwEzGB07*qoM6N<$ Ef<;?=cmMzZ literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1fa.png b/emojis/1f1f2-1f1fa.png new file mode 100644 index 0000000000000000000000000000000000000000..7eeeb5429fe7d4f19d0f6d1867f4061ed3e83fda GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|^UI z;vGGx=+{&z!Tx}~f>-R2_>CWPX3xIpoA03XLUBzI$D%4WbG?KuRf4n43?+C>o*z4J ze8B#L4PRb?z2$7(T`z@_ci&u7w@)tnqVN2Rw-3i&kH0eE-ao&rf7MG}YoB{`ueuo4 z{i~w#(xR*_R~Om+@7ucK@^)$6wiI6h7Dp&bu`Q^!EUw*mgTe~DWM4f%+yyv literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1fb.png b/emojis/1f1f2-1f1fb.png new file mode 100644 index 0000000000000000000000000000000000000000..ee0d0f8cf633c8b0dec9f833f0c23ab28e23da19 GIT binary patch literal 303 zcmV+~0nq-5P)ZXhGTaL(bW_V98LXfC36AT%KHTy4OKeKmi4m zHHLt86wVD$QoqJ$X!$q?{1OL=;KA#NWb2qBg-Va?6sJw^;FN{D48o)ipkzt}{S zDL*VQ1)8-Sc0QDfrqXq-IB~uQ)Tw4Z$kIMrw*cB6Kik6NBZB|{002ovPDHLkV1l^g BeoX)X literal 0 HcmV?d00001 diff --git a/emojis/1f1f2-1f1fc.png b/emojis/1f1f2-1f1fc.png new file mode 100644 index 0000000000000000000000000000000000000000..0600e5aa8c8dcfb289c45fbcf290de6056e42e58 GIT binary patch literal 325 zcmV-L0lNN)P)mm>EGHK~cPN^!EW#aY~8 z=`Ne_Gy2KJ0a@k4Gp$Na@PDZkM) zq-jXgklbHv(u9l-g(fsG(B}h~ZyQiEr#+_q)g_NYvgg$r@{1 zi3&tsA(5ojtCD1tKw>$V=C=6^GZ~EVA`inMy1Iglfzf|sAC5XP%0|}?V)&bCsBvvhiodUax<7Cdj1HYLvCzzM#b6C23OGmb@dF}` z^Jo-x%O9-;Z=P4U`y|iqzN7VO!u+$4l{KHGFFutQGl(Hgn*=$<_msUuM_org;pu}@ za#^KV%949Ej^`|C(`XsvyqbItz$1q>N& Xv+jFlUqK~%-TO)CUp0KoD8^LXrzSTAePT7;s=dMPQjMJYakgPd_x4x*%#d<5m} zs2r7|T$HrsAO}ilUt+Od*6!>KGsD4|-5mUW{5vr***CV^)Vr9eSA$V zUQ})MJU;tY+G{b21o=wkyzIvsx@4&-edCEVTahTO8H+-^Se|Odw@$-kI}&59JIGb2 zjeIG-#BB?GEP;IxVEH7<<+H^`_MUgwylxH;BM z(uAb-D1d88g2F5b0vDMjJ%}D23WCUk zj$lVoJ5)l^B~KNU(4{OvETT(>fvAZ}UAANoH_NqQI{mx-|7~Cp(PQAD&xij`%Gh!O4fGl|7zey6lBi>}&YtoQB{ zb9*^iVW|)r6y@rp9NjrZ@%jieUybyQTJeXC{2)sb$MlB%bGgpO#p(CNItNfQ(uua5pk-Ttm;PSUHJ< zJ~-^ONQ1b20aBq`)`g@~b@d0Y7)qSa&u&h??&)Vmjgty_Ni5flWp_#|Tw*O`*62Gx W)4#>9eFPQ&0000P)QWOMBT^t=G zTEsU?(hZs!%Lj3oWpN*k;XmPaEH3a zLi~>trztFuUp+f|AY-{5=WmOPkOk&5x<-vjeA_MbUbPI(wKDg&)1n4cTC<7IB{0E_OZm< z%~^iM0SiD6M!3gzq}YQ!6YU9LA39SU`jPno72Nm*O&<;e;ii-Hsewi^Hf1lXeh6EQfrDFvug we5MEsxRKvY*yDP?G_3hRm2BesHd^v`Z@~X0t2HF;CjbBd07*qoM6N<$g2%gHI{*Lx literal 0 HcmV?d00001 diff --git a/emojis/1f1f3-1f1eb.png b/emojis/1f1f3-1f1eb.png new file mode 100644 index 0000000000000000000000000000000000000000..793813ea8622c61362cdff1638b5a5c964f34a8c GIT binary patch literal 315 zcmV-B0mS}^P)o|Xm&{|CyU@8jPos>Lz|zXtgHIH?>_*(fuu@p!>OB-ua5!sTGfpNHm-9#rg10#0p%-%Xa>s7I zghV6g#_!zsp77FHT2U8?MsWFji$W2PJ_w@@7RxLK!T$OVo4GZHU!Ux)mN*Y@n8hFn zycKepB}S7m+0-Hu4YU!Y7gBhs3=VCBwN;d=0Y1Mo0P2dvZRVkw(>JRUMyDYj3c;?;$e)5N`Ex08AFhL<5NlT!1PIFoDf(zg@Pt0Ty5a z3xVqW1LttK6Zi9t+Vw!n=5>A06eW9~d7}G{?5y}OB-HK=WW=c4MLVI+)% ukuVZQ0v6&e2|lz`t_M>7v*N>(!~Fm$?i7OdX_pxQ0000g70JRq;qvQ@a1p}1_Z2002ovPDHLkV1j;@c-H^` literal 0 HcmV?d00001 diff --git a/emojis/1f1f3-1f1f1.png b/emojis/1f1f3-1f1f1.png new file mode 100644 index 0000000000000000000000000000000000000000..108fab6262931ebe1958ab50f56635bcf05b1521 GIT binary patch literal 198 zcmV;%06G7OP)(Lw_l2TC%;Sy&5Dl5Z(E>F##LLv6dkLvYgP z>w||L+Xo(klK=zxh9ayEwN?8DFvdyg-JhAnxk`0AhG6Hh@1b{@9h42MtAt-zmj%;55 zEU3+F2896v$=uc41PM!a3`164jwTa(9u`i{SJ$?aAZ!68rsU+9%GJ~OXur1H>|B5` z{K2M~InzlHwt%eiAI y*c0KoD8^UkYj%)D72yERdmZAOMowoNG^)Es2mo7%lO$U)MS zaN-S`ur=^lq%}8Qof#E}jz5nCh9D_g3Fz4lx`O-`RG(`X@@`~2O z83G$oEa9Q6B`SU4gc z2CKccrEG1=^k;qrq$H;3?>S$WP7(PInPasG?sp>kJ}tWZpQk&MFE5PzLr1V|$>O`$ uMWHQ~I|M=WsEuxiztQdR^C%L9C%OUi0DBkr1U+B?0000zt{?_+rZP$Qp|dpOrv-WG89hvm5fIQ-8M3K9y^vtdjT z!VeKewW1MGWTlq}mk$L@$89E~7OPFj{&Xb^;Y({_*lpnVnhZL1lu~4&`FcEGEY@eD zIAM3ZV2mLP4cq|77>MG8C{D=Xrm+1!mKOju@=3Xeb4vFH{yQtd?sXRr00000NkvXX Hu0mjfisNQ{ literal 0 HcmV?d00001 diff --git a/emojis/1f1f3-1f1fa.png b/emojis/1f1f3-1f1fa.png new file mode 100644 index 0000000000000000000000000000000000000000..f5530bf4da5aa9c3dd7faea2ad996bbcb7644a96 GIT binary patch literal 414 zcmV;P0b%}$P)0KoD8^Slq2kKV2b=M>>|&fqITO3EMxg;EBCi9wNpy2Wx9 zgF#AJMUpHMkt_L%O}aAp=yH=HC#7@uJ~CN2xf}d`{5vr>+|^mwHaLvMBKwf%>tj>VZD8GZijOW)_c_IDW{K`=0}Q)sLXW+W}l@Xxm1biR9^U%rRIdnjsk==0&fQcH$1ZlAiwyJCr{6J;K3wsQZq%TH7+WYS(v_C1UjUbN*$htMl4)PReb zDE;lQI&hxncjpOxp%C3j?cIf)Vz~~j)V-f7G zPU;^%vXjekD0PHI=P36+Ik?~VIGKv`WxIw~H;nWoIG$`_d3_f>aUo61%naG5+pM{U zx+v~U&vB#RlIiZ?Otg$;X@=7d4f&-l@=IF;l-+$xj3|rV|y^LHw%&z)`lvE@$KJ1Ae2U=-P n#X=@+&*%bB;4k%ahUua0IWeQ000000NkvXXu0mjf620iK literal 0 HcmV?d00001 diff --git a/emojis/1f1f4-1f1f2.png b/emojis/1f1f4-1f1f2.png new file mode 100644 index 0000000000000000000000000000000000000000..82a76e0173f7760aaed2da3bee47bd0718a76d74 GIT binary patch literal 274 zcmV+t0qy>YP)h^m!gCU*>&RXK{Ddch_rC5s#LmWrH z&u!8WG7>TpGEz=hftSZQR!B@a;ec^vM=Xw{WNq9J=bLG-5I(&{eo)%VHR*(W^1;O& Y0DGH010k4Ck^lez07*qoM6N<$g2>Qrwg3PC literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1e6.png b/emojis/1f1f5-1f1e6.png new file mode 100644 index 0000000000000000000000000000000000000000..321fcdad6c2a2d4210080a199396e6aeceb12f5b GIT binary patch literal 316 zcmV-C0mJ@@P)^}dPX%t0| zz>uZdIU1e_ecXiG`w9$M%1g_`^DB+(!!e<6=wYP%3Vp--=NAHmzM(JWkIC5q>(a{B zv_$w(*_wv4HK;-8CVFw_=%AkPc6*L*Ji2IQYr1)e8ZaIWmlrf73}|`u>MvO85U^i-!O|FY2~M}Bi3uuT vioy8lv#L`cWv=iyJhp#1^KtLlzYMkO#8*zc?83;vz`)??>gTe~DWM4fYVb=k literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1eb.png b/emojis/1f1f5-1f1eb.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd6d7b883767cca64a6772e4f1bb32037573b1d GIT binary patch literal 317 zcmV-D0mA-?P)&pP**9Ewm& zQ@&NBS7x0@Omuv4$s&p$F^gHikm81#oO3K%K$+!C5!xChU4$+LS^Uu##5+bX((#L9 P00000NkvXXu0mjfLDYqP literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1ec.png b/emojis/1f1f5-1f1ec.png new file mode 100644 index 0000000000000000000000000000000000000000..df254beaf007676ff5232048cd1fe0affd2e1eea GIT binary patch literal 525 zcmV+o0`mQdP)tmB#0Y!hX?m}H z#0USprL&qQ>}m!dHDfxH$<(XWD!aS8v|24nr4oyai)?Oh(~y|YGNkG}qIHk&Z+ukR z;T0^&zQP^~ijjqd1$^IUEJ+fAAYjY^YZ9@n_t}($BoN|nim;<$$b>e=)SJyFQ52C% zr6`xnY;0`sryn@hBt#=z`srbN!tg*brZ|#HrKnUYY;A3Ek{Ecd`aF>XzJ!ir3g|N8 z`#!Z=4W$(S@U|m#afsWK%lZ7x9g(L%mQxT2s#dK^E|=ph6le4cTw|mkt}=Ok P00000NkvXXu0mjfU|H+k literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1ed.png b/emojis/1f1f5-1f1ed.png new file mode 100644 index 0000000000000000000000000000000000000000..a0dde9d6e0e1922cf64f9e007a81dc8cb5f82bb0 GIT binary patch literal 430 zcmV;f0a5;mP)K~%-TJ!?~87=YpXee;k6^QCDJDLD88qBs=WK}0%qD0FH&IyjXMQYu0^ zh+q`K*?u63O9v4r1&1yH5xdwHmrf#d2&G9*;xV3@raA9p|3J!#4qg}kohgmaO{}&@ zmwcN{Fn~*Nw){0fDX&x^$~yet(dnE%iw&#((}`JkCqAEZ-6R7f5M4wY6cT}7}w%grHc39Heszn6k?CRWAu>Y;38gm zo#5RDs1lWgzZ0#a&tJ~fA1)Cd)EQ9KY>&_0Wan!M)hvVg*|YLk*xIfD75;*RT`d3T Y4}-Ui^Sby582|tP07*qoM6N<$f&d}I5C8xG literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1f0.png b/emojis/1f1f5-1f1f0.png new file mode 100644 index 0000000000000000000000000000000000000000..3c9cbacfa1e59c5cc6faef21d674cfaf6d9d1f67 GIT binary patch literal 422 zcmV;X0a^ZuP){@o1-^e?z?=nmjwhF`YZn>u_ zsz87uglU-k)H?MqZ!b+LB{2=tTVGulnU##xBH9=Mh7jpg+V{Dyd)!kn@%r`}sa#e3 z?n`%;k2ytvB7}q_$)zOXb8!!W&U0r*NI~?7?jb-CqVdpBdrog`S8TpGzvvMVsi~SM z?i72BGJ*g@2xsUhxoU1?AKFU$x=mZ%mPZH~mCj3=<2ot=3{%wa>qg=rA=0Vz2!L!p zHjRNhVEBLmcmlA15CeCh)b45qzV^f}ZZ7t$ZR-d?6hG4ka7?g?KcV=eceD(FY5o#e QdH?_b07*qoM6N<$f;lCxCjbBd literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1f1.png b/emojis/1f1f5-1f1f1.png new file mode 100644 index 0000000000000000000000000000000000000000..e34c68f9749c93adc8828981d9342d943116db89 GIT binary patch literal 183 zcmV;o07(CdP)ST6h+a?mzxNQ0idFelo6PM1=778+=6FtN14gorl3g!Qf9!v z;2dt(q?9H}5$L#P&pEF_(g*0NAn9p9Prbo#GMoa(iAVUpW;_DNiHG52I2ll=SDM(4 l)B7<*pyQf-`;~>;{Q>j?7m!v}{zd=*002ovPDHLkV1jE-NR0ph literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1f2.png b/emojis/1f1f5-1f1f2.png new file mode 100644 index 0000000000000000000000000000000000000000..53ea6450862ade4c1c34d768dfc589613152c425 GIT binary patch literal 741 zcmVD+c-DI=4yTQaXB&aE^+KO#2iUmUtrBYGE zgH&>9L5N_h2SF&c?V&B63YE6tL2W7GK}1w+g`)Ng;w2LESv4P|ZZ^qeH#3u&d1d<# z^x&b-!~ah7?cKHeW0gH#+Vigc+nJLb+|!S%-r&C&aqR9G`SY~eF5L6qZ)?x&%h{ZL zwMF-hR>hA!{L2uUjNy?{D|99nxa$_#(m2DU?=bE;{M@y5qk8|;cbQ5$LDEk0b>XZy zJ>j?fzLU-<)Cn~>-b{-XTsgO zjk>q9!<5Wrsf^ZpHNFiyk>srzJw)WWP4&QO})MNmQA3V*ih_50C(LI zHy7L4?Tk@Zi%fE6jd9=MF))<yklJOGLIE-O) zQTH&nnq>3xAVNq~>_?;)16CIT(3-MSWV~%N-A;*I^11SVytns6me1k=!XOl X2`LOFn(BF#00000NkvXXu0mjfm-c1O literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1f3.png b/emojis/1f1f5-1f1f3.png new file mode 100644 index 0000000000000000000000000000000000000000..daee9b9713fed80ff5fabbbb6abe455363157bd2 GIT binary patch literal 536 zcmV+z0_XjSP)m7LGd3wN5{-NjG+q|_GkNyk!?p+KclSlLhLr3!lrX;2VPzT)6I%|mL6n$Cwb z4!=3`MX)TYlW9P3NihsGQHv+DtEX?rm2-pw9?W`C|Z=3FLt&b$B}#f$<0kYw{){XHn_~5TqW$nld8&CXhfR!Cx}? aN525w6ufT$h;vE+0000P(x`tl!uV`b)NTL7u>AgRwl*;-N^KGxM|dEDc_<7_2O2F6905!1lTkWB z+)jJg286K)g~_ML(}GZ$#ec!$7GPKo1<;9gtKNJ);}8|u!yaHoheQKOsobk&Ip_kc f>6g@D4lDNuN9|~qGCgXh00000NkvXXu0mjf1IM8r literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1f8.png b/emojis/1f1f5-1f1f8.png new file mode 100644 index 0000000000000000000000000000000000000000..8e9df727958401161439455b75abf366b4ac64fb GIT binary patch literal 326 zcmV-M0lEH(P)lQ)@OFdph(B7q@Xe zI!b-;g(Zn}CNph-sN}Mo#$!ymGzpE1j>!2O$D^E^Ppp1cMAB>fl88oSSd8_ulsVb(!!EZ-IE|^Wnb}@rrot<;^0H zCgf=&$@{|`!?cw4s<+)`<>k#fP~eI(J<0Q5se1}25E8c}mEt7N=5pA#6c@W~dglRA zM*H%nBqSYEynS$o8$W$!Vk30ExJ)ceGBTZH7)i*h*&>fpa@ literal 0 HcmV?d00001 diff --git a/emojis/1f1f5-1f1fc.png b/emojis/1f1f5-1f1fc.png new file mode 100644 index 0000000000000000000000000000000000000000..126624195c9606fa0c0098c83a65b12220c34721 GIT binary patch literal 365 zcmV-z0h0cSP)SHE-V7RgP zDPZ#tq2;w11F(^J^*T}OoJn7vQqv~;wnVKJqzA`9Vwq+3!|S;I96wgaQtaeY6zXAA zbR-G;5Z9kWHflbxF|mtA2Nj(zkJe^BaEZ$FzzvpJMn&gWGEV{6e2BH^m)WkdB?!dxESWP^F&JG@d zL%`Am(h%cjh)(9AvC@G&V_f@&!oc^jchWmPy}Sw5!@A85DPbkm{C-ur)BWK4$+vk# zNp+ji4>ld;+dN`RK6#`M;x4<;M-Pt_F~*S0Q>?X|bz;IWq=>>HnWq@ca#!bv{0-Yx2e8({AtB4gkt()Fu_UqXPcS0*`qHhn|OjXRgjKkE-?BDUjud+WV(r5kzZ;&=|w^4yVzv`!=KE)07a%45r3n+E#iqXUr9(Zo4Y%*TF8F^ zN(v!Khn=2r9jWENg*B^CXnw~mmNFgjpm?4u}&*b;Yu@O;H2uWsTE2pyLDJW@# zB>il>xk0Z=f5Hdxbn?ynATn>ilz@P);NgNgp5B zHgRrfxUeo2|9X9Ecx1!VPC!_KDy5$}F1fG0{r47BR*I-|`u(8h+mhkMzVS{$4gWAZ zNjZO$38QKfEK(IS^66-N;LVwEL0wA&s@UL;lt16V*D6Uv1Gj@c{=TWp^I_Cp#ZRM& zL0Gm0jfkd4nV-q1k5c2(#KZ6X-qq4%<-+zIh`6AZZ`V#mKOT*F)G;)puy<2`3~{Lu z!}0^?W8yf}GqlLijKG!byGm6pe^|A=%G|1G6j9Hm3DcbqGdzxcc$s8#S0A}zz*Op^ zb9QHMxckW$k3}vGn8e#TyXHj)Vok0XkShk%IO2?+On3b1YA+wYKkbWx5wWxUrB-^g zp;17~8_SU^1-Hk~9%_@+utHo?&*ya2j1LG)c(7}AsnD}xM9laJ cT489>Z|PN>Lv4Hvi~s-t07*qoM6N<$f&#wc9{>OV literal 0 HcmV?d00001 diff --git a/emojis/1f1f7-1f1f4.png b/emojis/1f1f7-1f1f4.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e64187a064b89f122cbab1a8e8e1d94e639e0f GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|?tf z@s1u;SwBrH93&C0ohvJkxV+g|u1k?)>jN^NwF_qF6O^59fXc1_lOCS3j3^P6|6Dj^F&CgN! z`T=Kr3>g)~GE>anAE6x;R;mSQ$NOk-7akE!-z9(W1?NeYSZ17d!b-KEE)KuFu;=HN xBd!~z!5U4&XqrxfQn^;x-CYy=+>GRgE&-o+dzvfEOHcp+002ovPDHLkV1i5Dz{LOn literal 0 HcmV?d00001 diff --git a/emojis/1f1f7-1f1fa.png b/emojis/1f1f7-1f1fa.png new file mode 100644 index 0000000000000000000000000000000000000000..38454d2adef914575ce623c53ff26774e5e1c3b5 GIT binary patch literal 192 zcmV;x06+hUP)N*4W1mDNusu*KuW+M>TC#RGiYGyB>p@5lP1ZXJN>NKx-=y3bsAvg(6f|JJY8xKAI uRy+h)D7RGC`qcHI9)Z9<`I)ynhx-Hd0~&FFf~M{O0000ole0!l2VqY>0x zxI?^DW7NpKSB>j)}hcED2lWRG4XPD&r_r=yo3(M4*q`JJK_222F+v}NSIC^Y}eCF z_J9U=B5NLK@P`0C@)W8>&f!E55yp9rn(_}#Phhc}@aowMzFczry{Q@vBfa4E46CD5m002ovPDHLk FV1fYfv#0<7 literal 0 HcmV?d00001 diff --git a/emojis/1f1f8-1f1e7.png b/emojis/1f1f8-1f1e7.png new file mode 100644 index 0000000000000000000000000000000000000000..497377b03deb8e7a9f32710226f91ce1618aec0b GIT binary patch literal 585 zcmV-P0=E5$P)Kh$$W@VBFLau zCBi4Ah)C*9mQbs;q8@~z#G)~Ro+=#u9YnEeFl&{YDYxD3Zg;z1d)Pw^tbq@GKJecm z&;GN$#Md*DD;RB1BRRS9Qqi!%Di8o0-1;nk*#G*wfuwhN4+># zBm(>eg&G9Fj_r6_nhe|~*XDT^o^Q2V3=sSSg(|mDGD8O=+TQjAIeFK^UT1j`8brH& zsdOZGxh7T75| zL&OvnOSf}XJAwnypi!7#8n>9DLz4j;F-v9Uewctgg5CRWNM3Vsv%I?jI3MR*(_U%#Ge3&B5-0~!x-o_Q~(5l z+Ve`Y_N=S{AP7)Tprh{fQvgx4xi(e?0SE%?uj&o`VL^oe!5<`F?51dQV3%c{iLI*$ zG!{0@(u14^E+{s^&}Mq9#3>a7EyjnYxpx0cNO*$cZ$duUZ$%PG!4TNf^=AaY-y3V@)E<9j|s%cbFO zPN!?jxjPx|>5c-%e06lx3MUd0>*>+ZLO{@PO?R>M*`3R!@HU^uLSac_s?5F1$BH6< zcSX25WNm!h2v1BN``&n$Ph&2Z!eS{S8=kG94ZCot@`*eubkl*eo|rl9 zymqT>e)$ETdzmuR`qz-lJq??X1PbK(jmg34-ksBL%;JuZ)qKbooZ%lx0vp@7bdPjj eJ&vuQ*rFf1HRCQu6ZA^}0000=-_BxBrxRz|M4{k6_rjoH=jRz;^wcW>DG1MzVSR_xoq*$Mpo*mk8b_*s^8&? zk7Sh>%wl+7b1gl4vv2CFxeaMDn^p?VmwITI{@E_@e#E-=2`!#8kkF2ri-iv|)_SK_ zPc2HEe$u09zeP&0>b{lNPqoUbDRI`^ ze{Sw(cscz*RqZ14{3EMkd6FgcnEf^%|B=f4{pj-JA7UOD*4+P?blrE&ZS@7SdUe%` nJHylYJA{1}U(J&>D3a&6?AD*1Yc!F8fq}u()z4*}Q$iB}p1zTD literal 0 HcmV?d00001 diff --git a/emojis/1f1f8-1f1ea.png b/emojis/1f1f8-1f1ea.png new file mode 100644 index 0000000000000000000000000000000000000000..efbfdb00392af58cc51a8f89ee52254430971c80 GIT binary patch literal 261 zcmV+g0s8)lP)e&1%v*AXAQpU?{EzJrqP z3z)8Klypk*BFm+m+zpU-o`BGNaKv?n3e&QIJW-fd zRRVdUD@bBe#ngeIZ1TiYLfj~(4j?pP#BGh{o#sXGl_VxrwxkY~ibEoSIB&Rlx=U}K{2n||8XP9{!t z>0DjM3+Q~D5G`gg@}Sd6yjC96&6$w zy~3!A9YP`^SP%w6FGNrzf?%w&Lx&kF$vJhc(QKpsY_hTK`Ni_|tc@`eZ4<1&Pp*BV{<5T(ML z%1j1IC5n+KAXG`F5m?Fowi*umZI;#L`TAXRBh<)DwtyqLt^0E8$#&dz8s~=fl;cy( z_V(glyNbwC4|kHa{ICmLKNIKpfrogOc-iL<@iM%Z$z&0ICE&&JeGi2xh00004!K~%-T!7GDd9KiAK^SnPpZzf8#)pAhESq^wtPRdD%a`6Z3PtYz3H#tek zX_vV!7v}7hRxWbjz-tb>Xze8=y&eu$OX=Oa9eh6gJ9Stnq$eFGtDuJn3_R-~SeGfs z$pZ<#UEh>Bzq`lM3TJeLRBDL7D8N|Om;ecW z&92`CD2%2l!Y>9z6mopAPdjAXf1n*2+pf|o+pdaAPcIwyY!&~hlPG%Q?|NxrQ)F+a e2o!0NrcGZE%}T5i-|b2O0000nxk`0AhG6Hh@1b{@9h42MtAt-zmj%;55 zEU3+F2896v$=uc41PM!a3`164jwTa(9u`i{SJ$?aAZ!68rsU+9%GJ~OXur1H>|B5` z{K2M~InzlHwt%eiAI yLn}ms47~w4h{#3*Nf`)q6mQ% zNm1tI9m7?FF+Rmv{}65K3)IxPNgD51krcg}d6w$CSPj&2odAb#n30|q;`{elk=vK^ ze6dAU!h`)pQVsMpOG3LbIxdn}k)6-Cl$f1nDc~o!cTORlrXFhw&ZPi6oBEMmsfHmlpK{EiP6FVh@B;NZb0h*wAi_WiH)&y4-;U$=g-!nxX?T<{78g_oA*T9)Kr;JNmT%o_M8Tr1#Ag3*Dv_7J`w! z!w(BR+&)+cMgj!lg@paNW_RjboIM%00000NkvXXu0mjf9&%0B literal 0 HcmV?d00001 diff --git a/emojis/1f1f8-1f1f2.png b/emojis/1f1f8-1f1f2.png new file mode 100644 index 0000000000000000000000000000000000000000..e0cc66073322924b1a6e9044395eb37db4300d8e GIT binary patch literal 397 zcmV;80doF{P)Bs0O=n!-h zhYTu#D!2tm?bpF%0QhYt?0*d>LcpiyJ^9$_#t5VFA0mpul!REgpUh$YAWNePv zsUkUZjaHi3$pI=&0nZbL0EcGxLQrJr^LP}B5S@!uOn~B!A}klF*i3(j7Ecnl(n)=m r7Z@_C_o6b#noq9ZgteLX-ajZr5A?( z6XEZ&k}RLIo@Mgxx7A|B(B`6Ux+gKVJb|KFAg&1P9||Tm84?_Wnl=FvU&q@;nafYVrBQ!$B>6 zF$uy(YNe4{DJDUv79R(pgtwvg>9Y2&Ul=b`j}o#sKE=ftHdQhF*f~N~agr+@aZ(Jw z6hjF)yFQ-*9jcj`ZZFBBEFJ<)R zKrKaEv<1=9=AbP>EzuD*h!~s{hV<}BLkXk%@ z+N?cjzBTtmf zC^bFI(akV9y+Ep3M4;$J(iS!<Ap#J(6hoMR9g1Ns66?^)rcNooTC O0000p`NR7sU9=2CeU5K-==nA!`)82f_w$q3Z?1OxRB~o{?8TS& z3dQq0ib~bbJn4PR|4T;qVtT~wS1EfQ1Q>?!h&mrdqwGqqw(NZ?z%0$WNIBHbbhZH3 z$D`jlE!+=$?2QkT6KnhUPFdqv@Xd&OW`24+M-9&3ur=xH<4tc%vZ%XonRlwz6=@bL z5gYzj`VU$fKJ|82ep!EiQSXHIUAk1P zaj8%9X+?RTjP}*#QH817&i!0*Uf$*us<-;;zjL`f%gyC5ekI4iz`)??>gTe~DWM4f DTWX=Q literal 0 HcmV?d00001 diff --git a/emojis/1f1f8-1f1fb.png b/emojis/1f1f8-1f1fb.png new file mode 100644 index 0000000000000000000000000000000000000000..4f74d58d2c834611c22a51be6c37d8582352c972 GIT binary patch literal 281 zcmV+!0p|XRP)A~z05$S={m zc1#gE9o-UA%2v2+jg>AiZQ`X$h!SKhmJ7<(VrQNxdgc164+wuLLBi+vmaqMaY=2JU zjDIOXLa)=|?PCZ0(7S8^LWn*N=Y-XO8VAoD%n8x=Wl9ka*pS~w&GY1h0T6SX)I1Xf fX6BiZlcS(tSCThKXA*O500000NkvXXu0mjf9m90f literal 0 HcmV?d00001 diff --git a/emojis/1f1f8-1f1fd.png b/emojis/1f1f8-1f1fd.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb29a42c410e4c1534c3f3a6c70a2e51044f09f GIT binary patch literal 406 zcmV;H0crk;P)0KoD8^W2kGmESriMhkrD}|Fj2%^Nq1N8dw1^jGMJAygWr#TCq{bwO&xn%e$6yeu_5G0k8S%J zrq$qB|Awe7)%2+uEM4cfG}EBq*^+On#D#Nxk(8!J z>`;7pJv$+IwTw`C6bDHUkS~Z0?=&TZ%81%;EB}j=qTlZtq{PLq$UR+xFpudvxv? z-AG{5lc;T9sz1FB`Ymu`Pgn{uDP+YYeZoT0D$42muGzV8j(~7?Gf6g7jR;sOkQ9}i~*_GIoWcLfY-=Dht)*V0$+4w%t`uiRGw%xLdL_TS&= zLQcOnnDR?OPe|^`F9kgzF$oNDdL-C~e4i5PeohI&J|s?$m;{FLz~QgV87WPjqcs0z z!Fb?ck{F!6=5w*6qM~m4^h~(;pyHP0d0s^aGKwO)5Ws=<4wlw>Zrk<>7}Cr+%d#~O ZcLnXsHQo18wrc%;z=+FD)1H*B;j>+N%1#&ksjN06o?F_Gu&dITpgPS*TL6|b0@9w@pd;F8v%lx zO-@xujT?>403KBkk=te<_QIojo(Vslqml!=2Hy?wFdk?B^CyndJBaWPgYbt~;9OKx z;X}@0@me?GXo#VSaqc({Ta%NdrpG{wSb-}Xr8AV-j~wUO1y2dzgT|f$GkJ%k-N?;b zO=Q0BGXEtBBK&G@rmeq&dT$e_p@qVpPaz8yC)OhOc~cr7^{$2=D>jON{G`_8i9{|_ zDk)`$+qHas^^Mu3W8PkWi~xocSJzhv2U6q?EPAEL$Mg=bH#Rs{Wq9}r@vct%sVSBc z&nXp^CVzoTfh`n}_jUD31zFp$tV+;z>2O2jeV1r;P)YA$@=|$GsHBvX#KdNo5OZTu&c@t_bMN~+F(im6?Bmey$A2dd?L5|W zy!GVybDgi$gMAWT?<3lFv@jV8b7M<_yR&|7kEQsDgoSQb;gz-bRy==J^yG9s*3=YP z;K)WdbpgptT@(FRhxio-StIXnO%_!Z8r&np=$Aw2WQtv%CMj6VP&wGges6+rydFXE z8Xw;&Rn9~Rhb7ME802zf$3uW2&%^@2YVuAT4N~ZJapl?z3`?v~u=R5NnP%1&x^Y#O zV^2+!zTQc3S%7hG2{*$&(l!JSY@^Eb<9FWhW&Li_He}-|WZU5iJUu}yrLm2m zqic|}11UCDm$1hjr`(@rIu;`=w=fg(8iGGI0j=3v7}@&s%Y3CXehG~ zSwV6^5Kl`a%SbH>x<}k-YZWEY5VdNK&F*=+o)!>^OBBB$o)+Bc%W#nQsMj-$4ksA< zV3DVQ2vEv0qVt+tJ@5EIM7e}+&KY?D@bhO97P?*K95Dc9fWP1%ko=>sAi2y{5YbyB P00000NkvXXu0mjfQ)vcm literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1e8.png b/emojis/1f1f9-1f1e8.png new file mode 100644 index 0000000000000000000000000000000000000000..fac570eb8442f33d873e09a82b9fceda0a54bcb3 GIT binary patch literal 535 zcmV+y0_gpTP)61u=T~phEg|jD=fi)e&b73k zINRCYb?J7>_27t7o+tfWI~Zj0T~>N_}~T)l9B`q3nkx3GGn)5wta|0r7B9^80j}Imb}LSKSuZIM%MK85gf?z#nMzn5$;KHFTp=-y`BW~7t%amOP4)a*oGei`&Qe(vt^EYH zHt=}&45QIH97aWhErO$>p@Kq-;IM5$Yr%0Vx`|XFK-K0lufClm^1K>{3-8fx{(@Dk zkQmuPyRV7sck7v+E8#F%f$UU)%Xj#pz;6bSW%aTqBIi-+3Q*0;EFcmxfdnE6R>|NW ZeFyoX#6W31m|Fk<002ovPDHLkV1j3q{*eFx literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1e9.png b/emojis/1f1f9-1f1e9.png new file mode 100644 index 0000000000000000000000000000000000000000..dabd311e94af7494b75d374ff296757586b8db6d GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|^^P z@s1u;91bRZe?7sX)wqH~-@))j4~eJ|C4+8hxr6Y!L4QNjFJz_4tYp$DkrM+ vv`jP*x*)i&TjI7cNLT%`=XdT$+!cSlK`iIFFef7e0|SGntDnm{r-UW|BWX+b literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1eb.png b/emojis/1f1f9-1f1eb.png new file mode 100644 index 0000000000000000000000000000000000000000..c37f3c58f804f8e974953918a2b9040b9451afe0 GIT binary patch literal 420 zcmV;V0bBlwP)j*xe*HeCFXHlXCC|d! zZKj?M@%h^xj@)~(ETV`gB8rG2qKGIWiYol6pD~e5Fh7&Qv4-(XKkHx0H2gM}F8F?% zhp8BjHB5{rsMb6l3`7XHbU}gL@)27*hZHv|4BQV>J@5!vpiUR6wNuV7TEt^__*p(e zMCqs-Qtxx11t7{bLaya*B*cl=pu+>R>Y|jul;}dUshphpfZ;z&kNyEc0ec;Efy870 O0000P9eOJfviS!cPlSrVAb*on%uUV{4#ogKzhje3@6dMdLr7VFXU8Rj00000 LNkvXXu0mjfLPn6f literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1ed.png b/emojis/1f1f9-1f1ed.png new file mode 100644 index 0000000000000000000000000000000000000000..99cf5391da499c17e6ad934aa81d7c0816e3f173 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|?tl z@s1u`$k!Ag((v&Aox3M)+}y+YEY0BM8nxrvKO{czNgOR#n8CBJbQ?9R% y+3=zLE*rPKtiP;>-yFX@sV*a^-hZba{rj3M8Fe*3mYsotfx*+&&t;ucLK6U#R!*z{ literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1ef.png b/emojis/1f1f9-1f1ef.png new file mode 100644 index 0000000000000000000000000000000000000000..845d2f1dd498f9319eff237b6840d668951c4a70 GIT binary patch literal 275 zcmV+u0qp*XP)jflM!nUT&8TK5h#8&Yp$sO#h1rH%u zL{Q9vU}n~tV3~Cq*TVO>JNbY?1|uNmI{6n&bOxV5LIoMTDj=b{L`P}LE%eK5Mu<9o zBd!2v@r@^3)4GciA)V-Q7|B0!lft{x*rjubgwKceiO5G@F0K5A3n z%&8q#oSn=b+j>I~$|N19o*>76iV(e6Ex3hhT6R>_H0-3?<9*#{m`6Nth4{#CXUUYi Z`vX{~JTdNSO{M?<002ovPDHLkV1fk)Y)AkA literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1f0.png b/emojis/1f1f9-1f1f0.png new file mode 100644 index 0000000000000000000000000000000000000000..82a539257a7b323909227bf35f56bcae04b8d1a8 GIT binary patch literal 496 zcmVde?yl}9fE$GBZOjy z)xrNDBY;$|2&-dF_F2;jU(xKOj|4wkOPY@Z- z0Wl?lHip0CV$76HWOxp6Xt{giB2NoN+?vNh!nRMecb9Utm!Cv33UGv99?vXOtv693 z1jVBb3iqC~=PSCTlx-;{Z(YK&1h46%wc*0q6w$sg9Ru+ii;tdh{KyWKdYEo%&(}Pe zdyDTII+owBQ>!;=a}rfvJ)AfxCkxH z)mWQ>ixh1)v@`?}ZVfdQh6paE*PZWtuMe7nP-*D*!@nb$v7z+NfVC%G#L*9ehN8%` zLJLKGR+w4a(7h|kRRD@!D1Zc*rkwMG@>9nwQ`uS1g#ECGPWweM00i9)P|kS{AD(Mc zKfe=L-8RVB5)-0|AgC)HT~N+>E|EwenM^{{2ibA4s>Y`@ncfVAjZw|@pOliXVE6^K zEGw5vrBEmoz&S_h{E}W=x2Z3bySx_S(G{w(D0%ZAB~d;oe$WiVKr9wRtyaS)+qUtA zpeM}pJd{c$G@DI0jsw$xILb!E#$t%KZslA3EMVeAS@;FRH^*_1ur>c=H=-t_hDu)e z-o3QY1;e+w8Ri~tSpmI}ta2kvC=m335rWF*e8|k&hVJbLmI^@8y9zm-9!@V%x+h)4 n(GP-#qR5kn$r1d8hCg}-!qban0u7to00000NkvXXu0mjfoF2rl literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1f2.png b/emojis/1f1f9-1f1f2.png new file mode 100644 index 0000000000000000000000000000000000000000..5be97cb518a0ce720c9ad09821bd2627bc51a799 GIT binary patch literal 402 zcmV;D0d4+?P)@k$!7cI=fk6$#H6DTWT~5ORT8nvtGyOD& zA}AC+R*dAsIfC$mxWZ?kwds}i;3MIB2iq(1WM_GIKIyX(fbbiQPvGq)#JkZD_3%C0 z9}Gu3*}P67{7zG1JmEChfc4?>VidkFx4=>6g1;zAL=3%74p%{!oDIY-T33>-77q^y{h9XFVJLb?J1O^U)cT1x` z5H-}$(&kWa6TX0U&efrF3fivs3fAEFv2x-ZU2UM+K#ApyZ%Dd@2I?6o^9N1Twgk%L z3P50iN`Wj=2GfdMv0jt>m<`{(jRzX<1u2pYrWHA%lyTP&DtuaHP9kGkkt2g-PM}z? zNq6_i=EWJ)msh?%MySI*34t`pKS|~YX2UnHkM^0Ic39utVQs5Ia{uH(kS57s<0~DU zv-)dor|XMD@F%gTKN XYwk{{WjTny00000NkvXXu0mjfmi&s5 literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1f4.png b/emojis/1f1f9-1f1f4.png new file mode 100644 index 0000000000000000000000000000000000000000..5c9099c7b2dd65529cdc90df8de45ce35965d8a4 GIT binary patch literal 285 zcmV+&0pk9NP)W_0ng8^Ws8lM{+f14|bKRpj|A;We zq8Y7m1hzG*GHHoCWM^*&6oAFt(6S2sal9@?7VV?(rip^%L zX_`ik#v&bSL;Wh{;x)8DV3$U*MA_~?WoAQBmE*X&s;cC0EX=OobSq}(5e@qwu!oTs zEsm)<=2;{zvn;F2vTPoTh1tB{qmYNYYuJOpKJ@hs%hBl<%uF<1rD@ubB#H7RqV&JJ z*HqGesE%C-v{3&gSX?tNna9z%WVKq2QmJJ1O-?XU=!QacaXNMoXrun)r{&b#Yx==> zSfVJ(5Jl1Ao0_C+(a|c=*`Z?_>80%+032E{{ua&7LJ56dw=$njQIaH4sc&D1OJjFr zBK09p`UeJ=YM--C00jU700DpiKmZ^B5R9C-*&}Ped3XQXyJRv~sZ=&I-&eAyhp&#{ a!2Jiuf7}YnB_sL(0000k literal 0 HcmV?d00001 diff --git a/emojis/1f1f9-1f1fb.png b/emojis/1f1f9-1f1fb.png new file mode 100644 index 0000000000000000000000000000000000000000..3cfdb29d334653245acdc7e755fcd43c28619437 GIT binary patch literal 634 zcmV-=0)_pFP)y{_r)OqpVv^PnNlFn)K@Jv_4pGq}R7;f7 z(hy}}L(m`;5srmWK`x3&WIvC?gxR~?njin zv*^Xe3WqX@YJ;)G^+YUZmJxm9C&~}e;3O<95gG6UniyRa2g&K=B#ba^rgC`0J^DjC z>7FPj#x__|S6_VYIBAIn#-<#W-+v^0^9E@fGZ=`=q|NZ*Sf{A)wJ~9O>6#8SO}I< zAfS|BmqlvxuaaU95#wMbo>pgiH@!=Qx&DJRPqf z5_Pdcu?D*`i4oD1c^?yR3safdg4;34@cd?0Q@|Lj2%00=cPUJIja^Kp%rullY5r8h z@O%Nk7&QcaR3jIGB)-!K?PG^9EeEFMi+yZmuQJAZ|L*k-AZ zpi!-EeY9GKv*~ncd_UYvQx$R;IJQ7T#Av&H^wR5{x4^!e#MqZSPLHC-0Q3RN)#my3MD{L z^4J9(zI@{FjiBVQmV_dNf`ozu2-#d{6)p^P0hhm-EA%ZeRv5D(p`aDA?NSQ_?D&2F O0000}M{P)%v|39MB#Tv49F@3~`b8B*6j~LG{jh~v z6pWWa;4Z;J>4~ zGs%?ERzC!YIBJLz{P7ijS-!Po&s8((b7{$tGQy0uHID$^fEtoax;J9J_xRo{-JdS% zLV{31Tr@L)H=qgv9j6%6bt5vdSY0VNE!y;H@I**RbyurCt5ZIhl z-SNSu@}$xe%4Abf2@tAaHy;)X01Q+p1bOPwc27#x$J2?P8p90Ete z4D>|bGrEb@ZlmpvsQl;cc{^oocSUW8wp%3BhHH{SNufMTUnTPAuvH@G^i?7$loU$n x4cAZSmHT?B!3%*vAP@)y0)ar_alY6a-4C9$8#3B151s%3002ovPDHLkV1jodNAdsw literal 0 HcmV?d00001 diff --git a/emojis/1f1fa-1f1ec.png b/emojis/1f1fa-1f1ec.png new file mode 100644 index 0000000000000000000000000000000000000000..46fd6b673163593d67830b888b123e5d58f3f4be GIT binary patch literal 308 zcmV-40n7f0P)_uo$VyCeGX##8xJW zSj@hGkKhY*Am>6PC8=+4Su zkDT5ehmO_@>R>3UiK0000R2a-7=|E<0*&YTm}Zjh>pLOS zOyapd`m0Cd@){|Kq(G2J#BiJz@pz1o7c?e)bjb6r-QEye;}0MiJSD|ni?HBMu>5KL2KRV1;MGP&aW^G b$&kJQ?M7$fX{&y^00000NkvXXu0mjfn)0fc literal 0 HcmV?d00001 diff --git a/emojis/1f1fa-1f1f8.png b/emojis/1f1fa-1f1f8.png new file mode 100644 index 0000000000000000000000000000000000000000..b9bc8ecff9ab22f4c9ae792b8ac39c1567c999ec GIT binary patch literal 381 zcmV-@0fPRCP)R2a-7=|E<0*&YTm}Zjh>pLOS zOyapd`m0Cd@){|Kq(G2J#BiJz@pz1o7c?e)bjb6r-QEye;}0MiJSD|ni?HBMu>5KL2KRV1;MGP&aW^G b$&kJQ?M7$fX{&y^00000NkvXXu0mjfn)0fc literal 0 HcmV?d00001 diff --git a/emojis/1f1fa-1f1fe.png b/emojis/1f1fa-1f1fe.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8dec2fcd71db91a5e0d6c1290879674544c789 GIT binary patch literal 365 zcmV-z0h0cSP)yjReil{fT#{5!FcIbPgcn@`6gDj?b|w9yL)q!f&; zTu^H`e8WPstG3n`a?zlUhiW+tyMz}S!A`7#Fj0m;8G;T{DiTt0vysQTKBaBFfq6@8 zHjF*6MDb{jA0!pp!*J@jwnHLeQ?E&6^B$>P(uWnEUtKy;2uUlHA~JNzL*1ZnFo+wT z0NF$S>XF)$Lnn$)t^O%`$4z3R72eHZn$bznaK1l-=V>}o+u1T-0ze87zzx5p4o>dy zL!IqS4G0ZoA}NqqVMw;x?#cQbKB00000 LNkvXXu0mjf7xJ1F literal 0 HcmV?d00001 diff --git a/emojis/1f1fa-1f1ff.png b/emojis/1f1fa-1f1ff.png new file mode 100644 index 0000000000000000000000000000000000000000..2379bf4aeb225c4a8bd2c6c1e0bdeeff768779fb GIT binary patch literal 286 zcmV+(0pb3MP)vh_|cXf+}_ZSM;vVi+>IwZXK(nP z;;SIcJx*R&#;(dt+EJvlCn>jx4$8;KI(=E^%Rln&Co$nE#8V+}y2~ kqDl)0`I{u|-nUt~50x1*yl~)OT>t<807*qoM6N<$f_ET!SO5S3 literal 0 HcmV?d00001 diff --git a/emojis/1f1fb-1f1e6.png b/emojis/1f1fb-1f1e6.png new file mode 100644 index 0000000000000000000000000000000000000000..74ed280689f8a84ef96d3cdb301fa36c238c1b35 GIT binary patch literal 345 zcmV-f0jBK~%-T&q@M80KnnjjI-_*nSX)~A*qz7&OSqzp1@b|9(ecK1M~u&q7FeI z^a9Z>DyXB7P)P}^G1=@)>_H5?%+jInEVVXU&DrVUha-b zj3y=VAaVhPQWcYIv-0`MTDgjpIZ_f2&L)(jH;T8Xd_96$ZQ-0HCGlX*6c;~JkPSAX zBH!@@V+<*U2Njl3jRTn7Bb8#azRR2<16SJtDfvx0QFzB!6hS`Ef*UFw9kwHV)D>Fc1=Co_Q~K=MaFWMpD)nZ;qd00000NkvXXu0mjfqX&;} literal 0 HcmV?d00001 diff --git a/emojis/1f1fb-1f1e8.png b/emojis/1f1fb-1f1e8.png new file mode 100644 index 0000000000000000000000000000000000000000..a319a0430a57a68e55eac5e530546790927d26cc GIT binary patch literal 294 zcmV+>0oneEP)t)KUVQ)#%P>t zlC%IKR&jQ8EI`ESV&R{J4n-YNHJemTKv73@(Kvjy8)W4nuix8%<-R)LV)uhUwJg$j z)Fwb-@ev$)V#wnOtp#Hhc|4&f1{a~jAe{0v4|$x248kd0G#1|BBCLMwpn}Umzg19)^_Xxg3LAT=ASzp0H`VQAwzdddbps=s9ehc5_L+5zqu2Rx`bA(-MtNSR4L9E zkFPb>p>cSFLq_9F{yik9NM(OprsMsMuS0yY`~C=X{1Q(Kf%%&kiPU(bOEh z&*WtG#a}uK(-4WY%2}s7aL4h&8pjK((;c|dDrcr45)?WL->alyKawcIek6UblA;iI z^9TOvVUw>!4;zIzNk3SJ4h$)7s9i~~eqp&yz+pAh`y_6$aX&FWN8Kt?N*MqE002ov JPDHLkV1mxcgZ}^k literal 0 HcmV?d00001 diff --git a/emojis/1f1fb-1f1ec.png b/emojis/1f1fb-1f1ec.png new file mode 100644 index 0000000000000000000000000000000000000000..90e2af61f816e51a7478d129687af8a3d0a142c8 GIT binary patch literal 563 zcmV-30?hr1P)NwMVsprP1(ck7*p{H@q*0eMICdr+c%k8Aet(RZ;jWi;C=1fW5z0$Gg!NGGetoeBg zj@0;Qs`fD(-NV53XZ(>;QT<>a!Eiw1otQ+Azec{U(vqH|IG>~T)d;O6-}pfUL_h>Y z_@&ZRGYJH60C#B_$=ldd3D&7)FAa57G&D}|ajlqbYdM^tW-K0MDzS*}(lO>vp29fT zjMdhH4hHyiv4^70!%WsU^Te#cvJ|OI9PwtT3YW9EI!uwrpg>*+ zaP8&@r-zn^M9OLLXDP_$6#J`d*`f_ra+-DKf%8L%C>#-nXIDTXxC?J_MR+(kjR@?m z2g?vDLI#VT0NZ^wX@1hS3yuf{wkz18a78F^9Km&kSlB~NS%mTA3PImic9ccgT_qHl zY#`__=0f`mLS7Gd-=&c3XRb8mdA}>cqj)KbaIdfdk7aPI)uN+u8pqY#AFZW-I7{Ak zQG|OJfJ*+&2NRJ_l)4NA_&aGt`V>2R*$mAleFudR!_l}`g9rcs002ovPDHLkV1gg2 B2?78B literal 0 HcmV?d00001 diff --git a/emojis/1f1fb-1f1ee.png b/emojis/1f1fb-1f1ee.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff103086df7dae5985cccf8151e8a546d3d28f4 GIT binary patch literal 578 zcmV-I0=@l-P)HArp| zt&Wb>R!ameaYUmHQKAsl(jZh&U^k@V-vd*-F1>r-r+c?_2&$pahyPB-#>UR(a=8&8 z&Y#&3kx`q=Ql$*7wIgl+t9AO?)bc8XM12;5Yc1u|ys1!nyf>K!JC^`KriYU;4d z4?v<+TZSPhV@gw)(iBquNDw=YrmkizHGX0MFgV4>n6KlgP4IfnRdb-nl~*mQtLH!T6UF**y^q zH4#Th);qK{w(@M|1LgE}nmgyIa|}`I&~juBKXZeLr6vk%TZ94y1uQie4#sf=zE`@K z`23XO!V~s&L}@uSh0;Jg>%saYT0O~7cLzq`Vm3~oV5w=07(y{O!RYC06jo;mB1Lv} zyd~t<5AbO2C|3?`;kkxT+Ovc#JJlVaJ=KoySk!4mf*;Jfecb=FNME*%ovgyVK!#tq zj!P)m-AgC~j9=Q12-_&kTSsItP#po{{DufSZ5WYJ8>qendie{gis2vq1YcyUKt|w> Q(^b literal 0 HcmV?d00001 diff --git a/emojis/1f1fb-1f1f3.png b/emojis/1f1fb-1f1f3.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8b998a6447638a90f3555789d7d4cd11622cb6 GIT binary patch literal 252 zcmV^Cs`iTxr&Tl0X`LstsV;CQ(a#uBY;p!DA5Qq8bL-G zMFCHN8K<;I7oN`BCh7J8mBFAaO0pA~p7MlM77M~~M|AGa@%yk^?oNj1_2R#izT(QrgbDukW0&$ZkFS=_ znaQQp=KR{Vzxkq^9=8OW+!xdU+8XCuI_|&M-hR+B@btHLEMr&GBJFx z1Zu0`SHH{rhQ&^@f_QHTx5$u<>1;SSG%I6(woiUwi9AS?`V$74O$bCbR$&!WB@M7x#DDa nyim4BDu79Mn)QZvM9+N#x;#$4DLOAJ00000NkvXXu0mjf3N4H{ literal 0 HcmV?d00001 diff --git a/emojis/1f1fc-1f1f8.png b/emojis/1f1fc-1f1f8.png new file mode 100644 index 0000000000000000000000000000000000000000..2b6f638881733bb6754e3bc7312354c6f61c7bfc GIT binary patch literal 337 zcmV-X0j~auP)H^3V> zo4C2S`fos#1cpk|5^am+RTDHODpnbI9!wlzVXF+gR0WXLH8pVyW_Z(lFfg?1pJTgs zfp7Truv?R`OGf}4BI5a3{b^~@?%%b2gPAGrCkjTWXjV}GaHcZKb8Tny_P!J7$EVl1 zja4^TD>?yw=SsYa;zaHrp190Rd22fAcs+U9@Jys2Fcig!>J-e!^%Xa`YIrk9NlGx@ zS%ylsnUM+)2t;@zm@x{S%`G!NV*rE?f*AsgpGe6Ae8EUfU`zsI5&&BGzZUK3`Eo_G jssOV18^0cQ4=`~rNElT2EB!N1`TTXa|PQorq6CjKt<+h{R%% z=;Q-*VPNt|q+N&-iAq~qjrQI{MU!eS2?oC(|IP?ZuSJw^bQSROGkG){Qu#)AfL`jf zD2bE;Z;PZVU#L*2*c6^Cd}1&zfL`7RVGx@Q;%{$eAv#E#$3<6%qT8ov^|)Aw4&rZb zCN>+y6b2sxk`K16IZb7`&z9JXr>MHTEl{%=Phl8vn#y9?ni@f!_RdCdB5{x_x!FDrQMOFBjwY$f6ctV+ zkOl%Y$d%meUks5cD!!4HXcjS81-#UGdTHYP&d)dUXf~uqC(tDLCBYxP0(}#07I|g- QMF0Q*07*qoM6N<$g20}&MF0Q* literal 0 HcmV?d00001 diff --git a/emojis/1f1fe-1f1ea.png b/emojis/1f1fe-1f1ea.png new file mode 100644 index 0000000000000000000000000000000000000000..47f96ef4afb97e1069f218782338bffce67be22d GIT binary patch literal 194 zcmV;z06qVSP)=Qn)5| z-VB#l-1o6KbMf1*cku>nm}h+bzIWTZ_y#f!&Mxi+$h6CXlHGltXxP>9fQF!CODSlW wl+qssK}mptc7q8aoV@o}V9h*Zt@Xj;CX*l(meNu-G5`Po07*qoM6N<$f+c56DF6Tf literal 0 HcmV?d00001 diff --git a/emojis/1f1fe-1f1f9.png b/emojis/1f1fe-1f1f9.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1b2d9b806d8398ccc9a1207d2167fe6da4e26a GIT binary patch literal 532 zcmV+v0_**WP)CQE;UJF7ANm9-CIbJLs6ovMMrH= zigG+eIS#besqGkQ0wjKf_xK4?77PXhR&_cZw9=$mPRK8YT7NhrS!6VQi=pKAmeEK*<*hMP^0$G-`WTtUp94MLM687bU*6 z2*O(6v#}Pi;@l{uo{7i-5OF26F0H`wJ9$yEVyu*UZA9c4IHqPC&7T-Yvr0tJ{G%V0 W*Q|nkJDFkt0000Xt literal 0 HcmV?d00001 diff --git a/emojis/1f1ff-1f1e6.png b/emojis/1f1ff-1f1e6.png new file mode 100644 index 0000000000000000000000000000000000000000..178709f65dd5812091609b69f0884c227407346f GIT binary patch literal 529 zcmV+s0`C2ZP)-G71yUTvK53TkKhs%`FvL>zTeh`I?iRBdI{Ngu5 znnqIFZ&TFFKQK)xky7}T{iqa4U6&)K?2g?&?e5d(^ZtBZru^WS+o}EF@xXsa9sN5q zD$_M`e_+^dyEjArv!@nB7|ppJ(Kyj)-xmSe6Q-@kvblQBv$#Ha%aBUhL~~!Y={#<{ za$9L35aW6AjrCrS)Smo>z^*Qa(WjCQfY8_)Ev(?$o!;;Mf?=xzuavVqS$L=jsyK+hoC)|zvsFIB1HxaCa@fT(g2#AF6uXHR+*icsoBhT2jR{BdR zs~qSi5y?wzPx|EmEP7`P8rjl=cR{&&(x@2eu1UH55(fquX#A3su)B`^CbD{gh^)G~zzT z#(>tQ)rhh`d?vILPQF+l5O5Q@%&SBb7@;1iM|M*l1FhgkG=a6(oKh!v9wu&wiKY3W zy-MF$G=ZbLyq%{xSN)*b%UM}YT^zm{3o;5a3Ni{Z3V88PokTl!8;%QGYABk*d!l## c;LOZ@1BX5{Pxy{ChyVZp07*qoM6N<$f>?=g4%P))~wY^9I#xZ(Gul=*2szCCMRuYt+vw2$pNPc zr5tdPT-e1)BlXL{%f(w!YAsq)v}Uni%*;Q)Z#npU_;+Gp+|zeoa}uH=XQc=NkygSy zt(L-Tn|oT!uHA)ca;7MTAlITQ%~tzh?=Y?LW**P|^t!K*5~HdW1*X?C>Qa~3oQp&c zR&k$1v5?0ImDjU;CK6aag6O-$bdOG;eYmJvj?nm?%+!#WdFbM~CUmdch7NZme`mLF=`c5#HqYD=Y8|zpXW>|U8 zLM1;^6iAPc7vU%KlHqtejQeyROGh3f6yJm(5x?Q_+|Q8b3hBi#mC@7B`&!Jd-Gym# zrnrcgV3a^Uh>>}3-}T#3h>Dz*A_yVViqdJ(wOq?zNdD*x0ugMz+C|&l00000NkvXX Hu0mjfaVWu@ literal 0 HcmV?d00001 diff --git a/emojis/1f201.png b/emojis/1f201.png new file mode 100644 index 0000000000000000000000000000000000000000..7f81f8d0437a98e06b9d7fd4b7b5edb06438d530 GIT binary patch literal 345 zcmV-f0jBK~$x|F-rnb0KoD8d%o*B?p_%R(ltcE6$n8PMIWLM;NH|wtDC!Hv==Qk zMqj|Kp-pHJES!=^mw1+$>1)*s1-;)-?4Dho_+eBAG_x_CX1yr=Fe(F@+36sR$`a7b zPfHR~LO|McKrqHy_~`cWoD{AjiR=Ch`0fu;*}$cAw1p6i(Tj>ot&J3dz4c{A2_O@= z9A8&aEz{%l_KCQBs448PQM#{j^}s*pg&oqKLNbYEDvJdHl7u7)sU^>0JLeM@PJ_6}2su4qc@Pjt+u|gJ|$iP>KpVHYyIT zS?nMpb#f60>#s=^6m<~9&7ne2kXmfCnx-CUlgs7(>Xiny%{?6A?rN1e9W(h|tR#o178;8Q-^q>9a@3SQcY@2AN;_gApO7EQ`@ydA=^KV2p6_ z&PyuaYs54gK3A7HbMqMkw&v00BIjp%q5lc>00WR-3Lv<9qqE zP(wsWQY07=?!B3#V}#i5Z5|hnPjLV39BDM0$a^+N5A5gCiGw_RSK-yidD3W7xVC1t zbc!$4I#YLF^S-jkW;7|9VZ^cP4-gUlM*#sTM1(B}GP%)-ddABi1|0emgulN{{RPm2 VmxW?P&Kdv!002ovPDHLkV1gZz*z^DZ literal 0 HcmV?d00001 diff --git a/emojis/1f21a.png b/emojis/1f21a.png new file mode 100644 index 0000000000000000000000000000000000000000..241fb79991542fc0f4c68d0869c35b6afb95b023 GIT binary patch literal 593 zcmV-X0GdI950zya=GEuxMukfdygE*wTi;AbHtc+tiuYoxH@h3$4UVzes%us(c%K`W6 z3vOkMDwm%_wwICJP2A>Zq?AMctl?ItkkSSr3lxDQQo*fG5^}j|LT+P*kju|gqo_d! ffg(p&RLJAM(agu#VpK`W00000NkvXXu0mjf^W6=x literal 0 HcmV?d00001 diff --git a/emojis/1f22f.png b/emojis/1f22f.png new file mode 100644 index 0000000000000000000000000000000000000000..b12caac7297a306d811ae190096fd9513484047b GIT binary patch literal 584 zcmV-O0=NB%P)f*>-yMNnBC z>XL_uit6CSQ-|o!(Svm9W<*dIHOlCafq^p1n3SnoZ*FbQ_lpN_@Q5({e8h#v#|9%U z<}hHfJr1ZLEz)8R0~Xt7ff&{Ri-5LBCx&dm6SL#|ho$kCbmviGb{ruz270ejr%7xh zO3%(T1HD%`wC4mt5}yzn^}31FbPT-#UDF9mgLC_DQrcMOTYjF2%s8vX?+77KO5u_C zn#~x;yU(!0>Y%x?m3KxHmCZ5_r*5<9R`Cd-aXx*E(diMKat@Egw_M2b$ztv z=H@ukb(+!lBPiwKNko&R+WQES_*RQQn9Mw<%}!8bhAhtRyH1Uvn`HADf+Sm5uQ)uK zx`V>SlZYni?Knt~#85Qshf31WCXFELXYA|C}MHSSe7f6xf2JDHsAAw$D+DYkvUQ W_O2Sn54D#70000c!U-}PsGrhV^p3wj^5gYR#ibT z-avRu2NfrepeN$!8yi7Nd>S565+<^5C+iyO2sYGF*4K-9{}Fm~jPSNj^p-f$-X5IU zB=+ZTs9c^RiN{T)NsT-N1^LN$;JP?7vt*yW!1*~xe&P**vMA>07%G>?C-LabjZ|G2 zWd70(gp?%D4-@KYBYN-v3&Xc?Ga2Tu+@$*QDMFhP_yR|(>rb;pWpkv*o}g8hqZ|ii z*%THQvEF_{t~bCb@aOvszweIV%*{igK#_*W&E!A`!kgQXMk(R#U91%9NRawC&2kzZ z88z6@e+Y!&e}YDYiot#suHMGY;*%^>bL}k3 zwpqM$kMd)ElWLES52)f&su}?MxIW{sM42&s;{vAzuIh002ov JPDHLkV1l14A9er$ literal 0 HcmV?d00001 diff --git a/emojis/1f233.png b/emojis/1f233.png new file mode 100644 index 0000000000000000000000000000000000000000..97ad4460dac8140d438400cf7615b369296316fa GIT binary patch literal 529 zcmV+s0`C2ZP)& z-TPvwDzW$gVgwTrCNCbv_u7aEm1URd;w-BCW9f=m!@)yIrt+@{0_E1-vrHG?F`he2 zWu?J5rPk%UnZH&x`13bC+9uz7oE|ZszkvTccp8YWv=6?}p37NOOAOW9@I9tysDShoW4)J%KSo&)(rUEx*n2 z(`kA%P@dkOqgH9sVd<(nO=cdH5n)@ZPb8t=<~6*Z_nhi$y5PQbjQ<> z7ujU004TbrEGP&-afQU-0OGphFO=j8Jz1B`%5!wsqMVzfbx@-dK?glq7iW2a+Tt3A ztLtQ5KSR1V=tL4{fqnN5>Bo<#Ev@12ec)Ua;l3$QfAyA=_q(7q7p$)n4>Z5Y5r_1X z9CCPw=Eu(@R6lX8qhorfCeY1*pD$N9`}UnbByEYo0sP_)jdxqfn=aBBCN8WTaJafo z-@|(d+vb9#?R3Ay>3)f8e{J=0lO00000NkvXXu0mjfvCG-= literal 0 HcmV?d00001 diff --git a/emojis/1f235.png b/emojis/1f235.png new file mode 100644 index 0000000000000000000000000000000000000000..82652e6c50955e9716f151c938c624dcac518968 GIT binary patch literal 627 zcmV-(0*w8MP)LL-@Dwp<$bf!}`mw(>&-hT09i?N%Zk9ZmBJl|xP zBY?%mWF_<~O@=uFSZtgnU_=2diqv2&<&5?yLRInT(J;c$sbHx+q1Hh>La^of5Jq?# zc07T;y_w*^1)S*_RI7?$Z#RXdEW)SZE~Y6_dqS;)6fHk_Mb&{$lz@rZu?K%Ff@0|S zT3aw;5k$bm*Vw??=tn3>JQ_t>eGq&ab3@nALiO06#xY_M{yu(=n^{8N-pumT*Eq>p zgsvlrji(KVVvnd$b6o13T6E5 zQS_E3WIm5asR{rRBnU%C_%tdhl&Lv&jLiLqtP^05PqO*a8T`9;;%{%mnN3kiqsWMc z(Ha|AdG-eD=wU#R8omKS;IWPzq_+D6NI>wPMp16!2Q%jekdDjh+fmR|)=7zH<;6R4 z6Tfh#?tl=KXh0UQWZuEeEaA!jPEyHDXK>RQDr6Oj><6-JTvkfi_YY|W#2DCaXKerg N002ovPDHLkV1kLJB4_{r literal 0 HcmV?d00001 diff --git a/emojis/1f236.png b/emojis/1f236.png new file mode 100644 index 0000000000000000000000000000000000000000..172ef999d0182a008fcf46e925d1fd679cc8de69 GIT binary patch literal 466 zcmV;@0WJQCP)4cH7{KxW^S*B`ceR(HLj_ZvbqTJ5NCk_CgJ?Tdzd+qXK0}a# zi?fSP!9k?9gM%G(5LC#}FCY=x5FD=FHH~>63EahSv`BtG`P_`Q8g<(SV&;={d%k5F zb=wAF<`*~Wrfql;kim0MJ%WMP?TV;4}S z#DWVcbDTlbBeKpKsHY%7jd1-vWsY+RAV?4stZu`22%{8KndK4cH7{KxW^S*C#7wsh}f*E3xq0XU*Yr$IFJLu}*<_D;e?hZkm zgnopsLWj~0b*P}wF+`a(GPR8Ntq1uw{J7=#2UKNAesV`*@S&>N_{TK2cD4M7aA6 zL_n2{V;T1VskSHxYTOb)$vAvsu$`BfYMTO60^{&Ge5TCe_aQeIpUIQ3PWbv1pTi?T z4XJi;Pj@LOJp?iM93H8*zy+AbCIvPG1fL^M45sm%e@Ac7>4-cD*Rkzwe1;tRWD6EE zbb7`8lsreq29#fXVg6$uP%@^zLHX4IqzO8kfGT;8Ofu*C_$}#VNM8E)lIxRqNNEj? z|KM{#3`C%$lOcDgqVX7Isn`t0Ne_rwT|5}4AN~WUfLwA77v8M^00009RQ5I;KTB@UswsL@U7py=q9y<4HhAE3dlo8%7^ ze}S9emRIyos8rlHH!uBMAs3?(rUyE+k!Cn&6)PLehn# zi+k*V5QH=@3@q=W7r)}kkut8dhMxP3Cx*t!TE~PmFFc)oC;QXDE3EEe?=DEM5Ajra z6E(d~NE2{4q=~R5!V?3-h~gN+M0j#I0_O;60@?2)^wJiC(;Ikld=B}cf-0@!IUMQF zAA~f4taU=xI-#eqx`(~HAiX~1Et3DF$&p?i;Ql?3M*}fnc!lj;@{U+G+qMS8^e=9< a?anhCzjch9)1Ey50000j%_Y_}@9xP#0wFd-em}8v@c7MKAY2A) z2IFWb8M#2X4A>0L7Em?-n;yonjWxE1oyb&zF1A635DcBnV;2kTx^b1nom<$&0@0Z% zjA(@6D;Gfs(sOqa;Se1LZDu^i$nEQBrBIbB&DAxua*0e&F?8w}_JtYHfMFnnphME8 zTZ*kW9|#^gfXt+j$ppf(XfCgyzI~@3Nt;)1uyOwpfqi=kPL30t*iZf03sj|wRxbTW zx`Yl-5G|a>OpanEMu}aTYr&!rE!Zh(|&qGz#@#+owk#x8o;rvnT^XF);uHloJ6s<2``E_reKd;||;6IWs zW-Lm5af#ZK1$^QB5u&qa(9LZ&<{p9}=q2gm)*S5OG}c%SpOxLs_NUMI;@2)CGf6}! zh;Fs$kaTet7TJ3D5n-D6w5M@@{KQv({t}r@v-#jLx~1rlfCJe0Tn|-QXD6ysMOCWw ia10G4z+rF>n$kb#)1DZSs&2Lb0000iLQQ literal 0 HcmV?d00001 diff --git a/emojis/1f23a.png b/emojis/1f23a.png new file mode 100644 index 0000000000000000000000000000000000000000..d011c05588714e4d3e3c6f5e05d498bdbd35f7a6 GIT binary patch literal 507 zcmVS9ZyRJ2;8ldG#BSaFM! zU@K^F5tkwz+_l|A5bUC0MI1z-gW_hZAS&UCm-~}@a?q3Kk->bQSie!eT(8O&;L;yY zpqsK@l`X)ff38NfB;aBYP6bgIASHK=0fLlpDv0uKa$HG{tc_!zx=*Tb^cvP^gOuI4 zgSGcKd5XUT_QXwO^#F3DL2>pmqCAW}br1dP6LMq{Q5r%HA0~V?PezeZ4%Ytjbe7K{ z3T2RreM)>+RBoQe^Mr(+D40iBf@ ztojt)&rb-~7BJb9w-Ci0be7LT5|dFFbkHXG`4KgCiQ?=d#Na;k)&?XI6b6VtJVXa= zOo|*Gwh33~z#hbzULt&P9l8++(6LXR!XWn?qd2`pcXN$Y^7RdcBXeY|+60}a7fHUq zC!;V3r$YD3OM=y_^x~XeL^u^p3WE;XSfeL!&OD$Ot2R#bZV{8hkbHZKzcPbRC3*>? x-{`GPObYM-mu=eHK=a=`3Azb*^v@IM<{ufMih5a07@PnA002ovPDHLkV1fX2+4=wg literal 0 HcmV?d00001 diff --git a/emojis/1f250.png b/emojis/1f250.png new file mode 100644 index 0000000000000000000000000000000000000000..875e64745ee5188b3816e9de2f7cfcc06ea3eab9 GIT binary patch literal 613 zcmV-r0-F7aP)&50f{ccY#!8Dm;6@<`F|ws03&F^ytD$f@ z#HmRWL?Lp_Xb8%s$q2bw-DKGMF9HCT_+IE~ZlyXvEp^Z>SC>p=FX!&p|c+Si6**f}0X8}Rp} zE>7y=q%M|AR#lg3@*(z&#Y{WdFRIxUc23&IC+#6IKg3>ltkZlubcCLg>>Fb$lU#Pg z;5o_h)Qja6b;AFMZdSjEsljb=pX3O>7ypQ>iG{>MVu4;2bJ9gDiJQilH<-qsYDRq0 zc9Udx-6aX`CA;V~T*v$vXUH~n0@uWl)+eDv~u8;yeKInxpHXFEa;$grUV zF4~M5rf3j*&qdYp?inMRBO{j3v+ZSnjq!tqNe zeHd03X)p#%#~|uFWYh&@`A=7zg0z_dn-iAJjB0T18HY1yMnZk_ZX=SOg}R2}Te^)W$xb zAV_G4HWCCDQnV662BM-!!dXmULR5k-q97DvY~#vk(MD$Gp0_*9n4vvSw!Qtei;9tC z>*(64M{bz8dj^HyQ?)Rz?ng3qnST1tZB~^$+PCEcxC<9>4h_32nQa+P;w7B$AAM_M z)ZXwu7BdXbrs_!Xw}~)a$&=OETR4VY%DiSm8Ch3kwh5QK$059wOO7RrMx)H%H#{2r6R{jY7W_+o5tT> zBcuYKpC9v}6i2Z*L>pcI|N@3y^g|}}Y@Ckg63!Ue<)m`Q3!bL(B`__NVG5zcz-s&RFjWPZZ zf~p~c%cXWhN2ZR~#em1}+Bub0#I#_sZ+qoCXG&v)N_Lj7PL@=vo{^C!BoYbo`8@G> zJ)O}7GHq@26z`7K;)D0ZzrE8U%zK*W)Ob2sV)9w{peBaXmzY6S6hP0ARCE eL^vTEWZ)Mz%i>=Lw9cFW0000y6e)VED0xUg1q#dP;|zqqDaeCkMr`i`@Dac(fL--d$XQ6ewJnwXW; zy`CUi#1MWsIE7)ExG)3YWV6+Pj3iQa-qlO3X~CdPK+$6W3Ip5@O8A2`uJKzz*h8!9 zA>~*u9Lq&tHc`o(2z$46Ewh0E77Bq-2!ui);H`^^O2+G66)DGZ;aDzGA`GxqUFX$C zWzB0h&b2x|S{)x;$N(uKrrB|EzS*uLiX|M&g=4u;O2KP4(CT|R2o~K4BfbUtWNf{&qtv>+&vq9Q(G9~y0JXp+11a>>u0Boc-8^HJMQT|J-53{IGa z@`5nJu{4cl#711(A_$|Zw7FuWGJ_L0&W(AFrHO6!9L!cgw)~1@P$D+epF*1kT_+Fh zU^tWVP%>d8ZSCbpG6;eKN8IXkQmL;J%cLEW2~8u6(5!i0C=zol z4I;!u;M!Tmh1)_*M?UH57eJ6@Shcg@4r3U#5=N~AVU5k6Lzhx;{h`nn{z!xsyy{1` zM4z~{|1++?K+LdaC$VNHvA)i*_^U>j2prp|P>O#9Av}96bQyGs(Cg41xcOLUw*{mP zBE-BToH?xM(riG0<;Abq3%Ae~1R5H?$M{_r9RARBs9Fi@!&AcM3Xu)Z3l=dE0TK3Y zx5;nS+@BFzZT>RoP+^_p`EMNAS*O)%(W^gg5QM^=Cw2az6q*jDV5-od-3H5b=;hjq z+>oa5F(ej65%pq$#N0a!Iu7h|I6aoeUlsnhSZ?v)g-@4=AW;())-mXqDm1t^rF+@8Kkzlt&u-hS`U5619aVeH0kYa>eE)ukw1dTdDqfXFj;%=;SfRtp2S1J%R z8weH0+pM5v8ZFa!n-zpo^c!`&Qh{MHh8QzxoFCtb&u54)WDv?EqWvCz{yA=bh2-2N zhQ%1rj)Pk+B2*kTpFv%|&M=`&;#Y2f5cHcL@oT?HoI8(5B#{h=WD<4!Bw@FQn#(Yb zn#&M&ZPbZVh(wY|jDcXcL(py_XU`y%$w3M`Rl2Ut#mUq38#NGMOwADEA3`0n{Phj1 z>z~nDb3r=XKBkzI1`)}CF*S`blO}9c(0-478qJg3DzA#4&{`A8hb9kuNAZtL5RnXM z*I~O-<^HdbyDuNJv)3WAvi6?Wr5vM*R-Z?OJpv6e27bDN#cG1OEui>~FWdLHxp0kV zYws8**YN39XahMld4o2gwyt8Gwj0&~JbsbF8L)w3;mrVaZuDkp(Qq=-D=Vmc;=qCCUB;vi;$NMqD-c00000NkvXXu0mjf D@hANO literal 0 HcmV?d00001 diff --git a/emojis/1f305.png b/emojis/1f305.png new file mode 100644 index 0000000000000000000000000000000000000000..eb83dd99c96d72a54dbc33e944e8c7b48648e0d0 GIT binary patch literal 564 zcmV-40?Yl0P)cZrik(X@AZM845KrOC zl?sSFjl#eH!!ScXs`~GAf~K87jNhmB-@kghG+%E65&x%;k`28yUvC2uB@)LJeD4b1 zyP_a*%$NvKZ4E?>N%nT|7hU{$2Y=qdUvx?KzH*O9Q`Du} zx=xw04eaVV0=Vu6veOeP&tIS_RWu{2TE)&iA@2>a%Pk&ams{l5L+s-PRHaHmGva$! z_{%PO_8H1Hc!;tM^zhB1@PN4PA-yNuezB!%0X zYXW02Hl+LGfHK3Fi=T&7>Jd5!xI8(g5Y`&FG~s&KXPo9vW2#ADEFyx>Qk2%XEX8Fh zN^4w}A|eFF(wJ)Un*sVjMf&*#nqm;m<6vW4C#9s?s*;>$1iJw2 z)9@%oo6$=)FFyoGuco=Pb{4rCY&CiGM#rb&+1LuOsr3*#0hwH#Pb(%Ug)68FHgYy|%XPvLou5+Cb+96|Tc30YIz}CYI#;*qP;}`K z5lH8X=+vzsgb1P{$ciG%q%ToXH|=+xi}XCk*9QkqwKUgt0S*-s zh8U)ao_C3I6#*I94dl| z4BE|Mm=^xX5ZVLnfj=??rbU$dOE8|Hiepkm*|m6|`mtK~k=%J0l}Z!S^I5{7ZVI1! zNN(6nHIowY3lzUkVARxLweF{;{RA`fKFcDFnNX-ynws{LfPwfKg3)2Dwd*mGHi{A> zX`@mO#mOvITPF`+jdJY5JucsRPEd>}GYqV@PKr}mRKs$Nq)kjwqP+zqERslX;>Ex$ z*Y5TrBJ_U#!PVQZz@W^q8%Q*5L_80@kSC@n(fK?&mqQ|9c>E7q3j!S6US#O&Z@?fH zMM9(viVGf*S0H9mVy7Q42D#1s`GuzRb`o^44)Ya$H@Wi4rw zz1wa2hJBV&fJ;ewMS`(kArE^!mYSZ6c>b}#A`#)+WS&QTo~uOU9N;cbDb_S5_@8`1 on8=1K3VffJ@3Zci>oe#60Y9`V(x*E|{Qv*}07*qoM6N<$fb%7 literal 0 HcmV?d00001 diff --git a/emojis/1f308.png b/emojis/1f308.png new file mode 100644 index 0000000000000000000000000000000000000000..ab59038cbff9acaa8982a3669bad07b8a66d33e4 GIT binary patch literal 718 zcmV;<0x|uGP)E8gG z@31;s?0#uQw)hL)exS;KW$9@HDcHuSZO#gMAsRwt^Q5Wea2tP)Y64PhW+rB1|mWoge7-bHqs&&1Xix$K2(M*wz}x zxlMF&4C`=}Cqcrsr8Ys&<=uLX*489)XyRevVxswM_SO~h%{Lh5H&F!-^Kg~Bs}VQq zA&pjr<<%KRha=1}&J-RQ6sZtsKJglLs&{UpPIr(6g;lPy7$n@Nht!)heAqZjjUp%U z5u;g>N{(>CA$3eNpPcyfD%$O#rbEn9nIP3%TWZs2Rrs)Rlrxk#q6$PcpQMrlDfmKL zoi;x{x`#T|L%JFCKA+ofy97O#<<%K#6gi>_{P)uV21S=|$^B37qoXde+(+-5U?WO- zxE}Ft{Wzn;5l-S0)qDm;mz~Jsi^oVmLD)l7evHLdM3`8#wkDZn95I?DspQy=%-3Hd z{1{=F$gIuFk1_4e1afFHg-24!ffVdUI>A~jyabuakP5*{IH23l;bDQDJNusMzf5D)F zIu%mXDbNm5*`;*}>^N94F^eea(xudX;dExB)ogy<^J!l}kjkLfOL6qf*+5;xnCm#< z?>{#Q23(3IkAJDHuA*4-3f4+O2kIKe9-KQJ4!8ziG!o)>vBn6lf1{_PjopTNI*HbY=xl33E5(h6GknbDsR%n8?ME&xWY-z!-p~BP zGOnW;=sv*fr7X8inqj@f#kTEK3b38)MQuA-nb!5n-FKO;d4UWRUjedJL9vlRT8}uyMp7UMVkP5N)xp-!O{d3xu_y9 zfGQ0Z0_pA!F-9`oD*8A^yAaZZkS2sQ!TVf}%&@=|P$FX%sJ)wIr8ZBru&CPup*QVaZI-@dL+&pdxJO%q=%w_OI5hOLctVvJ;7 z3j_|}3oVDv&_tc1VJH$6F#bRhIYEgPB%Y9XLgERDCnTPbctYaw zKqpO{_Z%BM#lqWHqG}IS84>613A#vwIL#kFd3v(7qf+#MV~@_GedJn-EPa@B_4SoW zGrJmNnDzPme6ie~?->{xZSAP^0p{69xuZgPtb$n}+1V~cvuZA1sJdL9CgM4Os-sXW qu@6z8&cCaxnOz6I^Y`i&!i}GwlD*&E`rHBl0000Z`2-@>PG?M98hi*Mit zcP=!5(F7$3@k(l2dYulmGjlq}*0c#BF7*49>s;h6n;lZ|(~)abMB zv^Z3nKqY*)j##sP(SK8A5Jns)OzeEC@NM%4w+2PFoGwc`$7{F2y4xaWY(k}ZWh%Vf z_&}o*FeSrb%A2iSf{zE>iArqS0fp3M&SYpyOjjk8QkP}z6DrM76tlLz#m@H%#u%*f zFnU~Rv^i8m_Uw?J(%g$r(~+2ctItpwvRDjMN>gISj4@OiZR)K6yA_0t4b+ga+er!E zIP6Kt)TYzsZ))u>!U>_${IHJrYKQy_TSVzJH8vC5cEG=~L}FQ(^`BZIG5<+K>G@*r Z*>6eR2BgNSb$kE-002ovPDHLkV1gdgDy{$k literal 0 HcmV?d00001 diff --git a/emojis/1f30c.png b/emojis/1f30c.png new file mode 100644 index 0000000000000000000000000000000000000000..9f79fe7f61d3ba92d5fe9c8ba599a87814b3e940 GIT binary patch literal 703 zcmV;w0zmzVP)^cY3a#H&Us$+fd-1O!G1sS-RkWhu;LC7 z^PZG~Vlg5~QhYDqOnnL|JwD|5B1`(o4T%+ZfS6;R?@^zu;)FqnlpbLrKuUpAsg-fg zUz`f-_1cdTh=agqX7)6WwU#%pn>fZ8oY{plj8#fF#u(0BYOud|K>uhMO5V$J#oIS6 zoa^5%6Ga80ut*pba9;hhiPn}N^jZC8p4ZPh?Cl)kNKOz49{jPv>FP9BmX?^POyI0s zJB!u|m22+)@|eXbh)Wful+-H?;$j6SO@@FVDuq~MLBQB}0j&&!G$T!h zIIW**xBF0T1z_YBiouZ86r8>>l{)$6|?fiM>wT8 zL;yh$VvMG9(8gMeQ>|1u?DiR?89t7H`AZGfpLN*T+{0SS?>|4m+3)t)-QPv&oRO$l zpr58_t?@tpe1?~6Z8l$Yaq>K))!jj9#mL$DDK^%(8ELh48Idm@HW?%ti%U~TPtZBo zCDQ|%YK@-Wz}Z;e#t}krW#s}V`Pop>?yvLbuRl=>=P2uGHuL)=rj0-%gg_uU(k+Uz z&e~&zvKiaz5s|1OKE3*-O;i`KI1&$o=HGZCz*>tz;rOXO%)tg6Gid&cwmBmbZzv~% l`CC%>IscQy8O$PKl|l$~Rp_FN;znrdLMXJN*oQ^RveSbI7#MQKIhm89;DAB zvzLA%DT@64g`IECs(vZ(*KplJ1(C((#>%(ZLitw`Z0}oDV%9CD(_Ld1qbM~E zI8oH({>?eIHXq`343CQOMjPvY&Zattzsuy_`_wq;8ZFM)(Zh%o(p}l{%itaZ3<{he(BikG1~sFT;kF41vcup zsjpqf7#GK82>dFsFsu&+es#n+9Y5Gi{@{K$)i+Js^V$vSwLfrdj`HqvMA0T7Jh*e3 zq~_M+DX+8qwM}RD&HxT=)-96G?4i3bj_dUSLM)p*$kxUKL@Y`K8X3R&&#bk!dy)jz zfWWU(x%C-d=Lnge1Ni<^V#avv+;s{!)yv9XUl0cMaSN1at5vV@@a`E@ePWx9Wi}hj z#Im{fDGYqV%DwZH-af;~=;u8B_s1biLallYRiFO|pln-T{f%_@KFYh#($)PgvBAz3yD9i%^FA0cYn?_BxSvN<|j!6;%Rh>7YvIH#fKMDgMFhoV14l@>3OWah6@-=s=pjWe0w(}VTmQ%mA}%5>Edj6~ zFbC40#YSP1wgxb(=r_jkW`GHx>^K=(?t}iUQ8=#}E|Ks87ck-qjw0nN00000NkvXX Hu0mjfeMDLa literal 0 HcmV?d00001 diff --git a/emojis/1f30e.png b/emojis/1f30e.png new file mode 100644 index 0000000000000000000000000000000000000000..b437102365a72b8eb5d58f62f75c128febb81657 GIT binary patch literal 666 zcmV;L0%iS)P)f6Si!VNXqLkI1l~p}E^N_^GCzLW& zMtU24fs2hUcWtlZ$Ve*f^aBZUEO)UXwY}t<|MK8vD!I^1&c@n%_V~&!Qx=LbJ9CF{ z{XOF;Y3Owqo8urcAYocM?}H>Cl?B_buEoa@NmFP$InT1?sX{ zg6WKmSuU48s|a>E**_o|{v!_JY~%LU<11^y?X6>nG3ur^3|b1+4OrTEvHj=yz50&* z%B!zY73pJ_kY_1Ww*|EFk0N~RE*`sy_~J7hXB)5Ggeme93f};P1GHK|lssdV60B)w z$IpdPDkD7~NeU%io`~79S^XLJKks zWH>~TD+DO^Xyd`{IZ94OkYNpK+Hqu*Lj=PegpPEvClHF^v75*lRj6sL5VWQrnB+hT zW4wUEAG|^^+(FJHNIwXgT?vqwj$WMnlurOZrBi^OsVB$t|3z zh_v*EB27`Co#q+i(|eaV;KiC0jZ`9sq+XnRwN(8 zwWsyZg=aUgMsa{p^%eZVHo#Iqi_oXEr=mkdBjQjNJddMG*~=p0VK0g5%*I@#`p8W{ z2vv76KRZS;F^#YE1j)oS{)#p#BiC@WpZ};=+4N@;^G^}sw_v!F(m)H5hCBHDC#gF= zf}{QHM=7WHi|ac|dF3UxdEFW!$A%Hn)HK{?edPnzWZ6et6}h!jhYnvwDVN=r6O)*H ziuKj^e2YIMwKfA-{;`v)qU!RP#Ta%GaqtJuvb^|$A73A%93RRlCY$-rj-0iO>p-ym zjfgW23{W7STjkTtFeaa3+j=sFh$39m!;T3Ni7Dk2AxaMcQxq`y6iRsr*Yu#AVzwER zX2%rRA+R_X`|km=3HAv{C2$H*B8p&D7yj~dc-;ufajB~7&ne}71Y8G6fuOC~WJd}Z zwAeAFJpIb?MS*&@1VR_$Wx@7I$d4P7jZxqi;2FuTTLSYc00000NkvXXu0mjf+b}W6 literal 0 HcmV?d00001 diff --git a/emojis/1f310.png b/emojis/1f310.png new file mode 100644 index 0000000000000000000000000000000000000000..d890f6a1862ab55c916d58fa54d4925401a6da1b GIT binary patch literal 521 zcmV+k0`~ohP)82|ozW1PG_-Ue^hY=d+YB6nBj}IiS+3XG z7%dHV&=QCTLN1z1;S$v#1qIU0p@p^74Go2KAm#7v>NKls>Ur|;D{uRk`8#&c9lvw; z^hr!@+fbi0)>2>ko5@`dJmOC^ixn*5x5f$VODW$Z-U-i&bB$$e+A{xrT3X zBxBE~uH$-mj~>ByjOOuJYYm6X z*_M{t;Vceg4Uek%i8x-~Dj$Xy#ha)<)Ge#F1<#CQ-c9_NbZNjre4N;a%c-WM#16%k zA$^d3go6|8)jmfa5_`+Co5F&f=ESk^7499}6!m{h@V(?r>;AADR_(Ovw#U_4xte%k zz^Cd^`5OC6ilTN1_K(dKJcZ9D>Qv&i+Jk9$9lzMN;Gbr3&oK0P991t3VjZ6+j^P3p z1@T`NaRE#CLaYzAlx1v`pK&AYrC}UbqZe@ztGI+4_^JF*UMptqJM^+Gzv6s&8c&eL zamdvsd%^^BID@-!8Aq{c%OrKnCQjgFV=46prnYV1Tsali-MH^^I$n zFI-yttl4UB0?WMAJsKYF?CV|H;-5wZnj&muO4)N z`*u7UrLJ75^4>=u-)gqnH3TfBDg^UD>$2 z^499tfW|Bmqah-c${rCxL~u@-XVIuPn{Q_!{N%3R`0&e0wR(k|FFBl3%9Ro#!i+^@ zMnov63OQ}I+R-;#?RS~uyrYn1k;!p_h;XJ}K}49>Y_&HPcry!;|6*p$m>C%ViqQxm zBe(4NAKp7SQ$|D(6$q94DL-_V;#g z>+{ajXM=ukn-e0!ycms{7!5O{FzEO0JnuYx=CUl%|Knh1<>Km9@BMjBq|<;?MVx>c z<%-8S$4rt;9zD2sckA!JhN&Yr9*xq2?u+kUd;Q$mTD`FbsHz|$s4BkXQK#g>px^uE z!M(d%gZ`h#aU0kHJ_d$V9F?P^quFnFfBf!n@UUOx9_uVo?5GvFC(jCQ-29Ej zg?YQY)cpWB1-u0ejW0bvU%UR<2!W#TTfnCX znA`u{-8{H={~apE2sIHwgr|%VqS#Rz96sdW-hIa2MR~>i`Pcrosv0VdB&L}(NM;&{ z2sI6gsxoo+-~WgrN5ui}yTRaaiz(I_Cdx99jxt1qWTt_L@c)AcOu1+Z?|Wq#cotQq zrmCPkH5wfgf|BJ0l@&)#c_!y9Brzg_7-8Z#O-ZwiIGV#m&K+21sD+?pX^yHg;he=< z!$hl<&`O%jb~=d29Wy_FVvn&90=_5-L77lhN?)R?)D{;O5D_A0sqC6_XHI`EB7ur? zmR7rowT6l8I43>MNkK{+uuN3YvuYzO$m zIBU7E(ZAH`w68Oz$UP{;%?N7^&7{Fbe+^@V${z3u6+@-nZa;eCwTrJW_m;jCkwC>o z76hELBr{Dm*VkBH>U!V`@Fp;%V&D7lBUA&8Mx32mUHN9V)Bd3-e4OXSqN;XUNm5=o szp;Pr%;~Q~@Rvd;uc(GXHJ}=J0`>|L(*?Bp{{R3007*qoM6N<$f)l<>(f|Me literal 0 HcmV?d00001 diff --git a/emojis/1f313.png b/emojis/1f313.png new file mode 100644 index 0000000000000000000000000000000000000000..60493a47b4db1bffedc458683775e0fc294f03de GIT binary patch literal 715 zcmV;+0yO=JP)Zym`OeDw?X`17mCyFg`C1ONGh(s87 z=z+tF0!){s!~4KM@PUC40{^Axl@NGPLI~t(L9Zwos8nO(ip55j|3j2gzgDU-QEV6x zQ5b7bihuDTu;11Oj;x!Lb#uy|W5gKEy^R{NwG5Tl)<0d9pMLoM#_d0TUt=ivz=-#raY`vh+FP4z zpM3n$4Jq=BufO>0^&-nQ=rdMhjK&y^jSL|`n&ph^bnblh_FHeh(dpbl)0ZCX_kP>{ zGx1|>$w_4d=p!T}|A<#9EK+r$L zZn|?7@9R#w3dV~FD#D<^K(bv-QfGB`ojEgecIG_K&vR%N2J!Pz-)!7q+Mjp+dbgWq z>+hUAx%%BVZL5&@e)%enlj7ymm`?85QaDfN2&${%;`UJ(eMyg3?;)($tDgO&GACA;08swN3Z98nr( z8KXS6l{o&gIrr)!sLz3c{`bKaKeTRL84j~GrIi2h^at8ltE)*u7zUJ_^Yn)q<8e-Z zFr@HVzu*13-Tn{V-rimA_R_Ny=9_a_qcIyRAc-T4)|9kXXr(9_V<=Ut^)rVK%`e-# zf8SdNtTCE}*N!SCya*zK(Hf-`2VSX@J5OK@6Bbyvy)<28qA@$0Q}80}KI`H|n5owY ztVL^0s5LKG)4;JjcX;Qi*J}v{5y6X4@?LnE(Kts$7OaRc%ElP0*=Mw7re4E)AqoRt zPAF-m)MlK7gi%1RmkyZ-tR)Hq_IVM~!2styr7#FkN^R+St=7^;qm-hvvtuZD5k})N zBEmlB9NFH8+&QMS^wQ$-4Irnmb^ie(!n0mVH|^6+`|Jy><=}xCq99-*2R8KEZ@qc@ zV54!3!ox?8;-{UR%sWTPIma}m6jQDNw{;XoeEP{pm%}h@iHQFB*WY|4iG5%#wQ2LN*!jE^2U{9Su{yV2f$vf{nZP8?eZtTC#9(Hf-`g&epl@C7iS zV9uPsfcK6#3dc)tocJF6&3`uU>xYjYoB8HkJq!YrQulywoy#vcpKo~Y#@;);cRUBb W-XxImDeZm$0000*n>xbP(DGhYshjef9OXgF}Z;1DXy&qk(5E z)|#YJUcPhf%P+1}%F6*wnx?^_kMcjv{<6^9xBo;fsH-$fvBuDnWf^aSI-&&6TD7mI z_vqO1@ner3{`u?cjg43r3f+8j( zXz%@di;McynR6p!pG|xRs3dVX=TIW#bGr}`T113SE=~EcukT0{M!%bh$*F0;(A1UB z;d>UNH6p_Q@vNcAj8A?(Z4MMmqqK<#p0#XCvy339qm*KIKF3b|#nPzC$OfV~;lD&t zL>R|3!Vu>i+gzFwMlnqThWGHS#h3^s3avHU8e3b0VT5P)pafa*tf9rFDYbf?G|OmF zO0l<4pu1}~o$|RH-Gweh$%Gj4& z{OI9dzkPgUxMyEa?=YaWQYfWpF?B`ie^l8K;TqD}~-$T(h*I76VjsxMXN9IL`~?1kZZ8U;OsF z?8nus3ErPZ_yEYMnEeZjbUN+E8?V21Hc6AWdU>wiIl>^I)*lS%W|=%TzdN{j>(;QB zWd}eGfP4m0XcUDk9$YvTN6})I_bG~!tUth7M=gp%nrTW91iJ9z3sP~mbccYG9*^$b z^VGghyS+rk7(-1(P!(!Ml{AT|wddy2haTKHG!bgRki^b{gO z%{qtkp0VA#c3}dg5`erLOto5v*(M@HVaQlfmfY#~P!VQlrcn_(ow<_#98&N7{HQ4T zKhAk-&U?J~)TWxP)LBPaS}OAa_Yp@S&_q=*s*Dw*lCrdzR)UJijVKJLS?B2GInH~= z;wU5x0>-*ouOB5LNh3x?ZfLjH`;Z&UJ-0fxD>2~qnv%ayxwi5iu`orq#<$t!emf0pEOtRKebJnrB zb$jsF&A(&rS@v*6N27wT&R;k_9F4wYLVqyCdrzy`APfQ;Y2sEcUUJ@h1Xb_G<^n8ql&6xj3JIff9dj-{Q9r!G2VZKa0JMynCD-96;WX@ z928ftt(`&SY^%|9NfOThQ(2y8U!1@2)7sD1&mbJrzmLuCnT)o2;cx#0qIktp-vMg~kVpFA_r=MS^0*2W`k;lF2;o+9gl%s$&OF z0h*lmp4p4@IOkAG$hqB}f9F2==*pY5jk`^9np|~ky!6g{^NS;oKK4SR*;L+ptTBWT z`2L3#+N}g*4I-kVc<{)Rq`wi=C8mCF^T&z_qpmn%nin=LwNMx)inIY+@* zO%z*{5_+_Wo_+557iXe)0QJ(#uTECS4xS=sw5Fg$P)boyN?{|zJpv3>9(wKYk*6ok z@e?Pf08MVFG)Np-jMj(JV@|?Lhylt_kk>PqMs z&fKl#?^aa3zQgp}Z=I>vcb4eWYA1vcu#v$SjWHT)HHA*n{_OLQ7tVB&Hkw>*b2I(s zt1mw|{M5wA-bY3z0Hu{eL|DDKhBgXgH6oJLHtwANbm8(VwT-(?a+)eM<=fLY7O$OeH5w^h{{iQa6IP(J`7Zzf002ov JPDHLkV1jKxYefJ6 literal 0 HcmV?d00001 diff --git a/emojis/1f318.png b/emojis/1f318.png new file mode 100644 index 0000000000000000000000000000000000000000..14abe44ad76393e7b129525d352a40136817d831 GIT binary patch literal 742 zcmV>mX7RLI@EHZR~7qh}h6HArbx( zu@I@t5({?rBau+4Mj~M$k%+W2E$Y^p&bfcD9x*Zt&qFtE-NB$z$varB)hB~E9iN$< zYlLB_v{tQZrPAEBW83YqosH)hpbi~BhMW@8b)<7WvwY#r+jsKi>>P*)xhRS^&9~a; z7ut*G-o5|uaNqvDmmIBEutuIZc?xkDyXB$bCjgyZXtl-DXV1~=h9DwHDUeIz6mgtT zuNUn5w)}m(=$J=AuNMjJ8`SHy>se+ethJb#eFY-GF&a`yV&)*=W3{J{V-Bgf46pDeRTl5|utGdkT>6pTS12|~d&U}h*K@n4KT1QC5K z`ySk40mWhweNqZ2CDF&sh{71wGICN0XsuczP1B}Q3Pgm;`gO=LGqN-TGybubktP|e zwdnIbuPGLnKHmk9Va?Vpn~@895yBuw6h!EgQo!{JP)Z_4MArAbX))h!z3#5A-ou*F zS`EYHGOT6ftYr)$BJ|ZZZG14=sJ{^FN7kYJW$9X)rcEIT$BrCEp=cnbfK$+529h|% zpdsIXS+7(t$14%!)Rn7n-C|B3Jy^Gc2rzP#>yn~)AzHp)gNu^N{_=D{wq>$3kO}>t)91? z3&X)cM7%G2ss17vVhel37-ep5PHj51X+*?H@G{Ao@)6|)Dn{fQHqP5_G?`4?zBP2A zDaF#_f~gZ}oSd4fGQP>5n@ZisJ^$9@gR~c%x>EbTB!f35@ln`qntliC!}-B7S{&o3 f@0&xJpZ(z%Gz)2O&Es7A00000NkvXXu0mjf0@$#j literal 0 HcmV?d00001 diff --git a/emojis/1f31a.png b/emojis/1f31a.png new file mode 100644 index 0000000000000000000000000000000000000000..44c9b5dbbdec8311644e1ce15efade648bf3c4f8 GIT binary patch literal 737 zcmV<70v`Q|P)9YI&4Q|9u>|W7DMT<~jv`E2CqzeO52o4lUI(E`Kugv2UU>NT z&bPxsKi012^WG<)eGwMR7n3;UkYF6ml!#y)gE5-_sT1|ZS86+dZU3lO&ab_F^7Pp+ zRnBG>5M19uDPcy0XV}aVmP&7>Npf4i`@zRIJl{W0&N!Mh9W&~8F^-E;nyEC2=|}rm z3&wF#O30~FrJ9*irMkhK?*6~nEMuy?P-AM)jTjDkjD`dJAY`UgsctA>DNQnF{6dH* zh3f~*xPE{rg@ByoZ+`Y52OjpBK@p1}`1 zM5L*Dov1-BO*5>u47w4M@rW$Tu-0O&CCf4<;}L^y#FU7jwW8OF8rt*x-TLBdS4Ib8 zB_bH3={|YPptH}g-{GLw;h+~W9u0Ba5XW^85pv0&Tfbk^?bf5+S6@H%a#$+AV;qe( zhM-u+^#hFK;`#*~uZZInK@>^}N-Nr}z0Kc#zP+i_G@-ToPh*jV_|oDFL0DV?l!zcAhzLq6jAL+J zlRSCc+Prh?>&xxdqXTln5vyzK=a$c`TrE|q8^98Wn!Qfcc(8r{tF3!?|6tC4$RhQT T$p}V}00000NkvXXu0mjfKM84R literal 0 HcmV?d00001 diff --git a/emojis/1f31b.png b/emojis/1f31b.png new file mode 100644 index 0000000000000000000000000000000000000000..69d7ae6f190fe8850b9ea24706ffcba88d8b9b67 GIT binary patch literal 505 zcmVy37m^c_qKO_x(dmdl3L>FzZOV3}v;(zM(Mmm4t;u>JY2JnHu zq@_!j8Kbm$BJmNk0&Lh`1@@@~Nk~Exl8}TXBq0e&NbCZeIp>&jUXk<$n4uDEV;kGp z#x}OGjcsgWn_8Aqh!HLK2dQA$&?Pc2bOt+yRyX6SCq00000NkvXXu0mjfrq$Fl literal 0 HcmV?d00001 diff --git a/emojis/1f31c.png b/emojis/1f31c.png new file mode 100644 index 0000000000000000000000000000000000000000..176cce2804c35cdbba1a9d3a4d06a79a02a80efd GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|_rg z;`JWf=sh)1=J><&@8^8p7asq0)dY{s1i>3ZfdUs-cz1Vnd-<|u((22X=`Jnd*RXWj zQS?=cohv~yf~9Ptp2g-#c1#>DjW<_Mxg;a{{Ek+dw2botrQ*|V&n6wQV?Xa8gKs|}|Gowk3Eo|`v)AIw>MwY@!!^-oTo@{u^n^A?+1qvox@&`JZ?>+Mdt~+9#A1?}i>%H#YHf!x%bBDtZR2BXm zp4p;#m;GLvV)FcQzUMNNj;YvAujnmdUa6oO?4zM3B3$?Josj1n&6lpa=hd<*>o!VA z6r{OHDtj8eziW9$%pm&En#oJPGqJRAv0ELO`{1tg1>FQY?!>nJ*BVWaD4(&jdjIn| a|A*ug;oPDfFnGH9xvXXOUAvei*zSdM6J)g&LAS!~s7@Ok$h@jw`4F;XQ5Uiksy;2lkBu0cP$&xO~I=3`!F1b5%T{l8~ z9$|ySM~_eK*}L!6Y%c#IFwQ-HS1aZ3=dN77c<$`!pBW&m+qV7j)Z6cV@bROM?Kr5l z(hOK$S-~<)Ow$NT#lpo?Z@u|OsaR;!r|H|aeMj=s&%c^Wxe0F9m^YH#v-)D_L!m@~o2##%InI^Fa z5T&v>O$fNhy{IzEkCw{a3ShStP7zE7oglL&BZ8?6<6YD+E`8rfWahILUCu~4ZJ1R=5U zT$Wg^-lVbgFH3h?47)BOtjXr`Gb(}!zuO}wB8+%0T5CKv&3&GmMr+N8mqrAFFr?#m z>6Tys{nWwRcUwwC zuq}&!ZY)w+taG!u#A4$XwR)2~t!2`wBq=9>h|t&j`pYj~*QH{i`rPv`s*C(3FaW^Y6cN^1Sx_4!{5Q>-_H7m!C-_5?fiP zlweyXUOI)LHGa2?h>&y=EVo)eoH+K{f$EKNSJT&QG`iQX{dDPxos*-RM#m-rB_b%L z5D^Tmv26>-PW1lz^N$NBjvYBrDi+%G2^$fd-om6=JGSZ1otddE9LpQE0-^v eJA3*U2K)y$9s1w*Ft7;#0000#_0Fe_M{o6_yGQx1bC zg2e>3f$tpQuhlXfa~*gIRtMc>L|6yZaM(>?g(JL~k&<)=m;j2dP(0zw;Zv8-lS+EM zXT#kV``ylEU_lTWJYvL4;?M-ra(2E(5LQ8AEOW9%P^mI#?bPFqbue2NM#`C432X@{ zX6I`Jm06JZk3>+JB|BeZqzEjTQF4e`&rn~V*%HW{{?4BAbQ@a2$^x|6;4Lbna>xO{<> zFNaw43x8&Yv0&~T`r5|NgrrPHvgd2K+ysNx4#Re{Vc1hc@4UnI zfE8dN-dqPk5LWRs75q$vzswjkw~05_0qY1>gyBIPiZEM_Kd%*s?N;5FLtH*jD(UqY z?zY(Pb{arOC^8OsGsYf~k}W0O&d<2}qYiq&A9fGa5cU>WVMHA8IR0U#*N7`Zt7a60 iVdA;4HwpT}F~0$JN9;D!+gn`#00000B*ZC+}{3C)`eII3Lw%+kV1 zBFL`D<;Q)x_b0jhfGoR=DJv2YL=Z8KLG-Cs+RaRy#|AVKLs~mN($L(8K@sC3h>()0 zbJf!PsOgDsRVxG5^jlsW^>pSCepe^;=dZ~23;T%O*oQ8JHHo?Di{_@k!#$b%!XGlX zQ;{_gKVzr$b)r)kKuP#KA(qJcG41`$;4q#i1d=i0OFXu|S+cM2z>0(#8#Xm*`QRV< zrgPSlZyM6_;a^(XnzR(9y85r;YoyAhQy$*0A@MfF9m|THlUT+tsVpntI@z#Vr4fmD z`S-!N%0iE}?Puhh3#rm?-&nQ0aK!88P{n4eYFVd8leavYJZ42|{)siQRUncvxrSjI zi+8nl?D4Fenf?0*)k=?uZDdxZ>V-QvLUKc`TCuVHdxef;3Lp1q-*r>D^o3{Tr|P7- y534hZQLjWdcA`-(zo>oJh&LqOZ2~1!yv2V^xt8sPfM&-40000HFHm_bKvu^UtPSGamAOwuXo2b|sj8GqZU&aiCAfUmDKw*_yVV$}Bb(+3Go1{ZT z`3z}~HZyqyl85jw_m%$E0!1TE?mg)0{00h6}vo!1_q|&pxH71$-=H_9xa8~2gi(` pzFGv%0|8n#D+ZYj#XdN|%umPxosqKNaw7l$002ovPDHLkV1l4E_^to| literal 0 HcmV?d00001 diff --git a/emojis/1f321.png b/emojis/1f321.png new file mode 100644 index 0000000000000000000000000000000000000000..42ae0658f9090bdf6a0338496323d74fd17c06e3 GIT binary patch literal 655 zcmV;A0&x9_P)7Kt7{KA*JM-U}TB}58w%RC)gUZBrTtw0vE}Rq>he6g?)izRG zI5~(AU8EwU>%v7O5(j$W*dR?1iNr^uiN--?+u3$IAFphJG@`Q4BL|OkQaiO5H8poM zE^2NA9x6I$4jev4Ek1qvn6fSVdP_@-PnAfQs%|xiPy=I&6s}ylxc5wUS=>4{X_qdX zsY7I^B`SytqJpR(Du@cAf~b&0vFW{h=~_DF?C)N%*!}wYjh)P&OO?P|gCxwPTrL~i zvTkf%w_)Gao*w&hl(zBK5Of{{k$%wo2HWOe1k9_KFA4)sp6oe4yP2=Y19 zb&6_<4-#1##b^|xQH(}08pTWoWpn#xUt#n5jeh$?;=UUilDXb$f_x5joqoWVL?cNQ z6HSaW-H%eq%wL%86V=^!PMp+JB{iY9h9I9qU8fjMj2{3(ele*`J%1>s*jwn$X0si+ z?^EfIrI66`2=Y19b&7zWN@qf*F_qFN#;KcQJMJNn9mkIz-*T(7EBQPgv%>QT@;TH= z6)R(-J`nO3mKt=7s!&QH?vSO1P>1 z>;%W}x7FiN+J z;*I64dp+2FLbGnjrbjok_1DZT@+K~LslNZkuU3_nXLp8geKS*$mG!8rmOAL;KHS0awYN>rm;5=81v7uY9)L+IL16c(n7|!#?aQuYHZ-I>RfU%>Oj8 z>EAzRpKkl|-s9n;^Zs8D-`9km4U4xAbOy)jhkH(r5F^&6RcChf{L?;ns;oR&Af~O| xl@d`z6#s46)jV(QxftE&zaxFz5_uWNUjR?2htHLK3iJQ~002ovPDHLkV1kvp^1A>4 literal 0 HcmV?d00001 diff --git a/emojis/1f325.png b/emojis/1f325.png new file mode 100644 index 0000000000000000000000000000000000000000..87f70797ad85a5c5b42f5f9cd213931869e7d0cd GIT binary patch literal 440 zcmV;p0Z0CcP)p!L3ALY(WU48OKOM^OM4#wD~9?imNV2>?!g;0tRR0p zzQZzlh36QTT(p8rAZ!s13zOEgsD0PjZl{Y>-D9pWn=nuJdm3`QTN3yn)vz>j6Ao^x9p)d4FwW=SH6GZ@Zix=-xM7Qb{i*Kc~-s1A(y zciV9#pY1&O0;e#6cB?a-<2a63o4E{CYj-^(Ch*eg%#*H4=|UbB-zU)@p^s?ucP-Le id=%s&1PweRS*`C@6K)qCb7?yO0000F2z=p*CdTklIotKt;i7TBzuvz7>*?O1 zVgCt)rzo%+znAwmj-0{A_zWvNpS>lyhd60*mK4N*#TzS#^O*7cu8ZQ+lIHlsN8Y%5 z-#bL%*_z}ezNIl&9=YOW5ueLEMt+Y@EW=&AhdGR)FZct)ct80@OA+jg%%N)0Y`#$B z>%j!JVP|me#kPN5X)halgCCRC_!8Zfpc0hCNnETqD?bE-%FMa|7&y3F#p!Jdf0000IctC(gm(*-TG<;c+cffgVbeT5Z~8kmvd-fG_IhRUS;ZL~ur-SXpV+!f1^?KZ z2RKqQ*X+QhNjIHU*YQQ&E3j zoAZ>#K{q)XnQsxtMfpQ^AJg8W{Po&k^j&H@H~R6h5T%vj7j?KXc{59Xh}AF%(Qc=h z4-uj0SqNo6?)0tG^bz7VqO?iWzU2FbW7t;8;8bQgnK{{>(O=E%1s8A}tFkQ=L*2TI##lhb3Z-IE(F_?r>+ar)l?b%T&!QKghg@^^JaP>aK7I z1L7ybOy*cPDD4pOyGJTXSog#TUz*7U(oE=ZTKI*WLucwgw*je{x)ULW00000NkvXX Hu0mjf976PI literal 0 HcmV?d00001 diff --git a/emojis/1f329.png b/emojis/1f329.png new file mode 100644 index 0000000000000000000000000000000000000000..cb08e47b48d33e800fc43ca5cfaef7e29f0b7f10 GIT binary patch literal 409 zcmV;K0cQS*P)j%vkf)USQxbQ5JRkB;7_~p0FkU_=JldnuIsU8tc*e# z8XM>r#wLilrY+UTI)NFC{I|GJaSJncW`Dt1JNLX`(ax;mQkBjLH*g5ym-z8*Z>+8C zu_?-Wo7nfkSi?)=s`NCz+&-a4bYB-A$M@xtP3fA6spfMI0B!hSw>th|s4- zG=J-6lVU??FG}QjEZ~tX3KbObi@-3 z$kWM3J!)&APee{fh}PmHv1A*y6nzSD45v!TW&iLKLF{V-mG-Gk00000NkvXXu0mjf D$sxb~ literal 0 HcmV?d00001 diff --git a/emojis/1f32a.png b/emojis/1f32a.png new file mode 100644 index 0000000000000000000000000000000000000000..f87600b1061b0b6454e7352cf270e8b17f42031a GIT binary patch literal 728 zcmV;}0w?{6P)NvBiVER0L0+q{n&?4}#!H z@l+3iqPO0JLcyB|;z^+=PdzBK|AT@(i1?$86ze9t+s)4V&b;sIE=?qaJdeEp@eW5s zq);pI!rg%H=2$PbCumz7dH z8;^)FB1%Dw*vX`F&R$*H*t{wt7u&Y^kQwd0XYOF~>>cm@Wn&CUq7e~djQF;paShH{ z%Bn|UQ}T9y|I2)bz;bKSCf7`(?ii*pW$hzLodDXR)&`dDlEd-pGl$y|()Ic-eF zoQT}-bi2QH%W8|6@pwe*98KexP7fePvOK5XKSyfJqo#3z87-nXRNLBqDoVb~OeT4r zL!P6Qf(Sl%jLDd@w*JXE$D9_4{7>ZWaBuLMbM6zRlpr7osWFsQj~FAP;T|Ez2c1rr zIbGM5V`9-Mclyhv0&XzlY)x%z#-kwv_YXy<`$uZBdri|ar;DP)388J<9j%i$l}fH8 zi6+kq%CbW16z~1#-uo$sbeg7|qTSyceD7?1B~1;8P*y!+j6aLWS81AZL_23WO{d%a zt*k0Sh(N?S>!;Jn4Xw4~7`?i@$Z7V+2OHCA&EDWCA$YPZzw^qa?H@ToKlyi`BMWDG zg-DpTKCt`v(OYHJV`+H>rPRF;{LRNto^q1DaDE*TN!C|azAW{fL1)Dppb2O>}72o3xLO;zc zrEFr!f(kZw{6}bCy^M&kb>>?F&!btdA;JrVDkb0MIdL+=xdIWPQLECZ*Qjp(MdQ!w zlqyG0k}iDAB+pTW!1tKg90g22PH?WEq^cz2l&rVK?6q}J1yyFRtz*(5MWLuF>BM54 zLjj|z>?DO_&(B{FEi7TfHa2V%EiCcQPhF&NmOArx^ z2!`jH4{r0p4`)f{7I}L3I0$&2p=69lyERR%77%}O0{h-!KK$_~-&XnlT(nh1zc6a^3e zdBQle%uF>X4M$^k@+UUu(Z5egvk9eSoUyOn!iW&XLy~buDH;rU9smA=$1xDHZ8#b; s9E}kXRF$`gjldcZ^9ohvEn+-X?wjHvj+t07*qoM6N<$f>m%cKmY&$ literal 0 HcmV?d00001 diff --git a/emojis/1f32c.png b/emojis/1f32c.png new file mode 100644 index 0000000000000000000000000000000000000000..67d1d70a9e2a7cf486411b157f1a427cb2044cf3 GIT binary patch literal 550 zcmV+>0@?kEP)Q4rEv z_$vgl7YTwGu}RRv!g|5VLJ-7kVlJEPPIl(ZoKM#zUcy?4h0nu(r>@W4;a3796OCi% z8&gxq6|#~W|5@&tHh*9)&dtvRVc12a9XflfTJ+|Dgnfc~pQ+%Spgu8xiP~$AN9(nd zKnVmKqLArOvU?(Og8@vI=K5 z?sO?jhf*M@MaN*~=#g<32Rh;#YYV#8(pQuv)i|b;rX)%Ijna>VF0ZGl5 z%`F%ET1Jza@{Nb@8$7K!kkqQ!JbSd8<)?`1bvG2h0&2inKV84AuRZ53N=I(#Ce@CgNI3 zsRs()q11`O7HDzJY-i`7u*C10K9KOk3vtCu(dIJH ovnGCR3eWJD9LNIS37UWO6@5m?NS@qHr~m)}07*qoM6N<$g2ht-kN^Mx literal 0 HcmV?d00001 diff --git a/emojis/1f32d.png b/emojis/1f32d.png new file mode 100644 index 0000000000000000000000000000000000000000..f834ce46aaba97bf1cd02dfddfcc29da8850b6ea GIT binary patch literal 794 zcmV+#1LgdQP) zgkgCaxFzD+A`TIUh(p97;xJxK=Dm0M(lL^UXF2%MGya;P7_E|gKVT+m5QgPQ)qbsN zJE|5{i>gJ{Vyw77f&Sj!Kj`TucD}>zCmE=6w9(`6-hi2?K^T^&ft!MB8*vzM7;)HZ z@4Nx%8t_4q9F)T68eM(l*3j{EnThQd?}1WobFf-DQutt(b?3!G8GmMgFy; zqFs>7NpesMPc*RE1cm7x$}bv{pZ-Ae3KJ(=WLX;KdG?;D-V_)b5I_($T}4+^bre4y zqAxT_w$HNP_f#(!iqoqk{Q)ykgVIbVn6`}6j8d0uBhrLj)&;!CPAyi?xz`` zr0YEn?+u8eV;EyDh)Ug9FIX>FFIX=GPP(YBsOl(wJcQ*YwM(zEzv`)W45J%&Nc&q< zD&v9i6pgdsEI13!g0p}~S4CG;bri=#IMXCJ(ZN)O*{cEBZ#~=(_aFHEWH+$aSNRWJ ze}3UDU7GvqQ9P{GPSx@2FX6Vnqk7(u$Lq64pJgrk(c}V>=17_&X^x~hlIBR7V>Tb% z2fopIWjS?6bLnKk$180CeNZ{)@XBbPG>6xRo$^`+l!?67$R#= Y0lNxXt>eH=W&i*H07*qoM6N<$f|w|MLI3~& literal 0 HcmV?d00001 diff --git a/emojis/1f32e.png b/emojis/1f32e.png new file mode 100644 index 0000000000000000000000000000000000000000..c44b9318852ce5e2bcec74a2f96aced465006a92 GIT binary patch literal 599 zcmV-d0;v6oP)#10KoD8^Kz}%UMWQ>G-?zPs+eekLgJuy)xkJvI_au>0aw3* z3GpKsO(ZxtxaeqNBGE(xhE$-CRLV=?`g*EYbH*XG-cT&GasXE947 zdy0|1`jAHAw~WLm5`{G3~6?fL{=mz*Kw(kxw(WSY?TkUE02q8yMX zYyUfi`3I2-o^|LS9 lpJAV}92EbO9FpXaegU7n$^5alazX$A002ovPDHLkV1f+$4DbK| literal 0 HcmV?d00001 diff --git a/emojis/1f32f.png b/emojis/1f32f.png new file mode 100644 index 0000000000000000000000000000000000000000..0e7cde89ecc51e119d4e93c9962622427d394623 GIT binary patch literal 837 zcmV-L1G@Z)P)9ai;v@Gro-9_TXcQ$s?hNhEQbl%g7i{KGYv!fL;;-G&)kBxN7j<|cF?7E2 z+T(Liz5B(r{8Dc)x_~=iFF!h3!N%%r#BDyx?Xx=fX^3xbkllNCs;@kA;&awLcY>Js zJKToF2##G}?XZm>Qrfbr2po#Zky-Ri&fXf_EW@5U50C}ihDDg&B|?}qOw6P^Bu@tq zkq2FBoS)h#60Tun31R#dKo;;n=sRz{I4(^G$2(VVAnGftyS|B9*+DUwn*?(OL&jHJ zWJ7_*^DZ@@Odr2kzxJWxMB$1%ZmVhz%54GTk7}7ovZIdHeB+0W{ z>FQ@+mlJtSpyQ!14hQk3}aDD-_tS1J__APHl0hAu9hMwl3c zi9whcba(r7Ffq^nHSpZMkSM`9*ILCw2&$CgQp&`2UCVV{Tc(*$mzS3zTo1zaAY2az zW~Q&yYyOA%eEt(=sY&N%za=;qTB}$HL6uTmN}0H>Yq>(i^zAoJfe{HtBp8u!XoiBv z(kVZ;*Q{06w%VPjzc)TAI2T&0SO`ItQd~-z2nV0C;c$#QdH8|(m22z2qrKgEzge$& z0HRW<IMYkSgvkNLjD-85=5E1Q3IR(r$Yt2u}7-&cq(HLL2JWg+|7R17=YpTJKs6?-pR~3(anI8!a@ZJxQl2bSOrPzHl`5-t^5Om z_zQwtXro}`76t_y{Ra(%UrirgcqOa`Maxnb}ME6aew;Pr=d4|_w2HH8~BN9{0qA~ zTys06^u=^K8T6_iAbKv+iWM<>VV#c69BIksNLqrg9hzL0+27?ic#SAkWtLl++4rgZ10*6gg6GDlq z65|T*Jss}@F|JTmLMUmPnzchSd&W7DH-MsU=4|!)Y{VGx8t8Zp#2DGw>h-CcIctT% zp+jUpr9{q|5DGS8il}-zs-Bo48zB_roJlF6&h0y3uU*zuWkn~YgsRd}RdPyn%Ce$e z)~xM0V7zQwilU;Eb3#?=s46KZI%QF@Y+KgG?)2WIS;ZA06m)VsNs%n%VogpMGHfSIuoQ{v=&%CCQ%f2glLJ^uc|RWttO_p_Iq zb}7yYmJ|K{0O4N-T+OeTH<91|yx_;5Piz(QXZ@=DKt4Hmi8Yzk&6{TzlcQyfyUq#y zsw8-2V-*wgrX^>i@c#U%@#F8`7!8jBlaKaq(#bjZ=XHBn8@Fc<9=@`QX@|Aobu!$3 n?1$%WJ^$@stNL0*<~;H@16?Ueu^p-+00000NkvXXu0mjfbHYq1 literal 0 HcmV?d00001 diff --git a/emojis/1f331.png b/emojis/1f331.png new file mode 100644 index 0000000000000000000000000000000000000000..51c2c92e69c536dfaa5159a95682d108b0d15694 GIT binary patch literal 362 zcmV-w0hRuVP)1wr!vVW$tvG3@Rm2QK@f?@Y{js9wVS4tbM|z}3dZb5sq(^!T3E=^5q5I(zR*U;s zu!mOh%QZa4F>ERuI8&7sY>GwdB93Dpc`fy*Whj5y!j@gRUU6FLJhe&g;*#I$UCO;i zH&MKxK4MvNR5|A#xmuN%Eiuj4;tP%_PcimWV!f*kDQ$@9N-)AAuHXaSR^`b8-Hz5x zH!#={xgEJu>#cwg#9DU-A^(>AtEF__a}PJ=l$dwXSu?*jL4-?tt9iU0rr07*qo IM6N<$f|rh>k^lez literal 0 HcmV?d00001 diff --git a/emojis/1f332.png b/emojis/1f332.png new file mode 100644 index 0000000000000000000000000000000000000000..d1aebc43d7e87ef9e37e412aa7e533834b2977fb GIT binary patch literal 614 zcmV-s0-61ZP)>nl;vj;fi<5(hi%tbyMDV3ea=FVT_vCqg-q9<@SU(@ScK00qL$y|;Cqbyt{g&M> z@`=R>6g$Q&2B_IKJ3**!p|p5s}_;Jrsh2m$Au)LK6xqU!)M z)D#opnD^ckdA{MjM=>st=Q%(?XhH;y07X%(GqVAZp{9O)|AAvtsq^0Z4oZzi1IsJR zs0@+;(m{$+C(!x=1Fun2t7~hhoh3of01#?fmZ8!<)kci~JY~;U82kw(<%v-%ihR`b z-nXr_$cH(swWuWh1mRo=tu=%YJt0NGIHGz7T~vs$m8Mw-H6a9AtrjZ%ejiCcL9G)- z(N+-XeU#KvdkG-i@XqflttB%W zKN9ufa0gT7a6~N(HBQ1B&&l#7lsFL2S>i;$0dI@og=1{p8vpIqP)f1n9LDkQ^Sg5#Bwy-=$k%QxObj4V)PV(2vCv9oVM&pg0rfTX zEikcWf~5>hEJRgTroIiV*ypNtb9YVu{|BE)L_tP;KKkst_xP7U`l5dK+PA=M{_;Ea z513zo%p1!3or)_i;z;6z&^`X?4$>X$UwNIs1{Pcjm4V8DGL97bjnF;*OXzb(#i`0T zQW>ZW!hmrgoghBo|A_Y;oEV2OK>(rq#&>hh3^wZx^Z6Xx*k(STvsrH#6y&)0J(_b(QG!m7>~!aZOh(xkE*JWge0n}VsE@h+qR6yV`j72MMUu^BZqCA zeTsdYQabDV9!ZQwBbsGHvuqfRMo6OXds0egm}BfyZ1mOlAM-a)5nqBn)#mjlWZz&A z`ooj*DfkKIXT*w2`sSmWUGn_ZkB&HIOF92kzDf_+p-g8N>{P@}F1d)C7yDwD(uLSb jdaUFR*>b7Jme}P_a1Zz?c5;}<00000NkvXXu0mjf?eHB_ literal 0 HcmV?d00001 diff --git a/emojis/1f334.png b/emojis/1f334.png new file mode 100644 index 0000000000000000000000000000000000000000..f00a24bcdf756f0ab125a81062cf46c89e512356 GIT binary patch literal 637 zcmV-@0)qXCP)#+X)66cn_wu+hrG z47zAr22(3Foy)c>6QS?F z4?KSXX!BQnqu-m0dc8d&vMeHx4Q7pu9=@=f+~y!T)$K+nfwKk^4&wN`nDiDIBi6%; z>ou$R5%987DlOM)wP$3s5|+uF7;GkYOXcz*z#?OeX|~(#CuHjNx@5?Nz?4(j83^ue~RYQq?B|%xNEnKutmi%WF8>A zWT-qoPIIcx|4y66V$^%9V%Va0tm6zV@Q>c-cD3DGC1~A{Ir0ZFOr9ZIJV-70XhGA_|5g zac8~altOZGXT6dp2}QKuUZaTRdC|s?RdO2oT@8GSsP5cB5d$|z#JftSPx2@=DMkJO Xd^f?z}+Lm(ndW6=L(&rJkAK%~v%}}=BJj@o{ zdn7daS-2NI0UgpuhV2slf?{wd>$@v-v|H`v&F`C|z>-SYIm@!9fOX(N&Rm?K*Is3B zc&EJc$n!nAEM+l$X*#RXX9VH{Fb=$thH*=NTi>A9LAxDJoGPvXQzUe(saC4wyqqNv z^T0TXT3B27{OQZ0%%mOqXvapO&r%@sJvaiy5HLO zIU<1bQ54Z^v=~5=h@yyQqs1Xfk9t_A7S{3nJf5HDP_p!Z@!Ie|~00000NkvXXu0mjfq}~>} literal 0 HcmV?d00001 diff --git a/emojis/1f336.png b/emojis/1f336.png new file mode 100644 index 0000000000000000000000000000000000000000..aec088d9e36af5818af9f7d4773f342794fa4848 GIT binary patch literal 445 zcmV;u0Yd(XP)Fgk6V#b5mY8|^PK1TcCw}JRgb-1x->tTA1`;^&b_=XgO)8K3E@x?@5#8CuQj#~yDeM;Kc!$q|+=45%zLYQyhKnjCsp zO;HO84tFYko4&pN_T_l-$j;vV!H%4ObdetW*8JJ{($B65u@e{PfRprl0>Yf_IX)`1 z0EmC39Jo)-vYc&<1=mBMO)uv`NdB6dg+#AC$(V^*^T0v+eFwjRv&j%g9IiOTAPoa& zVy4B`N?;c06=IV)T$XfIH2Q-39B_}nSdJ_NXHw1tAo{HViz#puv`P;vHu49DN#GPP nffxY10b7y!`oy!SejOgd?jP8)O;Tqr1LaM5C0Q7jY{MZ2(6Y(>Oh zPzv2h4Q~7og+g)Bg&@{$1b4x&EJY|J3z49UibN!7Bp>8HMmm$E<2mu=+4F{#&S;Bl zJymyZA8xf7X}?ttk8feikowGrA2=v@B%*w^G5^DAv+~y&nX0j|&)X-D-*2+HfW`rJ zQ4Dzxuf#~(K#X@^MHc0C+;KqhkQ@;{va6atYM?sSvnzyaGK)+y$y7($li>}_*i{|v z5kZ7yLbfXZiB3m!MnzSLc3WRG-PZZ&w&wNK&0}2y z$*h5(Ixd%JTGPZ0^L>J8wUUZ?PnO zRw8d<{h5uK@tqQLlF9APoKjXXvE2Ie-R1g^_i+rTYLQF0B;&Slx)C1>pZ+wud>y|@ zv~A%kuAqlik!SIHb^4vB5x-y&Z(NF3sqYKv9~rkWfm1k% zu=X6CtH#ASr>io6%X4GoKF*u;7kuqa>BvWWB71wXrR6F>X+Wx&4(p>N-~&f+y$_PhVB{v-zbwST@KwcC1@B}a4NGtA&fHah%p=klMg{PWe! zXg+;NW%Uxm#@Zt~3s-a&{!aOx#`{qpn!^m1GAWVLl9ax{L|SW(7FU-vf2b+${Xnbr zmaOrNYZU^DdDEDp_E5qQ&V^@Q5R;A;S4?`lwOd<0ThxW5mq8;DdoZ~XEB6#gFe!GXzH3G h-cGafyMLW45uobv3C^_KX-?w~d3dF+NiL|r5J$uxv>c~L$aFStK~ zBXM>uN*4@X0&CRxla^7}Ov1!itMf?GxAoqSZf|3QD(VB!3Es{mW^2@V5>c0>VTRw# ztUK0ekp|C~@4b$IK^3PkUQy#r4wJ*=XohrRBxHA~X=Nz~+ATIY**%XN4>$sjfWuWW zQpHFWBkeSs$CzPArH`KHD5+iMo~uL6hRRbp%MHX`)D=-+vbo!0tt_a9YQ_B z*pnICdNOu7nISV|#^<=Pz&^^dVpG4(LceSDyGFlj_@(QS9eJbo^vY|ybM}1}sHtM) zXOXjfisJdj_(YCf$>Gag1}O|uC_G=^9nF)E2g^%_S>a(lEqFWH=f(L-Z%*r0G#(2O zAi&G`gJ5ChNbXlAi>ts1wk(5|1P>VEO=8F@=8gdw@QE!=;J8Vv3`wSEN5KrtzzocC z;2~nw%w~asthyZv R*Vq66002ovPDHLkV1iSr>zn`p literal 0 HcmV?d00001 diff --git a/emojis/1f33a.png b/emojis/1f33a.png new file mode 100644 index 0000000000000000000000000000000000000000..27cc8b6f9840df4d598f83ef0ea0cd9bab071e3a GIT binary patch literal 778 zcmV+l1NHogP)eo}K~!DAL1>$07{KxW^Sp18dk|Q(u=}`P0+D9D=T$Wq?>7H*Q_?}nkC!PFZsU5WbL&0`^lNp zZ?c=}#<;rLv#q%J*{~e{a3nu?94sWc`IXBoe~fUKUHp-UPtaxNo>AR;JJ|pEB$Ca9 z8&AI5stuO7Pay1jA_{ZkXzOLb*r6sdn7$z9&RG;pweK9r(2?xBR1&>Qe5-~v8f=r7 z3_D~JVG>~yp<e<7T`!VZx*d00%npa_aL7!Y`b z9pUeP(Ox>j`lU8(ougPNpdkF(d=I0@^$Lfb%G#(8x>j$f6^{5 zff=r_kB%O&pS>g+#O?I5pxmd51ObT9KU5^P2+d`&<`y``6$|{!g@GqdB*pwkK$4E| z@^7>kujBFq^bh8VDy#UhQQT0G|A{b})i_EH042K2h}WuUZW7~P)q?>sC;HJS`MXQrDZa#6*UEvR1q#{*D?4kA^Qev2t zb%n1JXSpX$I?ft43EXxQuRRXPRp2K^aO zV!Q*=06|Vozr_O~t-TvkKLLyY(}rDUTS_3`W9e!SL6cqn0j97U4I|EPT>t<807*qo IM6N<$f)n<6R{#J2 literal 0 HcmV?d00001 diff --git a/emojis/1f33b.png b/emojis/1f33b.png new file mode 100644 index 0000000000000000000000000000000000000000..3bde2ad68346ca7f7ab96bb3ded9db8c8210d274 GIT binary patch literal 643 zcmV-}0(||6P)Q6#mPme3NNq0CHjKkqOTY;#V0{n}yM z-CoO&96d1fxs=`z#)t(eJt+ChHpQ`fhTY^*;yyf%DG_hl67iO>L|Vj>zQQfy4366p zdXla=%n{S1C4GheO-UvMWtp7&=87MGzNYKmBV&#|bcZYpm1&G)O(lPQeo|$xh~I?$ zDxaRc?5lHsYcw}Bnj0?u{;yWMbl07uDu;;ElDE;xgsv<2Ri)J`o&RCYcITJYwA!V< z?}QtIOjqcTE~vCOO6_)OyH2On?v#4cPe>}6o*Cj9mEobn)a0P;_Dl{M9xC+2OQ@-2 z5|T@#=dl{WsgreMy9R6-+cn_S$+`$#e~_L75PO1z6FF*mt;(2FnJ?a!5luKM(_ zfgPE?MSQ5QaI0m^V9&sgY~t|2Q8&4a>-a^4EiwD@zJ=yyx(#27w2F;a4(^nm(zSjP>u~`-un;W}VTjgVCuij|I!)Nx*;tQ16#M)>PizlXPAHToS zcqfm@p03xP`{+{hM5B{tF^(J=j_1?&kFG?-6WEI!BdyZW<@NS>$@pecE?;jSXqTSC z2yz6zPtvP-{eh89kv>D6n8ARaY1B}|e&l)@q)$?$1!28NDO6T5PuhtQeZhOWvUFNc dLIdle=RZZ>!ZP@ash|J=002ovPDHLkV1n*9KD+<` literal 0 HcmV?d00001 diff --git a/emojis/1f33c.png b/emojis/1f33c.png new file mode 100644 index 0000000000000000000000000000000000000000..7d8f1e9dbb461cba253eaa654f55b0559be92ec2 GIT binary patch literal 664 zcmV;J0%!e+P) zo7;ACa$;hxDE(rVwLf{)kw4ojPFjc0i82|+c>^Mx$W$?_Z*Sw~;w?9cVl zROm6$k6;t8)~McU zwcGc+*UR4f)2uNdmcDvgqbSR(-EQ}siYzhYnyrkA+*-sE}b@Y|I}x?DW}iTA7N?B+e6Ly#9nT|>cu28QI!-9xMs zgG*_1qnJxbcm9oE*+u}!b9YxAjv?*{BO?cuDi|7%+Aid@ALe6M-;?A2R|Qq z>%(!LCiTgtkyZ7*qPh=Ip22PzFEQsTrdz3P23jHNA6Y*e?RNX$s_Igknj<1|@nz=I zb+NggTJ?2WogOiM4fO4Sc!{H9TRz349{{TG)zrUJ3#z(|!bY8WZ)@JDjt%+kNv-@M z-6_$egNE!bB0t)BTgp`R0*ZOC%w zY^j$ghD3lh3$t^(Cx1WgWA+<`SL;STsoiFSX(QGmi9jO6=~>8f3VBLASB@Dr(ZE1N zBq9vF;Go>uM%!d zf+`OMaM4ipm`#kqm;BC<2L_x5)-+g3i{X!wP zqsvDqG$~k()I*QYUfRU0t?&d3LuH)8MvZ!cLV_|ZszM=`gkOhWVb)f7%%sWkqY~mt zAPDRcVW|jMN#uQn*Lb=G&=V+!qcQgwP%a=G638f6QT;(h_Qe>_Nr*pbB5ym5#%uV~ zhwS9ytb2_|{Ac`^ZC5@I%utYzzuSiGtL>E104UGtf2a)?*eera5dZ)H07*qoM6N<$ Eg4cjp3;+NC literal 0 HcmV?d00001 diff --git a/emojis/1f33e.png b/emojis/1f33e.png new file mode 100644 index 0000000000000000000000000000000000000000..04a7fcd81093de5111dd401fe9159e2e97f9ce16 GIT binary patch literal 592 zcmV-W0@ZG^yi2Z7l!aW1;zr~px!J7T$^{o*!i8LL zqsUwCl=4z?VVb!Tc`eM8(kO)uHE-MO*x7TQ^K&jXPHW=x(f*^$_?t1ZR!xbvES;BM z|D+IKZ!5%afm>7wo->)zkBKP_8sWfWoMxDvy@rP8Zn_Sl5j z+kkxg&zO#4+`6eQxm%x0uV5eekVNkX%pj;lML6@NhANYQ{EyTxx)QbA=nZohsC(ES)6$!nQ6p~v zbuc7kR31NQoi^kIw=o@{T8oCIW0PGG?0eK7)7+D}2VR@PcQC`E#PkU-6C5#YNB)Xf zhq)73g^prGb8n^qJ_qzMLJ*>&3^W^_8wN0&5yxH@hECuh e&}r1efA|GRjNHQt8Z0&d0000t= zF6DsimkmG~+5Ze#SW%=K#Yv2*+K^t8OT7 z%s*az>ZNWH7sP;9!3xu`QuJlr9OjqqLo5BV(#a{eh8$n(9j*)v!nHDZq!~2M8f5$` zT456_lC<}Y@8)7l+NLQ@MBS+FM$SLj6a4EunY$qPZgQwhS(#b&4eB{Z~HGtoqQ zgRo);X)9??_mn<3RH=U9S{d89+x>muvOYz?o7Pn0KBgL9q0a~4<1gaDh(`J8p(~||tYwTXN<*IX8{%U-6v~bT>{vj^5g&c3tHbkj;lU0O;OE)l z zou7GD&&65V3m_7lpY^!&Nz#e18sXdsVAs@602;uAtf#$=6L>Eu(op~!fCgIlFJjGa o2{bSTqIa35c`Wl5pzuHZ3A$-2>bp^Ou>b%707*qoM6N<$f+vNEe*gdg literal 0 HcmV?d00001 diff --git a/emojis/1f340.png b/emojis/1f340.png new file mode 100644 index 0000000000000000000000000000000000000000..54cb4a1c9c729690d18f85ff9cb45cea875d7560 GIT binary patch literal 502 zcmVURn-3uYPDawIum2leAIP5{=s8!@J7vGN=&*W+Hx7 z?{HE14IlLN#3}rW2bJ23&a8Irx2w#GI26VZoR?Y_Ia5A4htvATR1PVBqS~fc8>`C% zwj(~vc*Qky%D91qNwHtgFKu<%iygkSSoulcVhc6cQ6KDSD)k4Z47VG*4L3zi_O|Zd z{65?yORxze23BB&h2CP4I+%FfHe%NQI8jw+CEw#HMiB!~sEOikcxO)0c4bb)R>{v{ zCsz8>7P2AyP~~?#Mzx|BF5ws&U$+wb5_^g(7;nRmIBvMtSdJwYYQk|$HQ^0r4EGoQ zHQWr|v>ms@)8cX%Gw`Um9(Lhxj2gI8oWyj~RHQQ9a0IXPJuh_t|6zS`1JCrm3Wpn} z8?=?qytm3Wu~FqwWX7EMC!E1HY@%Ki@62mbq(~87rreL3i4ujHz#80C^-y`KP$-%% sbfF7f=t38|(1qe&sjC07*qoM6N<$f_z%$hyVZp literal 0 HcmV?d00001 diff --git a/emojis/1f341.png b/emojis/1f341.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9f4717489fa753c85c04f8c42c568e397c95c3 GIT binary patch literal 434 zcmV;j0ZsmiP)@j+Bv{DO|Rh3m;pU;<6eI#2Y z$EclHA*R((T)`riO3h=g!y{?e{g9J>DF<=Ty5j_OxHauA9{PU|yUg5ay?zP%{J(vx zwYJnHjwla`%b53Xo=2U+t*)dOH&yQG>#SxG@oR;vxLC=Gu})vs)lj@3#y;R3=B)dK z&Df~w8HUPNo%n7*9+lc#sh7(8$ngl}n%GoqOR@{I7#Zt`Z$`Kuk%}p?hG7_D*@VuY ceef4w08Al*#?QS%+yDRo07*qoM6N<$f-D%#zW@LL literal 0 HcmV?d00001 diff --git a/emojis/1f342.png b/emojis/1f342.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5ed0238157f9cbd0dfab4ff3eb7d8163660b12 GIT binary patch literal 771 zcmV+e1N{7nP)A<39KiAK^W1Yj-`TF;V#juziX;sP7}|jWRRVzoV(h}ei$E-0 z_y<6AVP!xF)=o?v5JQDf#gIx!AdnDZ^09&9mka3@J&Q$n6%Cc&}g=p-n@>=gDrML;qIbrIL zZF4FK!nGuvc7PvwfVbMdq>Z^6jmE9mpHS|0zCft~BCi48YsoVt&xnKY;`Ctn`t)GP z^kB&JU*Gs#B|Nc&qIt;Bq2QQ$&PdcMrQ?UhnxuaZxih9aVm`>=7&cFf9`VPC%v4_f5_7m%PAmf#$@mZ zh(yX#w}7vcARwL1sh`{ARHfgi`NZQCn@yCKo4Qabe^sp4$>M}kw?nztBV8vbpASIxjldLv>gFRTt$&j&e^Vs?nR^7dtTY?ZXnelh>oPw)qO#sc z+xD-LBSx}p#V&atT2}EJ6gNP{N?APMm{gv3s?|@7TYSa#JTn{qMdj>zNom0-ZSAOn zwIc}k2>+oNTaNRFIBC zgo18F6v0gixG7R`)r}inD5x7ZZn9DfO1&VW(Rv|ijL9UEF>}A2|8s&>TuGltmY#fx zyOk(bkA;P53gHHK*rf|EbGJnGBIqquy&+va;W^*>E}xt^1RPN{4T!#RF6ytfPM+Q#9C;Ju1%(>u8DLGJVFyv= zUEkck5_o>%zViJg&)A0n!{4@mt5GceRc`dpy?OLQ;8l{N(+*>+KBAx;f1i4g5Y@Ili`>qCZqBlxi7u7F}C@CP#gj2^qhT|cTi`b~I z^Zoj_{JQ3aXiV!Q;#oRKg}H`8|-$0j|am(e$1zsnWdDSBcGaK9E}KKal&|#1A|eY?x3@b z>OH7}Dn><6^a{|)rwWJ&2gcEuAQmtf_W9}eAGo!-%G%Cvc*dJX%=?NI5rcRB@);&} zfnNd}JZ3%XF|pU)rI0RC%9ZI2J9PSOtY(QE-k3Ka&Bisp~(5)0Ln&|BdX#3%unNHr|B4nl**l&%@SBrTcR)UlTrY9F&5x z&+60X__;hzSAuYF4{JgV^>~X*q({fF@g}_VPo!Avw?JFw={W9(kC^%x-j5VsD$N@0 z1gWNK9K`b|Ehbslrh#QDN{dUlvvYW}zF{ z7NC=@I+aKZkfe$hKmY-Rzs>*-TRFfP5fA|p5CN@4&?0CNvtiT_Vkn)SFF=%Q40000;9d()@4~X|YU5lO9YjWXRANk2E?3pLPTW41+GI^iJShFw{WTfHV|P zUn!9JW!I}7=~vU}6#PkNfvF&90ejiJ06G(ZLsZuam)S?!(s6{Pm zvgIFK@^6pKh7MzDe(r5wRX$(Vp4+CS^VVQ9>#X!i(z{(MNxifox$S%9ugO-k4{@{wbk~M z);sp*F>-QdVkTx{CT@8f=j}n_xlt5F35$9i@1ySRuSrNqNJvO5;Vrs@8}9A~KHjY2 rKa_lE*3Yu$O`OCb{DCVt*Jk%7M@yS8)o`@;00000NkvXXu0mjffLht% literal 0 HcmV?d00001 diff --git a/emojis/1f347.png b/emojis/1f347.png new file mode 100644 index 0000000000000000000000000000000000000000..0c193db33c3e29a8c4e97d66028db5e72eb0872c GIT binary patch literal 676 zcmV;V0$crwP)f9=eYJ&-Orh625URz7f{`M%^_^R+bOKD{0H;$N7_Xs)2 zkPYPA(x;7!&6hjhxKi7Uv7tn`c)5rkUQ5LJHyN5;3Sgc|E3=L0O1hIh@MmxlO#ApsEaop4dx*eNa{N7d%UYju&v@{Ds z<&k!hdqtVIlD(L;+va2H(HzDYCfSk!-9dFK8}uTEJn^Vc&oN0v5b+Qrs48Vu{9&xy zwTBKY2RrS}J3x)0%2gC)fp2}rsVax&Kf!uF|8VLW25(WU?=2Y2XN-x{9h`IQt6T*J ztmm^&jGPru?^>f016#mhM*4Y1bL$O*qK^W3G2q0plT1>_ssuLd*J@Kg0**1e={E0M z@7Qd;qn~H|hn|(daB%VP&q>;Pm1X_Q4E2lNv%Rcy8weQ620h|VivzRs{EN~1w(2t^ z)N6~6>op!TBF4U6-+cX(Q@7%Y_cX71HZhVfSwUqth@EB^X-Rr zVAwKZs3tR3?P}Gm>rc`od&?So&W;Hh2pZ@@w>baf*V8zQp3cS@#u$q14ywvkz2xBT ze6XmFUvJy>SHAPlSPT|}@xH@*FV{C$ANk-9v%!#JI01yiy(5lh_o!DjKV5uJWFr>U z@w^M|!!G#Jhk%*p73FyP+_b1(WMhAFz`Q&}5SH~{8vwp<22`%UqT441l46w#i7bS6p-+)5&1S7 z4BrD5>_jeRqgK_=P<>OBb9P*(o_{F{da QcmMzZ07*qoM6N<$f~spoTmS$7 literal 0 HcmV?d00001 diff --git a/emojis/1f349.png b/emojis/1f349.png new file mode 100644 index 0000000000000000000000000000000000000000..26417714899dac3f5555a927dd09c6e862c24eac GIT binary patch literal 663 zcmV;I0%-k-P)HL9XU{(u2qS``4t+lO??^I>P|BPju_i|#dEGI(d^OxyG8C?p2NLD-NZKyt@C#y0 zma#3(bXq)ifJ+7Q3j@38wOWh@(KzFok!emTanyd8!Jqqe8M={ZK6aRObuJ^5%ed)kYl_Il(ksBx&e z4g)dRMG4Pio3I;)9}EmDy7`;{_61w$O8-d|%976f6lqEEY&Yk;kqE_{BSb`RM8@tbu)IY9 xah9#&Cpv&}5XOlJc|`a@<2r(fqY%SC`VKi$=Y|2T6bt|W002ovPDHLkV1kP}GUfmP literal 0 HcmV?d00001 diff --git a/emojis/1f34a.png b/emojis/1f34a.png new file mode 100644 index 0000000000000000000000000000000000000000..590d80ad16ac3b008966036496016ad4be35ecc4 GIT binary patch literal 452 zcmV;#0XzPQP)f)qJ z1)W{QUr=2-l?oO51Kf*K>*UZu>7X67Rnzv3G3W6W6@sWVxh|c*J;HCLlxSz!rOL5^ zDKZ@ga_rZnbRAgZFXG`3o#8C%En+K<4&2R4@i7o6M9gKsD^<1qP_P7Ez^u|m_eKxS zu7A==5AJ%EU#(4)_Ncs<4oAJk1Z&jTrb`Q$7CZpHP{>|PY5v48Puxn)&f(I!NHs#&se+*-7WlwW5#i$O2 zG766l4O-);I_yM{uLz%umJl?6D!ozRW)MH9PJikFM4>`|DuJIi=}$9&0WZ;?<$w)l z0cg=P&jkU(tH3n9S&^9uMi@czeZwL<^BMb^VKW$GjO8Xy4V&kH`L`9@7l4-(q9nR( ufG4rfBHaSjfeO$BmXp#m!wjOyFW&)KV37S{*9*x20000@W7W)-fi4xf z9S632js@})A+4|9p^G;5Hvb@G3vdaV;#4fd{KTEi+Pls%){D3 z(ChBo8~SK`n`2iJ5DKhyOMa%Zkko3ahcC>gA8((RMkAcIvCusJBP3!^Y&E!Gp2}%$8@|U{>WDE%ZC&D!+a>og1ZgPSF zCotlSAyf9Tqq;xU2CzC3 z*fd~Nlj?Tuy*(85E`Bd%8F)=KEjN|<##B}?a0BEyP-8gnlz+Vft^yr~^TdI$&LgmI zAoIXMHf8S}7#ny7OoCkoIS(8IGN2870s90J0U!SWh&FpRk7sS000000NkvXXu0mjf D&(6bH literal 0 HcmV?d00001 diff --git a/emojis/1f34c.png b/emojis/1f34c.png new file mode 100644 index 0000000000000000000000000000000000000000..9d5793ff0bc17dff316ea8045185469dca68d84e GIT binary patch literal 728 zcmV;}0w?{6P)Fp%Fj;0R#|0 z009ILK)6T5EHYAUHbu;gh`}L-{SY_;oInGFLO}vG7h}bLRMh~B)}*IH*qv1k-4M$U zRpYHRow;C4mJxC=X&Iy6rshN}_sF<0@)5{O)U2EMnPT;rljNMHvzNuB=NPGakj(rf zVmvh`82%;l25<`WOVzOCtDUcn?@zhGw;MA3%o5{|Ldan+N3;1)V?e37viu7XCuuhQ zY}EK}4Ao^sf;9;;{QXV9Y4IyGkE+By?`ORypo)Nb;_>r0#le}sqiPUVkn>|Q= zDK*(!WOGQlhW3_)nddP{ry;)o@gMyko3 z29tsBAz>FS*9S7b;GAt9YT8CjZMNd7a)XgXhqlGu`G%Xmh@EUP5^@;+0_v&#?S21L z^!>LRY3D^T$e z=5~~%>q!Qmb@SIZV*14k56^#dbn2KR>D(yF-fx59`V~}jYX1QAqZKnWUoZ>+0000< KMNUMnLSTZpa9pPV literal 0 HcmV?d00001 diff --git a/emojis/1f34d.png b/emojis/1f34d.png new file mode 100644 index 0000000000000000000000000000000000000000..526f72cfe03d1c240c0e40f374178ea3a7c86098 GIT binary patch literal 622 zcmV-!0+IcRP)A6G3YW zD@zMoy9hR-q!5K*E84|BAYw3RaHG2>v$HdE?|oD>xJU%giSw7vxvR)ywV1cZC(qq? zV*Hu^p`Jdw<*sBWGv34#DQ`wNS;EyJ{io6;UE1l>J442^cm-#PPcrETuk|VVq)+;! zPx_=!N(dpo!{@;zRDU^6e1uy?TnHi%2m}Hpq>$%AyowwCv4t(-GWmFfj39ytB8Z^K zAmax4se9X#@tz?Vf*}}!As9mKq(A%`X|D-$M+A2LDn&d@LLc@~!J; zyK4)4i=8vGCN7@hkyD#z%KYF5v(0OH``~q5|D_{h_~L0tT|dn7%^ercZ?{)ArfsMV zhbuDa`gzKy^!+t|E3sIL#ZoMmVzKmau7(#*w@+@2n@|e7dyGd+Mr>}(BE1`{u8CDA zR-K}0Xd0S^rlDzA_m5hxD8Y#>GP$)+CbP*irjwV{O09|rB8VV@2u5|+=8XM2tUJ1n z?fdCERvjgtmjgK{MwL-zR2fx9mF4;anQ1m~ zynXQ@B8VV@2qK8sx9&bRi_@% literal 0 HcmV?d00001 diff --git a/emojis/1f34e.png b/emojis/1f34e.png new file mode 100644 index 0000000000000000000000000000000000000000..a70cde156f99b3539ce86daed2ca8507d2592f04 GIT binary patch literal 460 zcmV;-0W?hn;6`^6Z1;`uT@08@UCjL{@+f@Y6TuCmE)C{rQIEzlyO((=RcmIWlXo z0lf7WKUEBj<*_xf-dnoxCCmXC#>bVi7k0Dp=9O37i61ScOoepc)`>Q!k+1a0#?@K+ zMpgBlAX6N(8+#07nsS_B@2e1Q0$nu|1YHnhiW4$T$u#98L9R8_FEqrXUIi7Ip)O$t zF_ZxzrM{Ft<LHI4!ddW~G^-hF}Q6SO#+bFUMHM00R{a!Emtk+w&NR3}@Y@EER3HRkR&N z+u^^r_`_B4MXQn#C-M{sz#9(T23&~tMDp-F;m83_EQv;4l3L>c0000*;5OF97c2Fr)SHZVM-HJH*0lK(2 z>fj)Bb?VUXP;k&y2)Mb~K@e-Jm=qyta@yzIruZ_Hip_QD)~Oa=mAYr+)!p1?>p%Ep zW^aKJV`o06+pVGBcl-fIi0xLyE5_(t?M9_#k2&Cckn^zdJ-usvOwY^ccU&APTt3kt z6wusGZ}w-Z{ZXAOh|`FB`IoZW*iKU__0mdVrLa<1DXbJ$ikLmRz<~_%_ViR(lC`@V;^P{JQFK4(O)g{<^!r0D6qY>f8*tPbt`Im*y)#Ud_p;bEU=R zN#L65k>6%R7U$jlX1SLZar#E-NLrFK&mp1RAha7CCh20R#HCP;m?{AUTVPUR!3Bmp zV>KpMW6Y2k>oK_=V=?s$6l^18kx7($X~T;|47CWN!-Qn&D2o`;AXo?3;`p`*)*%?i zF9op1@vR9jgky3??%=)x?C^g(?!MvzqcVzds6QAoH%#d_MNRC ze*5aXKW9semyVx*e>y$%Om%8CT){scWAgl~NA1Y#$3FUHYh&|^$)STH=9PExv8oTL z>mFgk+�U#W!b5i}rX~@;$kLZ}7A7uU#hMzVf4Z%fp_xNYe9R^ z8e)IGE_8|%DfisQT~BtCTqT+yh{z_cdAyC(_#lAR1!Ihb^mV-Z&&({N~^R< t<$yhYkGxTQhLbpgzrsqmQ0i~H{0DYnoYWJd+~)uQ002ovPDHLkV1i|Z&{Y5c literal 0 HcmV?d00001 diff --git a/emojis/1f351.png b/emojis/1f351.png new file mode 100644 index 0000000000000000000000000000000000000000..2151ebacd2e83dfc426def777ddfbf9633006624 GIT binary patch literal 572 zcmV-C0>k}@P)$F=?V!ETL~dT!iEV=FGD+-&gsnQcV2@@OeScbM~+?EgE+-c2cugD zH(ktRgM+FhaV>tdR9w2EsvqK7d;sCFF=p2K{&biM3pB|2siT>6Tl%K;?O8x*k|fD& zsaU$aT&~;(e10qY);ni?d!IVHqhbe3ZFX-Jgcc!Q&-hAisyDVaR6|7^1&QXZGcTwL zKY0&F#=Z=F_aAJJf>Vj1bJ0&o1iGu1GldRzy>_PStD`^H$(AI=?xd|N@3JTIF7rI^ zvNIM$avI*qmFXWUr-{6Tl1<3fES`c6SZ1CS2s%PCeOVd?K&C;54MH9`NkiHhda4#r z`9-W@B@tV6mdL$w&uVy6LNJxu7~ zYK|6afKRN0I>mT~7Hp>78B4oCMROoCp=FaeAK!+-+UNVtdMXz~Mb%&U^4cF_a?0000< KMNUMnLSTZy9rC0A literal 0 HcmV?d00001 diff --git a/emojis/1f352.png b/emojis/1f352.png new file mode 100644 index 0000000000000000000000000000000000000000..4c81dcccc161b38ebde9c17d244e22df0e1d0725 GIT binary patch literal 633 zcmV-<0*3vGP)Vx%=Hc-M4_J93eY>_7oi{rJZKcT#I!S&!m`Es%EuyVsh*X zaGOK;*~L+cyrjrWdi#1_wq&n`R$KgIu*}Ohi@aDb^73(!mlSzPk(U&CiGSt%6dhTX zjSmeU>jh1;TWtq8p6e32DD)811_%%!vaHL~;kcJNVKItFqyHMuk_0VcB04~e? zI?^5fBO4okkq*iIE@@I?RmzrzhKI&1*@yfO=e);xkMkZm?EoVrOS1GH@Q%T9r~;u1 zgenlKK&S$t3WO@)8r!=xws&c4?^5jLHDDpsSqSx>C40+z_chqL6l+qfNwFryniOkN ztjTP4lnzx%J%2`I~+?InO?`S4mnmu^^)b ze2;Mz*lf)9e$~IzUg^%GfIXaj1Nux*`%C>3keCMD1!ly)3^s6X|=93Y?% z(-KC)_{o6*b`?0zLG!?ufH>#_%=#S|NHZL*i^Gi|9d}4P^9x5SIouXzyACIC`VM%) zK|f-=3q=0SkiNkC%3mHBM@9)+LreoxK!I^XviIfq8PfyA954zz!uS}|w;22d#K`@e T%zo!j00000NkvXXu0mjf^duhL literal 0 HcmV?d00001 diff --git a/emojis/1f353.png b/emojis/1f353.png new file mode 100644 index 0000000000000000000000000000000000000000..03d57e7b7c1b70233e3db7d77e96bcb4b3ff1d4e GIT binary patch literal 699 zcmV;s0!00ZP)@Ry^i&!zD)?|v z4<0;QJqhALw10pPpdcuSAlQq7pwNOuDb^NZTX9<>7?o&@o9s+xejjIK13`SfZ2R#6 zX2@7!Vh||G81Cus`k_#svj%hv&v~RFJ`pZlHJ6qJ4tEH%T|kkRAQr{3>BULO4aOxq z;u3#`S;B#1BjlcMs01UMs^7-dut=u%M}x`kHm2sa@%6b;tBgc7#3|?1Z*UA~k_p?N z$K?8My**eMPy5D}mFWF#g4&-A1jN;la4N+-xr)pV3sxX)1Cn4*M-Q2e!8GSO>yhhu z@Sg5MH@+F8BqfYIg>nU@9=xYCzlM@@xzhA8W{;d4VD=;6XzAU$g|OVtjINc-35o@B zz2ARFTW6KbRuCZ`FnY<%>8uiuzvIcp%cN1njMw)bAn(c5uUsRUoFelIfy2m+Akn{L z8*P;i(kNo?+BI~o{ED2sXNI3n$Ov==1Bb}yEN0Dr&tD>GOp=>;S|@EbnXTi?MJ(C7 z6VPqJkN_tG!DAUm(e??CvyT28D|0$nAgw1 zB{D&&$h-~f_{cdr7WZL6fRAFLu{X~UcTHddhXDo{9&`YB_`d!>FMqv9PD#Q)XD)z5 z|Mo#Lb0x$iEP)C1OR9iu%keJ38V?tcIHqn)v zu3dKDKcJg-(S@2c8W%=m+9v2?)U>H3-l#27Mqm(!(K&PBobz^$GU>SP^YDMk`ROT| zR0F`e9jWA(!`pj51$ucWFT$^&H~bC1Knv&W@d-Bd7-POpc6FStz4lTlZ^hFowzwHy zKF!nMq53^=0a&HMG+?b6aoXB)#@aI-+dfFeQVAj=f?usuT6{?)(b=Br`8azHk({ay zsfHM1O;U`#oXPfN#TZr}{X@N6#WH|*1-Y356)zxi@bH0W z&eYNI9Wlp{yM2#}7cg^cncF|DuzMuU@l*X612?Ybnfx&HMBLaY6Dbx%4{l-$ZP!w&wv9Ib-ZXjNyg!XvDIt3v z`RzoK294N;QU9hVc0I*Yq_HXH3CxQ9re{V8`1tA!|<+& z1Y3<*0yEx*=i1bL6DOm<_ftWok_w9XJ@r!Yl-9;`E$SFBrj(S>hBauVQr&iU4-yKK zd$hto7jtM&lRX+CdpN-=U9D1^ne47D6$iEHj49c&4}tUL*|JxiF)k!NhgbJqf|{n` z<)1FuBMAsVYmiU~yZ4LpW=8+SJBHKY<8=6#A#Oc6w^%Do)ack1Muhh|`offFJjPDG zWb}u57Dp=;5q(2NKt(_mp5DuQ zC#~3eCW#d{*z|1-6%)K-FuiVveOC-VQJMZ2Yj{sDE&S}x`DfiZpZR-by1$DfrjR)p z1FeTa*H}YUUU;mP>T`y35A#3j0HtDru4`s*msnZw{m#D7Et;s;k8`Xg!g%I@HDY%< z{ptNt=Km-&bv=)hk-wwq$`nmh{<%f7^;*5TL1t607*qoM6N<$ Ef}-YCNB{r; literal 0 HcmV?d00001 diff --git a/emojis/1f356.png b/emojis/1f356.png new file mode 100644 index 0000000000000000000000000000000000000000..e7c8b7a2c7c710ad67529bb67fdc3a5ed8276c76 GIT binary patch literal 598 zcmV-c0;&CpP)HVNn%hTM9`muT_QviO33|lwgcw9s-y6tA0DDCu6VXd)?*K zFi;6h3Jd@lim-3>b)7>3YMsis7-QVeK0=17NUrBHW&6)A0t#CfB*sr7`1#* zDiDS#;CVi?bBn~?6z96yuLYd)USJ#;6CuM6O8^n7fJ*Xsp3nQ)7-h!h!l_OIPB}Zm zz$ow(6+s0H3lLU-N%G9jEmE^PNavA*Se8)W3Ze~&VyOq}qbLI?_kg8zHb=ru(b3#Q z2`Tk()dTxRR|^6NYzag~nJ~sg4%F2gD>sIsRPPH+3t$?18Yqz7-t=xRfBfDHgekDM zbW*qw^-~nr> z-p;P&+Pp3Q15gX}19uIo6celsWKLW^dUZ9HXh6jU()^(_Ko1Z@^^Q?rDa8qvX=8W& kGWkT_0DbD~2&%7t0k6x;)SuTs?f?J)07*qoM6N<$f+MH|`2YX_ literal 0 HcmV?d00001 diff --git a/emojis/1f357.png b/emojis/1f357.png new file mode 100644 index 0000000000000000000000000000000000000000..6924bdbcce8cf52940114cfde089bae855630054 GIT binary patch literal 493 zcmVq*NSAqByyfHV`X{cu6$5Y0drelbFFl^2c-X_4O;1a~GeT`vhO& zZU4jI;xlvecpnRR2=Abr(g5$_C5N8Sx2IIroYG+XxAC=y&rDD4_a5(>1+8D%y0`uM z=Eff@Nybi)8*eT-@YuPTM}~{DpAV+mg^kr;-2LXKo03b|aE!KmevX>h9qrs7t#5um z9z9t8{q|746=6H`v_iiT$f*^>ZzH+h`I)Wewf*@a@9B7)FCGpspZ@x`1xL zqi#eHJPGnd@1P)}F$@&7S>|m2e$Rg2rc7GqsMkx+?k?~*m2T!I%U9E>5~oBJvyH^8 z$_4)EodteVQIT5_ECVV26oai}_5!2EfOnBNV_HI51@c@j1$vCMgscL#MW4d}qlmN$ zjf2XtBuJf>=Pe3Ge|8+_gQ%;xq!Z+9A; z*==yqlQ~c0sE%_HW~zE*8?BQcA;cZu3o&MlWCoI>-8`l*mTbeBQ3clGPMcFcm0^^z z+ysTirlx44SgBMl0Rg-N8tfsRotJM|LrGk#tnjJTS?QGiJ6R>69cSAqh!X3ucCyVP<7XFM%QcH6UqL zQlBIwAqi{2%rG+n)4*xk8wH+f6Ou4?Tm$a%e>Wvvm4qbB-EsGBcYl(*n@7-2?oNx` z{js|jA_9{{MBK}AANsPqMl*Bv5)ph|sj~8Wot6pUdPHFEUXXM@O^hRb`zaL?wyoCc z)ap$Fki=kbnVx+eYjvXvCs9s<=;A)&LF(oSN+BwDKO{;1h(E~ZJ6&@%1rGr;B1k>QC8=g;-j*XxQ1 sHb|n>QHs%#;a_>4zX#q%#5YO&1&gV@gk1nGssI2007*qoM6N<$f<+MZfB*mh literal 0 HcmV?d00001 diff --git a/emojis/1f35a.png b/emojis/1f35a.png new file mode 100644 index 0000000000000000000000000000000000000000..d9e3d26744b24b298c773b0a5b66cdaaa4de305c GIT binary patch literal 665 zcmV;K0%rY*P)lC$EX0*v z6sfonp_DF47vjnWU5cRyLb4H*Y^J1^@@V0QUxPY+|oWOtMa(f^bYkjsiOY!>SbL9_Gk7;4+Z1#;OWy zz5phHCjVs-*`sg?7zGXkbNoYD)dx()Y1U+e`${CYm`o$VpIt{gQ}2bIZ>M786`<`ROHj;TX!3Czl>eiN8=MC(x{E92-YZt zD9LC=F&nj`ghI);Vyu#!pgeVTI2t6|`O>%ktl%C|E1oszWGV&^#JgfF@f0zTu!|YXXP^3z%W*>P)|}Ca~UEV;1_O(FiTK+MD+L= z=EkAUfV9sTv(1ReQBA9Hx#CbjL+-OI?xi%PI|-A~KrEnK!L z>fVivKf)9)V4hyZ3|~WDKOnPqC%#l98Gbz;}B*S3g2?GNU`)jVgQ%;;Zi$WxDFp8qX zbLX@!YHe+m{LDO26fw;?N9k>eVzH<%UlpI$oa+V70M7EBfCG*@=S~d`KVLI6{Oo6- z3uxh^H^3msO;qoRkno9BRlbsd-U06LzmyM@FWv!*=J*gq#=GeN0000wvNF(;ysh_tqqOc%uCH0zw9-Ht$N+zu;VW}RtpxcDjEkHx%2xWDX zL+XM79MfaFio$(f7o5GYauMPP(hhW+&}qQ#eUNdWy$0q8f1B7-3iWQMxVn-(Nn=Cv zK>094KD6u5UW3vM++7BL8>;hgcbNuLtYlB(6!O2B3i)Be8JFMFZ>t;4pQt42?8#P1 zW`-Ddeu4EXM7av?(4x5(QxBgfDjue4jd&4UG-J!UR#^J(N-mq3>ntqN@B?nRE^)7m z*e^f;YRg93IkG!#3WiB>>07)?`RmS8^G%aDj=BeDKPvoq>5KgLKaf-RDD|rn!HgC6#Y4k*-QPLtM)L<=Q*o@qLY~AQb#xFA77KKqJ&GQ< zVVFw2AB&tpc)*N3mxnw=P7Q4HGs{lAq2NicRvGhZ6_B_tN}cyi{b}s>FY}1M0AZL( Un`tQGA^-pY07*qoM6N<$f(-_V4*&oF literal 0 HcmV?d00001 diff --git a/emojis/1f35d.png b/emojis/1f35d.png new file mode 100644 index 0000000000000000000000000000000000000000..ec2416e85dd1c3ecf8cf488ee7fb090abb6ed82b GIT binary patch literal 857 zcmV-f1E&0mP)99O`+h5w-@zc`DgkcAZCj-WW zY7q`hL)Qz1eXsAxw!CeX_Vmc=H6l&Gtj#=+WG9#mXqv=O*AVCX_ul?>>Guy;)+%M+ z+q|X@9(X)!>e@M@eq+q6oCk*ht^5M#rUf}ahxM5js0Y$Wj&>ulcbZJQwRfoV<@W{$ zMt%@NoDqhuoiZA?#_Y6>a-h0WNIcqy##$PPZB#Gi;Vl(W|6>&ZLyCT&;ef&_H0MVsrH+Z3 z>za}E5a2Jv>b!*Z6D730>O$lcLdSu$ZKzZV(bg99;dPLf0#YN0tlg;9YL*;7{KWAG zckR!SNAsSmW31ogb?>I6rwmrxx9|z?PXqETwDm5-XcL4=+ntbY}2EdpKe6_ zEXC2NZQC8XuA8_k2m;^pygy@Q&T58nR!Q+S5dz$$o_gjOwgmvD08HspkYC$OgW1MC jL|!h}zM*Rx<6r&;{gpuD6iF!q00000NkvXXu0mjf$|Rn$ literal 0 HcmV?d00001 diff --git a/emojis/1f35e.png b/emojis/1f35e.png new file mode 100644 index 0000000000000000000000000000000000000000..463313540259e62e7c3dd2d9ef0203b74218f5a0 GIT binary patch literal 386 zcmV-|0e$|7P)0i9*Phd7~){-EiE-PxM$Jg(%Mjcfj)qfTN1T4 z=o01TBDB<0;A*s_bW!5vb(il>y}OrV$i0Xh`u*_l2*#G;(ZIpxMlP$YWyZ#RK2dMn(mO*OiDgE%wHtZiL9KAV@3*s5CX>@!hG#Pf9imH9wr&guJ0e0 zcgTI|=rpCI_hRWq_+ecG>fIwa=a^(N`;5wRI3GeMB)OiYZY{ zi2@v+>q5kHJqU3iU@}`97*@O6d``~FVSMKdhA>~=A<#B0OCuQDUQ;q#>&h;G5PrwH gx@nwW-Zmb-07(Ca*9Pz)ga7~l07*qoM6N<$f|{MEssI20 literal 0 HcmV?d00001 diff --git a/emojis/1f35f.png b/emojis/1f35f.png new file mode 100644 index 0000000000000000000000000000000000000000..58c3cdd774df0599877a5f5a7826822995a86b0d GIT binary patch literal 700 zcmV;t0z>_YP)l+`D-*``^@Xo$$fMfzK(mEF%<>DOr-kC}5$l$k)d@%+Wv z_aUioU3oueW4p_vFOHZAA!IAPKkuCFFWecP6rbj4vaPDSG@{S1-XIW?qrvcJw>0V9 zy0^#q$r9@yEmA-Kog}Y_Iw@~%AM(a$Z=>OG?PMqVV4>aqCXStV<6=r}cDFX``O_Fb zjp(i(A-cxK))ey*t($8U5Bng2S9*c|cXoR)9N&#pzg07%s{Pj0cTRbI>zLN<_gLNx zgmQ{@x(J3i1p%sxsFU&5#|PBrw`%XvaamD&pS#SsvNg&n%c(FdPB`q47XOddzjQlq`;!agp+G;Q>OR;i_QFeQ6;)Rgu@Yp!~xJ i9t19&3y|~@P z-csZyierygrCe)pycA)Ke~b#Y-3jSo$g6n*T%=3Eg(O}{ypJUb7SlAqstVnTh1$eG z>B~YPSDQ@IkVL78R5|1{6?0DMeeefk{sDn_Q;OiDU1{h5>Qv6?6en5XDCM4hLMAWH>}I zzeSX*0i_R7uJw+6w%KwV$h!O+N>T@n=po8gX|#_#YPMa%KBE{EgJRg+9;wuu#k(BB zt64^6UNI;J#bDJN#>Xn>`}*Q5g(#gt#z*ln>SKJ;AZ=IBv_tCc?&kK$jW`Kwbg>f? z)oVwG<9Wb9z)yig0*46;*z6$njn6O3s{^+K>PvZ7r<<)cbgDlQW3AFlyA!g!HgnG- zOW6W{uxnpSAGbDC`}%gJP)KmjqY9l)z|KxcwHhX>tZ)b`q7UL&%HP&ASJ%m&0Y-on iC%A_P)jK~$Z=JxJ7H9KiAK?|Gg(Jw5+u(FuC=LP%J*v_*knLlGfCwDmFw4S}|_ zH8nQ~HCvlOQ&>(72DwCUREu0CrV(Mum7V7Q{nt@Oa`_T{KGIV zh2o;XXa12JyE4>T`TqQ6hj(nrNVXdYQlguvUPOr5gv(`$%bi|FB4WGwrNNN7ph6kA z#wHxd9ud2XI)e7mGeLe}6+%g1** zAB>VToTNs!OkxU;sc8gC21==zw%OENVh#4}U@vL@!&o--Fj2nQc04R#L&GW}>@}i8 zjiO0Tl$P$rDa;P!_1g{gTODfbkCr}bV z07IRxn8kaMJM$>Ag_%@F`I`ZDvcj;25SUi;%~u&`mF=@JEmie1qA#2%P87FqDrP;A zWq7*ijz*5-)GX#r*j0{FV`M*8-c#dRBEz~OmYZkN6Z5Td&~Ks`HOdpom>vz&5t}uq zZN}Vnv7fLJ>yxxsncz3&ErKM=$*m+vPC1DT|KWy`1e&t-2Y#@`-AB$G6aWAK07*qo IM6N<$g6Vhv#sB~S literal 0 HcmV?d00001 diff --git a/emojis/1f362.png b/emojis/1f362.png new file mode 100644 index 0000000000000000000000000000000000000000..607a82787e3e253eb3f13df4ba28eee1946d39cb GIT binary patch literal 612 zcmV-q0-ODbP)$%OC4v%OQ|7D$(TeIMt2%)*M+b}wsX^}UErpm zjhnDl{Q**KA}9zgDx$Dey3-;FG^pGZUUEX2!x=xA1RViJfX^aQ2XJh5qU=e|Sl zY@}>}Rf1R@xl~#ZDdiX470BWvi*GDGMzJUs#iCepsq|%ayt}|s5UbN%DvcVKKZv3z ziVFd&+0D_czxQ;PS)9KgM7KOdj7P}vGhi)2Mb$W3Jd0upxsmA)tfx@ZbR01rE2NO4 z^y4r#T6;s#FRXA&Cr4S2Ge2`Z*L0*^9j}d0FM<{L4#94<<{qJ=IfLc^L+;1JLrUK5&lLNrf19F45V$OOhT5Q y47UNX$UTdkb5(_nNZwZ`?<;HFvSOA*wdMzi;nxhQCpW490000Y2Zbd@5)Vr> znNcx2xnK+j5;YOc5)(5oUX1Z*%%Ynf&}`TZ7ZXvJ8OPr-u`R{6ltJI4@4cTTSt2IJ z&qth$H1S^qAa%W|*;oB&++*Bdww-g9ZT|o$c9A2s_p+M;U3xqN8k~}v)?2+V;oVwT z1R+k#aCq9xX5ZSj?F)dSLMr|tgy{0<`k7$kUEOxEh<$q#w``*s299NE-e}|zJD>kj zXxbN!r#!me?QCwL2ZHQy%@Ug52TGyJWrWu&%C<9DESXQ< zHZ7#%y3v5&_*567-y4fkE);M|B|MQm>~Jg#-S20|RyxDdN{T<%a)g7`D;_D4`POF0gIec&ndk_%p@DWm=^q z91OC<%H>#0uW~(~<62`B|B+(^ni?p3brrq*y=Xi1;5-$w^!U-uqdgBZGcv}^^&2!q z!qnG5B;VXl15-i8+H_CIz{^3uhWyf~G-+Sl7- z%V0pZz4s;!&pg4>SKksj@f_|4XYl*0$mlxBcn9-UF%UX~bzRiC4z^PJWb*Qrx%J}4 zxtdULh>F_YPV57%SY?}ZIz=)$MQ8T}(aa^hW}Zak5OvkfeDe9b2qDlzkr>OjZcTP} zboBWQqmhb@l7-_czPWIo$;nBIg$FLdb8|MuM`zD+WqO*5qJP)Z{FQWj!CDQvtXn(|gNm^*Xsz2}_g`7ydCqeea-xwH3hI=o`-xrOy?9p*lT za_XJM>MexV7UL_E;tQppU=DuMa9ALdjeVFj_{k+rW|7ch_4P-@$%_QJfl%=WcjmC< z)l~gi`y+dt_oCi2%fO2oeQ#Eg*iI7Lj4SWq!Z&;XA5hHbjLttKq9WeYV?Y25bIcId zO4IPat<#?0pSw^(!RlA5y=z; z5HPnLkz;@`Tfe5sRWozd)OQfU&+A9j^&>K%sDda+Ji=T=2YtP%v77T-EV~*y?L>=j zpQ$Ft6_GXkgQj&XMy7>MPRJ+P7OM%L&Kux=SPZC7nC7wuE~`H$R9_Vl5Q)H3<`N?z zZ{eDK%rHh!he8UZ5IGM-{u0X$-SH3j`2)CGgPvPhav4ieLK{LGLUEfA&H~0CG|8wf z9>O>K_^Bk?1&U%9RbEl$cw9=40jG#OKsf*`1?oT-vr&*I7&k#);!}S60rwB<0AyX^ Q;Q#;t07*qoM6N<$f?1IiUjP6A literal 0 HcmV?d00001 diff --git a/emojis/1f365.png b/emojis/1f365.png new file mode 100644 index 0000000000000000000000000000000000000000..fcb93b18c6932686a2ddc9dfc2bfc91b4a4ca7c5 GIT binary patch literal 642 zcmV-|0)737P)?+m(p7@HpB?cFp=v z4R7FeoKMmU$~+-RIDsjZ^4h@Ym+PWmNP8OcTW6(KZmfxuAu^O%2*h5Liqhcxy5YAQ zvbm<((jKv0=$&1)^VJm-23S^YX-wo^Y}rP zd0fErIUYqvCCxPaExJSfPkuJ~y(cwlnkR48dh9mcH-At+wji5ps?6Y2hBGDw+aIo} z9iG#Af-v2;^Lobi&I9IyRwCr38%6Y=}YvCWeY8%OI`J29mDVc(0gxH zgs>`tMY2(W zj^oGNu62xzHSRko+c#zS-G*XqQ`Tvle)104;*_yEep1OvDnYDb2{o1c$ejGhoc}Sx z1(8aXJVmGkRwCJlhj0dU3{YSirSMD=XK|S*Rr2t!Qn-S*CCgYzDSH;Zi1OtW>FX5f cRfGwD0g*Y?fBYp$#sB~S07*qoM6N<$f?6a%EdT%j literal 0 HcmV?d00001 diff --git a/emojis/1f366.png b/emojis/1f366.png new file mode 100644 index 0000000000000000000000000000000000000000..c30a07cc227e560b803735e3ebfcf4cd64c26666 GIT binary patch literal 563 zcmV-30?hr1P)h8X=?{ zGOmSB+msvNcOVqtT9BLv>44w8g&#ZwN)8C2;E-)TM_QNJ7fpamzzC>^d=1J!G0BA) zV1)xhG|mw_%RXrX3Vs*LUr=m<5lE&DHd;V+g#!W=hl=eFRD-){1tEh_fNetaEHozB zqiFdS0{;oWUsLlKb+`R)5Yw21=oCtYZv22^6DvJ$8`(Q*gtEsG%}~C(h%1`?L1 zu+qT9W9<2cae*33nnIdFnnIcdit;JzTbQ)KdW-cIlNPYPrBvl3Gz2t&2GD@e?Ql%x zKNCqHD=gmgPt<@;YZaqk2}+%iipE5bK!>al|U_qi4HAv!h^p!5Lb%Qgn-Vsksf-3pK z0-!{dekiA~Z4=b`p_T1)-j5md?&_L8Vl0TK9f4QyTyY0MXW zB|82wpBiUGty_sT2k5nN7>0+S)rN8k;`oWR>SUdSIIbHg8NL%o5J&uuO2_zYb*VqG z?5<_}5qq5Bw+t}vEf1P8_ZroP++Qx|ER)}wPon_|3@4tU#8a0*YLu=_4GnLY%^j~Z z$5h)zluD&F_)H-`6A-+V#Ke6;At;6F_>c*Gb7pZBG$T_d7fSWIP>@#U8;dl6!;>?drzrSebiU0U!_C(YJ+s88qQT}^@Hu!Qj%vayf4t;>9W=# zr38r+lC&JGxKY5)tOG$>nM6&qwZG?4g>@NK1R;x-(1D z*$xz|mM31Vp7I*pORCt89h>-zllo}bJOoyw%#)ZdHz6Hj%vSLjqJmAndi++H8n2m& zqJ3$C)j>K-C9y2i5{F!glP;7Zi){GOFz4xudwcqFk1qjjB8D}qTG_p8FF_`Qzs}(| zI4~ST*u^k$i#_A9*A+HxwRY`J#27#TrT;VVnFXpOaYT8hsI^Pm3p^Il zlPG_PFil0^r}kFVku6K`s@J^cQ0U`Gi(B`z)$Cei@B!8anV9q_Vgi#b`NnWzcq_;+ zKrb+6fVc`5ow2#8bSH>l{yBrWcZ#a<40izBgEf5rS8==x;tH?&DLw}9UQ7qOf6v~ zw~O}czcz(Kk>kGeDVJwav7ic~1WN^yZ*CEfDV-Tjm~@J%jca`tHYy8>1GL}xjjGP2 zdAe6@pvvX8p_`9^D$V_Wl5H%pcYB#wgb53JDc|J|=ery;CHVV_<((%ydwrj#bcQO^ ze+~jcs*>}SZ9n=%!=S2{EpQ1q3+#wSVCR-H_n#T2XQoJ}{-tMy;uO4skMBcAn3mKCy<$)*tk_xRD9{J=0RmDB#Q16kaUTISmhXH4BzOL3#EKPv00000NkvXXu0mjf DP)be+ literal 0 HcmV?d00001 diff --git a/emojis/1f36a.png b/emojis/1f36a.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9650c42458d3b4513cdafbba41073fa31658a9 GIT binary patch literal 604 zcmV-i0;BzjP)qVg@+5y4&7sTzQ-DWYOn;RwC9T`1DZ(oWAADBnUk$^!G5S;`3fuRh0_w`Y?x%rK9`3H3e z{Qcxcvb69KZezfJguoOvsZG)fX>qgWy{m`04ys-weWbnGyy zN;>dq6FHEAF;Y2yaniHa(9T**F3h5;BuPSx3Q#aW1l+gQ&`MQFl7yy@>z{b^aDh0E zX}AYO4gr*#z!|`&VR>nVot^JYoIMQ!1498`heO0rQ$)B$jS&TbHDCrPQm3%BwM{zc z2jLfMEkP!YwWbKnpsb-_XRqWz0AXF>j=(U&!EA2WrURcA72qzyHH@qx0wOq3p-JEa q!c|objgdSM@>_&bK!{L4m8PE{MYAKa2>NFL0000WC3RY literal 0 HcmV?d00001 diff --git a/emojis/1f36b.png b/emojis/1f36b.png new file mode 100644 index 0000000000000000000000000000000000000000..6981c4424a818b54d180b7a8537cbc75e4e41d0f GIT binary patch literal 710 zcmV;%0y+JOP)ZrC>fWerXmXhL;6Lq2tu&25N)ic!{Y3uv+JC5-Y1K-CeiwQ4p-s6%-nuN&6Wx zvl@-WH?a0Iw{QPZiQ?11CU7yXz^--5z_!QyPf}7vX0X9 znyV_Dg(`(A zg(~L!*O%hO&hx+(UBAxo?5B)XE8L4hr+~xu$j&Jc0TB?v{rJ;0bM@NCn&)4J3*YVC zk=76W&qJ7)Z zOa@I%Rt1AY5rqfjcn2%%(!gWjb~F_FU}k5xxp;zbYcuKBZwak$AbH~+iBp#d28Tdo z32+g}kY$BARF@&bOxHtFeJ=?$))TxNB;49ebjKF_o~I%SMvi$BxxTT4_ zQRlwU{UW=-ts;KJJ?AKB2cRg(MAN68u7ZKgHmGqnU z1pNc}Po6RQd8E7`&mPFLcE7@i*S=seMg${*5ka6&lhYuwCbX&1N;pL7Q7`FlV~me} z$9f*INLYY~h^&yI6;1p_HLwXNQq|${#MG5=eqLED5+)~(>UE1Me=!VPB}-8%i;LP3 zSx1(0uEVLG1(L?8;#6^}I8~e~P8Fw$Q^l!*g2D@OMC86_Owuz3Ydph$QI0D*Ap!#Z awYu{eLM_WI0ywT1M@qSU)kY@}CC-Oze?l9()iv* zJ&tnDR`;H^Dj}8z~ul>wel_#6*p2L=z9=Ce3ob6Al13xx=6= zCWp64*Y+{?>?p%)H!+FBl*_nAmw38~8|yLL3b-k866u0CMVul|F+eq*>JawEkQk)m z3H?6#c7~KI*qY%sn}BAZLmAOb&`i)wFu;aHfsk4x5{lna>^*hdfhuUsaBCMxa8s7- zMnGcSFlEJ*6;oCs(AA<_T7o|LP6Bp<^wJef(jZ$O5I6sz^w2z=FFm2pR#5qle=tOP zCjEJ0Et$W?ucwEU9&8{Zhw&YY+doS3*rQ}OV%q0DHVGfNS{S-oz|{h-7O}ZXmQ>A@A(D|xhbRlE^D?RE@4p!=mnXfNq)E6`C`!6-A9Q3~w z-Fwfu=B?SN-hH5dIhNi9L;6F&w{%M)eW&?CFPNAmL>36F0G_{yetLwv)T?B>*&)O~ z5e88$->qERf&nVHstWLZ1iH2<2~LMa#|db>KR;P3J()9Vwm@L~<5k z87rUR^*Q_A@o7{osuop?szueJYEiYQT2w8n7FFv*VLvxkA3<1Bu?M4&3I9{-Gk3yP ei;s&vyZt9OlSwPdowWl10000UT2kR5ks{YZqp6$Kw$j%<+xtFkw8O|lUHkp;|0C!8E|g=8 zAfH!fT^822%gUQkU>fFIr7%+A6wmMner2c?z#KKx z%i%!H16;m-6t8AB@MUEaMS*<|L{56(t}^zg4EH_i3`UhQFA|XFT*_RB5aQwHa!mU< zeGQcn1$UJ|d#4{eDI}j;CDv(dUhLo zgBJ>ZQ9}BCzC8!3tG&eOazPUUMOi8FBa=ZQ zkyLAI>z@qM9MUvxgi<0opkSJY)P&^*K!%gajbrPH0x$iEP)CBnTn1oM5y6FmLKj6+K?;IUkbqh*$)Y-GnoKh@nai0u=l?$EjEG~T_&oCJ z({ow4EYJ;tKh`p81~Tp;5B-zqFJEe&#H>E7D= z&PS*C$EO;?+OJo)Uydv88dLmyIpZ(pHh=EE@nd7=m1hpm6*<5~(Wz^{rQaW2>aX5^ zbpB018FSiC(0+pUMkhKgUSGf3D%|*^Zycb5K94Rpitr(Uhj6zKP;pbSo>zJh9uGTRl=hK^;Fy?R(CQ&5LPF5Bh{PfX2>mMjPYtZ~^ z3s<{`VttX{KluhTB|f}@M4U9W$kgx_GR6dvLxpO_eWx3Y_GjoeN~FJhN$*ON!a|iw z|1;=403u*k#!MLV8kGPEPKO&{#~3SAQ|6AOOl)5y+lE36$=7dVAq8YZqhespIUV72 zXcD%Am?4R#)R2rsn(i>JLcxenei_ofU9F z_r*F>y4q_$mEPET3)9nJ%S=cEk&9x5^WywIQ~m@#6(d17tawrY0000?>2K~#0Y%WGXl0KnnjoS8ZIoO|!Nk39NFP>5|QT`5`w6$J$YY9Y9BWx;vs&v&N(s(DT!Z=y2+4mq3uS>;3MqW#yg#dg_X~o3aSbYU zZgUojJ|Q3CoW{yFt};)Uf0|TFTp0-7FQ~Qkjlq!z7Ba0BA|Ft8dl=cqCkxO%ifA51 zCR1pwNM*zx=RL++*48%$s?%9MU$50(J9zK_qVYKLp(jaWO%z4k&4+-s7Go@1TibLx z%jf0d;&Yc*S67cu^87@jkqM;~rE@svaL!Sd4r@yaV<-y4&dv^3ep(5g&hls0manQb z&&P!D(zPoqFaCPOBQS;{sJ2d zE7oFRZ6m3LSV)RkxI`*Ms+y=<(J@+`qn&g4=Df~nTowq=BP-Vo^p;DNYh`5%AS5g> z?|`dNQ2soRt1DQ~wFsEq~GN+l{R(3dYVu)j^$fj+`u1@iPOC?L=q`#@B7 zNECA}t!f4vS)LT;c(h$G8HaK{hj+gN?drp=`m8=PNdLuMl=~_ab1o^vchil})K#fX zJ1p@GKbTq-$rm8!Qs{3mcl`z7)B-;^q!f0K8Zs94Jv0nWW=JWJtrhWZeWZT&F7fz1 zr1c(@pA3l+LiW6J**GjrEVOxn7gz>qlTJM1iWg77tfevAq-R+b5W+BGcH}mt3+LEyRs48)+q^4)SFw^u95u6~) z#Irne^UBzpHr{lelp!(xtaPzkFz-d+GZ$yNY@{6$Of&n}dBEr82zwsQ6^%5`&DF07^QH}M|H;!!n(Bo;g Q#sB~S07*qoM6N<$g3YcoeEzC}sYI4#L17X^NJIs7?GkkIQh!06 zqD$APQKH_cQw#e-*t#f8~<6;F6u8-c~$=RNGp ztZ}HLh!<@UmL(?CXd_s!T5NoO!>63jiC>HV*3oGa-LQ45o+4fVdde6+@oJ@t)z#OB?bsW!czoPw-K(Rh50Ly>KA!Ndd&%UDnCqID z>mm*w8Rj=Z6oq@W)+fO1Hjn~?l(Gn7(z4VOFsp3y6GTb%tLMpW>Hq)$07*qoM6N<$ Ef@F_FaR2}S literal 0 HcmV?d00001 diff --git a/emojis/1f373.png b/emojis/1f373.png new file mode 100644 index 0000000000000000000000000000000000000000..a02cd3b5ce09d4e20fdb7b214c22bf8d74516869 GIT binary patch literal 682 zcmV;b0#*HqP)Ld%di!V+;T3^COY7t{XZCB!Chy zBq%+LAOjHZeI7I}UIGmvPZE(DYoYPHpSclCh+yqA};`5fd2QM85P+Cx-pH5M(@ zs??RKbAX|lLY_*c!m^CNW~K^AssJO@Ig)OE%jdZJZ~$RcdM>lDb|#-@lo6v^C1o1r-%ipAJz7fef%z*LF;bI6KN)DMhVsw+d? zN{ow!odS!Q@tdTIU_jDy$Lt#alqDUvR9A*2qF`xI5-5R<06CCrW>0|q{4?gp;t7_h z0-u4mzyvVI9|DHW>;w?vkD|LKo_TNPa$RV(fWkS QhyVZp07*qoM6N<$f&tSxg8%>k literal 0 HcmV?d00001 diff --git a/emojis/1f374.png b/emojis/1f374.png new file mode 100644 index 0000000000000000000000000000000000000000..381eee18430512e285caf855d940799812ef190a GIT binary patch literal 412 zcmV;N0b~A&P)lG1oytTRM$b*2gebD&lA8ko=T5obNLeiJK0?RR=`0v zmp>GsYn7|(Xe{2nu)29XF_~GiwA#O`S6^^Qeuyv-1rY)wAbNm45D^@y%=D}g42}X} z!w3!HlC&Wji_8Axz!W|tZAc^s!axEal3zCdY$F)#1p@f!!ewKdKwvDD-o-JNO0NSE z8{6a`5?8%)T?U?kVZICjZ51yE8jG+wJ~pWD!_u5hyegg`}9s0lYLZ#tR9d zCk_%X9{mG6crhWwlZgkCV&$7=ogI~&}^Tg6KkV4|8^;sOLjDiq?m1iqBTs{g3k#v0f ze8a7u3t04}yB1w$+Mu{#n2E^)#bI#9(YLz(7fQJj7-d*qT|z!v1Xnrw3RVdjBTJU5 zPbWn=x}%sW>v%3*1ZNyOIOp(u4}JBG8ukvAu^VR`xpWbxVT~zgU!JT7QGng@0|lfE z6LB0vPwHse8+cw21vtBJa!Dztk3FuKr%`um5K^Fz5Q5?TuYgjD;R7RJlwpUE0(GZ` zgXSretz)z7!7uaAUOVwtTuN2wLhUwMy(%=WK~ptQ$^ZfkWCmcjHqi~cFlZj9OBbM{ z(3!gRy~Czw?th{u4LW+{Fy1!aM={U8!*3VqXee@rYs z`TZ)B0_SID=P+`p0?t(=)D-qxC-7e!*Tv5Zk04@sPHFos#dciW{B9aTO8lQNjPT9W zErel+w%?-EFw+x*g`uHFvx#QY#=gBTK~+_}$foVcudYv#zt^h}Lg4A*!b7U3%tg<2 z-ZQO?=4^SGf4nFicMCxnkRS}P<#||HUBmqc59RIYABgLE=(K%2c{K0Z&BjGCHvR^- zjrO|onl+F=Ggv4QGo69TITT9KC*l}U7-Gw{u~A!>n~mB%t}7n^@>eo)d<_3m0P;G3 zcL~TiWvoIe&0t#`$9CN7{Q+P`LVgX%IRFCN{sBXQGhZL&ll=ey002ovPDHLkV1g9E Bc_aV; literal 0 HcmV?d00001 diff --git a/emojis/1f376.png b/emojis/1f376.png new file mode 100644 index 0000000000000000000000000000000000000000..375a59752700146b416add8b01cb0d0d804a7ca4 GIT binary patch literal 620 zcmV-y0+aoTP)1T@-cr-_M1qYt5#Qu_cj zRK9@;g;G!$-@q6{VS)x@xW#}32zz07=FB;NmjE`(`h9BR8G>;r4&ItB4AJ(Nly{&yx_dxyx_dxyx_dxyx_c`6mRJW0zL>L9BK!V4|xFVy`wAd z-bGO~=P?gCmbIGG!L`@vuxXa@AKn2gKS!k*-7@0|^}?{Snn3#o{K{>%y3bEZYIhGIN_DO*oX$Ol~O^fXDi8>z7kh2k711FQ06?% zR-27HXDG1@Cx$OuDI%Om6kt~mtZ$`mEzS1N@ee!gm^jkJkw&BN2*>tC1g*Sdab3UX z6l+Zz*7h)g~df4q98$K$W0N7agi(NLA{OLFgt94uV^8 z7DYtd9Q*@{gOh`ktBazb4pBjuf>Mw+g=m}J9Zl{o?_&cAG_|_)^O1XxpU^SjS#Mu1 zSIOt|m1D; zC%AIHslLy4QROVj_~=WJw;+H3f>*hG6;MFgRCC$Ai*ae-~rbVEdzHE wc?u|7Sk%!^iohYD0px%L2!Rr+257UzA2#B|#zhycfB*mh07*qoM6N<$f)9xD(EtDd literal 0 HcmV?d00001 diff --git a/emojis/1f378.png b/emojis/1f378.png new file mode 100644 index 0000000000000000000000000000000000000000..c18dac4d75d35235f2af75063d2032adfd85fb2f GIT binary patch literal 645 zcmV;00($+4P)KzVsFYY*BURPaO6KvKBaR}*2XozJFZtBue^5y`p1ed&ZQUwAnK-|B$F4m} z$$Al4AtGtO2kiLpK)LVPkc zL!!uHonNZzMN9F?qz=_)TnMVjJTfJaG<0K*R#ir)OuEmC9!4@?~{0 zIrN^5D|WMW-7(&M`0}+-EFDIq9}y4%5j4*6hjY#XSF;n7Q^ivG=Guk^iIYp{?SKC{ z3ZpJylm&Dmp;;hyjyuJ2d8Y5v*nN;TK(DE^b;KWT{!i*ZV~qr9}lwgVe3 z1D#_{r%+44_@V- zN}TAK^^;8GVN}`NzV+JC15clj-1U7#5e>3<$MSfV#pTS@eYE5Dw;j zQe(`5Fl9tQ1VV`4{vk&;FC;IJN*xdc#aShn8P?qz-zTT>X7F|9I%KXx<~qokvuBv9 z_~nDvH{Ufef3d9n>7L%egdBW0000<7VZ*! z-zEsx0i`*hDrxGJ_b_&fkpf{`WR6C<9=VJJIpgxnD9$KIazcP@k$mw<{64v;yNeme zm~l+h-Q_TnBa$4E~zU>un=gn>b$n}aSUgv7zk z=wytGiIanqi;M9CR})SANL1pci#ia9poLaG+O*vD?(teef`sbtCs(J2ys)#shy5u? zaWwmFvdeD11B!@Dq52v4PQsqQ_42hUW3(Z{lYzNQQMx?$6F3FTsOp5U&8RZUKd3TR z_m92^JNkQp8C9JGRuoXc0x{swqJWTcEso>RB;Zw#U-yIB#hhDTeg>Qi!^ZP4isngJ zYodE5Sf4&vdQ3W)r<@%pK5~X#dVo804gM9cCjdl}kM1tp=NY*S?~!wzEr z0V809|B7Qn!h%LXL~oZvQ!YbGwMJX(l?!ZC4+C44AY5i`a~z?M9iBG=+@zf_9067l zu2_1zNxWe<$2o}+5I_v1J81FKv=s8!DC8fJuy`r8QTg~YwV%KZj600000NkvXXu0mjfFjW8B literal 0 HcmV?d00001 diff --git a/emojis/1f37c.png b/emojis/1f37c.png new file mode 100644 index 0000000000000000000000000000000000000000..99b01c4c90ea14dc5f6dc9621ceb8f8876be6f73 GIT binary patch literal 747 zcmV4~}cbiE-JscGFDK%)E~-bfE_o{QczHE06Mj zE!UjQXS&r7LARZ=PoChv+@;19{dj9nHu`Vy`L7**<|%%71y}; z9=hDIRlegTp5}X&^yUrp-ep6n45c!Z%1|mZtvy!X-S}XTn`&?W;1)+3UcqK(Lfx_4 zW`*~;Ml5HTniZT&e9Ey?UQs{WIWbV<_2MMObzF`$yn@ZngfI8%+|E~chff}{7|fnM z&7M6?R*vc~bWaV`c)d7DaUGX-&}5p;_-(w;k%m{W*_rT=YZq3{K&;@rygoyf`m?LE zfoE(lPEuUQr5!YxW;5a>B??;{Yj_23MRz{Cd9QSpzd0|S%<3ouMSF3Q;yNzvpvg3w z5hp3#utl}vGaUVaUv^n*tWb6I$EuTa!~h>D+WRF*aUGX-&}5p;h?A5kY*DND3`b)Y zdCtkzWl*-U@F3J&mio)=VnpY^o{(`-hZq;$g;)r!w>G-i<(L}7r4Y>TB2dYAhQ z%2n5O=Id(>ve}$CNr}Q1wTjPhG-i<(L}7pkJ7TpDOn87XQhWn?9+-;=8|{awR(yt| zF^jw)3Ijyg5o}+KorozAQy`{5Oo34ZL9c_p?tA5V#rODq|A0ka5QPCE>!6dDD=otd3E=Zw3un`}%7@%z;3^Oqli`@losL$fh;Wq!65 zL}9Q5v^lm5tmj%k&3gIfr|r*=vtE8f9JS~IO(3pBVY6C^mM81A+ff+sj}FlBU3X>w z;P6eF^=<-UblGs}6H(NvmF0o|xAeeSm(`?nY)fY+Wm|G*fdv@uv~ zNz#l$YaDTK#G%ldB+W3^vVVBQI2Z80eBHZOmhk=O0iD?vaTGGnaeM~4NlMns8ChJI zzaSI!+D2LOmxwUknBpXH6e3D7Qj6m|vUs&~v0kk(uyA>nC=57>Qi?bV8BvNQ@jSO3 zM1$H8agf32os&O*hUmQLix~z%E0D)|^Hgjpw-xDA*NXouNV-PGgM45n-S# zSrgB5p8%S^Fz`syjFTj3Mi}^v93{y!dHweN=I?H@MxP@>82BV-Ku1nwxV@g2LCyeQ)*$Y6^CnEU1hwpia z2tyiJ)mpz|$mQ5JaQ)rZ&fU37Gjpxxxs^)bF9B_i?E>q0p`RLSHVR`N0oQIq&`RP!JIYKmMWWy!wLc}e_HIp=rPDUZ+J^suM@IH33g!}gRc_hpy0nA3c@RV&uAq15_XQ93_O8JSI; zFGpv$KDd7Y=m1=P!%(RiD>KckIa5+oD4rK28VwA;igdirx01DwUp(I$`Sh_K=moC3 zB3D4d{6yEh;m$dQC52v3dRbz8BI!EpdpbCF>cH8?-MvFYUO<2xV2waS#uQ&X*JpK^ zo^)k;($Suey>Q=ujyOh&LDEUSQ_60iA1I63j((G00MpG>aH25)DTOLOnbAF5vfbqwy&9)is2|W90**qxqVq-PKTv>DdM8 zKpu)UfWxHPRhzqjJ|+eHel8zALQaNBimr2V_a4>;gAGclb9#1B8ZTdWzjs{sw(B}e z-o6Xh0eqLYpkE$>DDt-04cVw`q0d(*8GZ?Cybq?Yd~Um?XtD7XLz_ELW)(L2ilA b#&_QU33Lc*=nGgd00000NkvXXu0mjf$ckEg literal 0 HcmV?d00001 diff --git a/emojis/1f37f.png b/emojis/1f37f.png new file mode 100644 index 0000000000000000000000000000000000000000..1ffcd671f34429a3a68470028422fb0c5305f058 GIT binary patch literal 655 zcmV;A0&x9_P))wCc)(So+SJRKdEH~;s3^@a{!DnB1}?c5>$$7`tV9_Y=E zptucuV-tJj^f5LwrqZH~O93AddQkjCxPeu6v9RcYQ39O)?wj8Bg;P^ zKM09B)YsyW$?YqHoZvSNj=(ghL@|g9;QeD*FG1vB_AQ{Gr3c=P!{Q9I??og`Z`iif zhHb-6d*?G&R$lBVJ;>pIgRWt!%JblLL-TGxAW%@>4y8p9b#OjE^v0>wfJLNJY-4UM ze+KgWUF!&&$;xVuitDgcHj1Gn&c2&0UJmQ)@+1=Q{U<7)L;NMER8ZMgWcmwi_aKqL zEG|vgq?^WYmDlFv&OTY0di#{e6GJ4ET|^<_oqOm5`-#S%5WSc}@9V?ex{GRPfG8xo z|8PQ+FZ pP=MakgKkcTrhE4zMo$&^;}`NA?UdgaVjKVf002ovPDHLkV1j80HF5v| literal 0 HcmV?d00001 diff --git a/emojis/1f380.png b/emojis/1f380.png new file mode 100644 index 0000000000000000000000000000000000000000..152348a0b75aeb7d137b136030826684b7930178 GIT binary patch literal 618 zcmV-w0+s!VP)R|ILTQJJ8olk9QrC?{wurbL(C+ zKGwqU4NznwQrr_~B=t3U`UO1jk8eqBL)-&AR(Lt!z6)9&`teu~P+TmQMrxHxzeGRK z$*LOg(nolJ$GVi9yA||ozwROt4=}K7IA7_Ykq3B=4Y=lJTqNSLN`5@v!6qCV5sf4^ zpOO zo8J?Y-?D|$&RnS+E6r6%w{5{M&sD|~LG)rGh=z$Es3a4y0XER&d+h7(%6GT5o}8Jl zo&q8f-yidLY)#dGrz{gM0I_ZsXkm?6Un~gr$D+Y={&NNxU~mvPOFiQWFvB`Y+>}g` zAsJ2>!Vug5eCinX3S*E)r$NU+fN)|(AL1O1N-{nG?`Y%@w~;wyxDa_rcYqKW0Ona{ z_TI39S@;^Lv1$ z{psE+=q->10r~?RHM48LB1_E3OG+5J3#tL1K|@IV1CJ8TI7{?P8UO$Q07*qoM6N<$ Ef^j|*uK)l5 literal 0 HcmV?d00001 diff --git a/emojis/1f381.png b/emojis/1f381.png new file mode 100644 index 0000000000000000000000000000000000000000..40ac1e50d2de2aabaa27b5f2cbb140ede45fbd39 GIT binary patch literal 513 zcmV+c0{;DpP)4Ox7w4mPukT>R^8;>R5+n-hyQwI~NFE z29e>Rla~TVo;wJgf}{>w(4l6AMLUF0g7n9|_MW_++urNV_GBG%pN~RAR8i&Ap3`F| zJ9fwC?H?ap-=kSn(Zv0O{X@69QiC(4m3i0qd;%&B_mamhC3GW~&<%Qb3|xNp>)WGV zBQi|jqhsYS?%a1hp&Qo-j3@iv-CQm_As`4Obb}YEGcS>1fRMlk1b_MX2tuC!>U?qT z)XIi~$lo2xWHaeIHLG&SuX+Xzs}t{WKU>tbbw`Nb?js~r=_nCxd3xr}n3~O`9|E09 zM5CEdBq53uBw$)jf&XNdodN+tAQm;W{P@+8 zSj0%t@O`RCio5zv&c!$BC00000NkvXXu0mjf D+wb$E literal 0 HcmV?d00001 diff --git a/emojis/1f382.png b/emojis/1f382.png new file mode 100644 index 0000000000000000000000000000000000000000..8b4dacd948a062ea4f08127404756906671d637a GIT binary patch literal 790 zcmV+x1L^#UP)oAk#bX zW_6v zH+?HRkes!2XvUPX*)=g~g#RbN*wmC!%0`D~%vxPpZKP9iipO4+`yW0?wm*f4@NXhQ zwm(JjzyXR!Uy*bw&g#n5hWcS);XT)NkKQpkN&1ab6fT{|`|$$R}y~UbT|`aM_$Yf58s!|`DQy=yp`B70c80{C4KGcm7&(!`M6)b1{k*e4L#E= U+$jvOuK)l507*qoM6N<$f<>@?SO5S3 literal 0 HcmV?d00001 diff --git a/emojis/1f383.png b/emojis/1f383.png new file mode 100644 index 0000000000000000000000000000000000000000..31da8e629159321c124816b4ebc32671b57ab6d7 GIT binary patch literal 675 zcmV;U0$lxxP)hbvkVLn^EMy(BY(F`IlDOT5Q!+`}*gLF>;NJF+#rRPQ^*QHIDsTGS1+c zwKs@2?3rUumaNoX#Z>M~QF7LUdS-c{(kP}o6PI2m<8D_&+EQbWrE0GLIWn~z4AB7P zPgMdPkN^SHcyV}fn^HAbeT&@qlZeFgm&C*PlL+5JK+Y=cRs|!9fLsECiDwaaA2ykI z9`UD%=Mi@wHko)9kr9xKA{e8v0@xhJ%IH)`+t_4CGg4+XBV}wdq-}I6B#f2J+EiKP z5C#DoCrY_sKvPOZL!2mGfzTEwN~vgolybq4cqN|`Bf>_9GJrs(+i?1D8I&1czNcKc z{*_h=L;JcpbEwP=0ii=#?hx{H2pM6<+>&9ze8abfvZ&W0!rz202mB!O=6#EIpIfY{ z1>|#r2<+cdq!}rJ6WUZ^@?}hak7a4qlKJ6K>IjsI!tii|I}d~w-imX`Xxc4~Z!PAJ}y{IR=|D3X8Q-Qfr2-(xwjC16pXrDFu8?gUiPA&?rdn#|G#mZQ76 z`HvT%Ln5d>x4nnVH{b^F0VEIPfdH`l5(6KBDN(&Fa6;e{nV&Oy=vm*CqL}~y002ov JPDHLkV1n$^I+6eY literal 0 HcmV?d00001 diff --git a/emojis/1f384.png b/emojis/1f384.png new file mode 100644 index 0000000000000000000000000000000000000000..c758f4ff9c1ba5a94458f51c727c5377dfa4b670 GIT binary patch literal 684 zcmV;d0#p5oP)2t4B>@s923AaTGSO(_ zWMXt7)pIVANl3$S;`a! zt(u!V{C0Z!!86YHMg&Uu_IRB#ZzSy9m2wT(y*HyH@B=0M#h#~(^pFqKeD2T-t1ev` z7-jsuf$={==A6HJe!18+7#5_d|0a^rVhG_fJNQ9=z)tEkFM7TGGmV7%csiYq7tw0YkDyoXA;=8f2og&&>-)R4~ zGUShkDK#R#xRM}{oPGa!>sb=m&c7)MuhY-#``$WU&&F7Ku*i#UpC?&BRee3F{+KhG z2S&W&rPF7-UKn*|_s=mi^$xceZZfjKxg(2s@6mPlJPY2~#vM7?#tArqpfW94^3&7J zC(Vt`bx=r>gsh%Xt<^YuXnxW(JdHiSr`3qG8ln9>rJtwt^OQ=Iem1w3Oc9KKmLKtW zb&U@vJg4>~jOAm@OwUTzXnxhLxO%tZ=vEwlI2iIDGmich4d1&F@$LL7f492CQN)4W zb^cuWm)i@AEZtwC7!~WyMiUWXi#u>?0zpuxA3tt{3oEsu-kmJS8aa(-gJ0JM+}JEo z=fEJ2qKRs?depF=MP%eFl?q!#WZH7Me(R8JL`ChPf7HvOJDZ;n3}5vN@xI!n!DKe& zoEtZ@!kKFU%kt@oamx6O;YZpJ7ulk6-IQaL@Rj90r2^MX?2@Rqtq9*?lzIu{C)`o= S(wuSt0000N1! z%D^1PT(Oc4mYVs)TGx4c^l5DpuBPWPjssQxUoE!dzVKV|W>_vZoQ#bP;oMQY3SPl0 zcm=QE6}*C1@Csf*gr252dDhiEe(Sp@Ka-TI+@j9>SFAqw5*B&P+TjH+BHK{qR_Vwv zeKUv~^UL!Kr;6spk!JoOC28?rZlozLhX?WRoJK_G@mQMhwPNA>cGsx5ufYP}oL%D1 zdq>!G=|Y>qp%S&BC9FHgfL>&sztr65j)kMMGMw)`SINEc)7tH z<<}WM7|5qH`mTFOJLppto;-FJBxBP9`=_baGyY^C;7672r4SJoU0mgKa8o4N!cE&} z2T287`AJy21|t&#RO=ar($QIZmOAIVtC+Pgmi_heGmnSr$jKDDhZ-Aik*A+oOEWCC zricUAs0@CGp{$f1rK`Iym$F~(ue}^Ua4ODkxcEYc&Z_qan z9B?8>Tnf`B{vog*uy8g>ex~sLOxF+76DZ;<6p@?$0CcJZ5SvX9;s5{u07*qoM6N<$ Ef&uAOumAu6 literal 0 HcmV?d00001 diff --git a/emojis/1f386.png b/emojis/1f386.png new file mode 100644 index 0000000000000000000000000000000000000000..43e7bda670d4664d3bfe7a4a0b49fc853e89dc68 GIT binary patch literal 788 zcmV+v1MB>WP)uB$=i6OJ5)F{oKQnEc<*! z-v<-tlu+YZlaicbSdsByqxhfj_#@>kj9Pwx$UugV!x z&u{Yi^_SVfKrk)=L-CBjjK=u6GR*m*0;dK|P7RuzA1W|i8ODsp0D({Olo4Rt$LS?} z7jGx&KYE;K+ZI>qK}Nf7;=58gLr;H-fF0u2)jS^_T|xn0+~`L$)1zYxW z#3}<^cxi@1Mva3V>%7qRh66a^&$P4huoSPO|U02Lub>@;}9zogm39HP_~bNMNDklWgk?Z}Huk z>%3?@VxsaMLMVPLy++;Bse3x#7l%N=*BkFsw-uM(zQ#L;R}lgNY&#a+ylYm8w6pE4FB2$?-zD!voQ`YcJ zW#WwV7Lh`+gQZ1|y;Vi8!A&3ut zpD1hGzfG^WS_CKvfu?EvPh;U{Ysd+Ab^wC+s2Y4H>lIgvQLj^4x39!*F|zr{72=aq zd;~>6iv%ccn}yI^4}oGk^Na0#h!EiS*bqXHN0G=H8CPjK+0DJ*E>Ldh;X|rQ?Q}G) zr`qQxpUhhwcmAR)oZ`&7C_ST22A?bBYxH;1)}CZwI88pO#96?Oh7fw4#N>>g=I&|^ z)P*tWGQ1P=yrjZ4!QrkM(wPkTB%iyGFKd0AT6donzGvKd>ZB*;V)v(mvQ0@CD~UOre?_| zW|h^j;iq4a$r8ZE%Ewf={-L;F8n5*gl63(NtA!k+QpO5jgmXisT#I_?d@)R=-#}z+ z0+}ogh))@bB|MBJ&CGMC>^3~WVQmKluO|mcrYw9_6(#()o%2KRbH@ZZGH+dtdXWTt zy)eR>K#W7Z0XC?YahYCow6BsKp+EV)Gl*GEQ|?mfdg4I?B(j76#gOLE@_Pi`6KuR# z%Y3KGrAP^P$DB<6t7F%%A%0xekH=ZWV5%M=336mf2o7)koJA!w9BUt;_5N%!nm_|Tb#c=gd~JeOB_}bcscfafQ%-{IoMmy__UE& zx`Kwa%{Ubk!;@y>3H~!RlOjtMbGNi^vl#U)l0ZqkO7T8fCsFNl)A#5Zng&kAL{XuI eq0tvA@a-EYPW;y@FlO9lev(8sI^uKfBQ|UR=_fh|uY(_RCn~}|!Z7$-_4r$(Tl$ULW&9E7h zR8mPLb>C}FHi=g=m8ncE;$d5lQd`H2qA2QLU!!(ABHt1OF&Y{g8dl%o8@tq(_{A}k zsZ3=mQyFXYZT#**KSw`|ii(PwmX?;5mez0DH)e7B)al5cALymVUkwcn4a@m=51iok zjH}DR+&sG1EA$ULEI-}2>m=QJ(Hc!(z%4s0&tKYilJdzj7an`_-rxPcYwfZ;_xip^ zxRc3^gVVj%t@p&A9x@p+WXO;qLxzm|`i11jEV-3E*D@wUh73~_MNt$*QMPTbS6^Yy xHa=Lx8rCodgTY`h7z_r3xKr!p$YBr!{{X`smf~a8jLQH3002ovPDHLkV1n&t&;9@a literal 0 HcmV?d00001 diff --git a/emojis/1f389.png b/emojis/1f389.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e0234bfbd80577b087110a0aeaca03ce0b5a4d GIT binary patch literal 965 zcmV;$13LVPP)6B{1QBHJVLl9f z7`m+v1Sg0JZXgI#*_bGOu!tQ96`5sTMr)zlaE?{%+_c>?ZL_s$b8C_&IXNfiod4fe z`Y`-_=)Kp5u;?EjDBDxpiP0$lMQn0Z8t9ptcRmLo<&Y@6WQK04R$6Rn%ez9`^1Q+DD~$px`=gBbG3mv zO&HBt^b?2=f;e1RCN!!|F1NaC7{o_8x89XxLRJl4P2^g>nk~rDGRJ?!p?y#3y|QZ( zKsdoGU9B;5BJldmWoi7ceS%_}r%)se0mU@tqES8C`&-ieVW+d?eX-@%&pT=|UrQN^ zVnYg!Hj~M*&T)Nj+NNwPRQVv?yAwQ@GR5L*s#NuB`^|<+gMOQEc7SSPKR zgsdr0&Z4gHRa_E8u`3wqK>m+EdF8lytfyG1oNH|kJ-)nf-)J&aa|eXo9OjDH zs*HTU813)0E!G}<=;D=QPJexyGPcqrb>PcMPgwKkV*9#?(J zw7VeQ6!#zPLrWW(hUvRI-|Wxa*JbiSU`Cx4yI}NzZ$n|-fg#iW;n#*w1@V9xHqoKRZ{b;;@Vnv z>?gYfeK7?yzlOVTE(n)Zy>gNfeai*XlR>d=DIgpp;IzP{EmF_#rM+_PmVmjo20fX= zrV0~;F^jPi%(8y@ryaG^-PUn%enhvMX;GIC!sd9=l=Uy9un~OA;u^H2IM!uVhyBat zriM=$VKivY(MAP#xM@yK3By>Nl00000NkvXXu0mjf&V$fQ literal 0 HcmV?d00001 diff --git a/emojis/1f38a.png b/emojis/1f38a.png new file mode 100644 index 0000000000000000000000000000000000000000..4d52260ad827972d490cb7a8fefc9563dfdb3cde GIT binary patch literal 857 zcmV-f1E&0mP)K)<`{^+v zhP2mB-lo_vs*#^NO zqP5Hzwya2zJ;_)`zWP7{hNgP*sn-5nx^-uv3i;t_to`;Pzh^t@MG)MssP_Eb-I#uC zbEC3x4Js{L{7}2Dz3F(ElMnWlZwncG3P2ZpsW7l7!`QQ)(&jqhkWOS>;(GuJ$72Ws z=nm;>b10x5bv+uCA%our&;{S(1>oWl1re06itgjxPn$0(OLfeBVm|^f%uXQx1fe5G z03k(!-x2`sgKyzHaPF{z>j(@SOdyz+jlxl$_gHQb{+Fd(LOm_%1?QD?(ZEaeQYGn zti7f6@&|h77=ST=M^csiHe)e-hv#_jR`c5qx{>fkQ!Q;N^@?x)D$rH=d2Mi0+pHvm z)0v&Cu2c-A>kx@@K?!;Yz(~WK{a$%$R10W(wP+uW-O%CDQQz8`2g!5E&~kC52OijTCL?r+NFG?tNZksXb?mxzi zyBhlBuKI?_Y#|qWmI)o1(&g`x^~8>n_WNfu(TP_`(LTiR1^y*x%yHacbfm_FV@|DZ zub*0Se({uS*T8)IYU1n5i_tSDn^rB`Xca(;u$)ZwCUL{H-Y<{Bw+KKgq!dvMKp8&E jEV3{$(-rG{0XO*@V7pTPn6khq00000NkvXXu0mjfqi&xW literal 0 HcmV?d00001 diff --git a/emojis/1f38b.png b/emojis/1f38b.png new file mode 100644 index 0000000000000000000000000000000000000000..fe353582c04da38e881bdfe3919a73bb9aeba0f1 GIT binary patch literal 909 zcmV;819JR{P)BxhKSCwZq_R4SJt#;ZQ8W6Ij1K*AMf8v zD-`s3SmPaW>}Ax6hFCg`ZDsrq?#Xx{SOCDnHucy`UHBJCsW3%3=Xu_nL^OhJj4|$S zdHIl`D~z)M7a^0wpD z&MQKkYN&6>YPxaOzg@ktwO*Z3=jPUACfD4#U^#C!<(lM?d+sMqXwS?q6btL?^TVYZ zmE71@Hy>9c?BZ2gq@mC+&mZc&^K2@Y=#6?7Q^&8Bkm>6!M$PE6X2j&W5OZ7h#w&jo z3ts?Ox;eJ;uEx>-#?cgOy{n1-(qi8LSOqWwm{8wtwsGb6iBBhl%yWiUFHIM&6lSM} zllApob-I>+=S1V9T^f5ayv$y%UbUZ&nlAQIM?Yig=tJYll{W2H*L6SiyZ~DdnyTxqIdAvTAIv$HhH>y?Z-Y;+2 zv*x$TgUMR-G&2BVI7X5N01$TZgC(ty&1EMO$;3b=ld*I?bc!T>5;pYNu%TnIQ=DVi z!3g&SI&TSdjzH%KbPm3jW)UGob0iY^o^jR#pwsvLLC^Eyc|NZ9$e#dAVu#9odXB(A zU?4E?)hJ~En49)y*>RkcQp%D9U1tghQ#h=I;uqW5``D!fctNYlHmxS1)g(BXN(KNK zN;q3tt(;z5Sd7}1t=pCj+p=L>HpW_=kBFg!9WgKr5m6rzg_Z2X@uybEKC1cnI-XAU zYoX8w(O7iYFbo)m0mCrhQsPJu1eZwCcb?~t6X8Ex4qSW$ j?{zn_%X&>&#;(5sP6l~?7qzVY00000NkvXXu0mjf_S>!9 literal 0 HcmV?d00001 diff --git a/emojis/1f38c.png b/emojis/1f38c.png new file mode 100644 index 0000000000000000000000000000000000000000..498868538d2045da273b9768a4ed468cdf6bdcdd GIT binary patch literal 658 zcmV;D0&V??P)-tCO+PEs6(4L9iZlAR;>` z*rVdngLe@+;v!~}G=onv$#g^<)zjnVu-|7eIQ{F;f_(Y8G|Z}H44rnS|tENa#3TH7`C%M1E?OG*d!Pu$Vn{m`L1 z4{9tf+1>n8+G(m^x@yl%hH1Q7e6*^5d4Ztx$SD!wNO`b#b8D-&kk88>AJhNhvv$`v z^gQ*LJ=2-wYhgRr-Mw$%|_s!118*7bMnl~Q*dUZUX`SrYbSD-B;K55<*RTlcR5>rN69 zy99_uk|;j1#*}|!gObbiyZB4 z3rWW@cj8;FaD gWBeb+RAyiN4T!nkiQ64A#sB~S07*qoM6N<$f@erNP5=M^ literal 0 HcmV?d00001 diff --git a/emojis/1f38e.png b/emojis/1f38e.png new file mode 100644 index 0000000000000000000000000000000000000000..978ca84397371c1d44811828f0af8f06b003bc69 GIT binary patch literal 844 zcmV-S1GD^zP)C2O9KiAK?|J@xS-WLjYw6f4PDgCVHVGO#q9wj$>zHV~koa~W z@n%9uyeL<>Xfz>u&?t$C9`Im-A{X6Bhz^D6WROj8W4M)d-A1>kUH9~5&)*g?9z;JM z>Dn2i#?em1=kxyv@;M@}^KStW4r$Fc!;sTj>oKZSTd13wRCXqzp%e7;+HsBo4tMOn zFA)<%PF$M(VZhN98hw%1x+DEZ(0phfd-bIG>)g4co8^tS01wb8A_olQf+3PNL`XjT z^1Jcq@W{@#2T`V*gNeiD13MlX?r!h@$XqO3KfIbtzYTc!$99Bg>%{Y!66LoY`yH3^ z)PFbmC07@I#?cO&rGk9$^&9gN?cXy8baEG3>myW&$Z_uOh5|bH4kve_(SV`D5W zrkR?aq9z_6pfM1jueXnu))vm4J&RH<#>dAoEX%U%{l3M)*m-fDJYWSOP53H3dVOK{h_TmzJa#DJJ zy7ZFr3os1CY=%|a?>zjuObf28obUG(i} zr^z%94QbE&TkblUzjxr3TXQA8|7r%iP@*f^MssVZ2d(!i->rp5&0rIeLV=Q9r0dB9 zPG*_%&2%&bp_UA{QMij`+|-6Ezn0m~|Cu&G*KwTsqT-g9;GI*y~6`el~;W1Up3 zsrfz69dEyIs$e^ftwyLsO+Fl~7=Hh#Hp~^O>Q?5T$*Is&^$mVSmCNMxu6%3~>H-yp#E_VvqAo6(Mt4wW(2EB> zso5^e4%=Y|ciD`G9d`1z>;q%sj2ev_a&gWqOI*;9SS%vqYSk7-DQ(}r?=vJdX$Z-F zKQVf=XX~bSlNX(Q=uTm}Z!cg|k(Y0XX-~Y#zygqC6}qm!X(z>GP}OF3TJPKl0%f`+QBCmL)U?mAwEF{9~>IJf^5!xalVzJmwBXu%caJl=e zOxcCTT1l`*u#%Ekv5>rKc}=^n^9qz;*$2^uqehkB0W~TK>qP5nzOhdHzq7{{U4*1^`fNla&Af002ovPDHLkV1fYIcD?`r literal 0 HcmV?d00001 diff --git a/emojis/1f390.png b/emojis/1f390.png new file mode 100644 index 0000000000000000000000000000000000000000..912955f1ae1fe004d04b1586eb438ed6ab163ba7 GIT binary patch literal 521 zcmV+k0`~ohP){ha^INSd5!MB4NQDda-RHWnp81raW!7o?zV%f3U) zwypFlw2TNuh%jr>z97hglEBIg!(Qfio~M)uIWt|CMz0RiO-h-1Ta8;i{fS0T{Vou6 zkuKgiM^#WB0iRi0{d$5wnyvhjsNDo!QDIJjQ{WUh1+HQb_#80NY~{6PE3W|)K{4kP zxl`a2I0a6Di9iG*5P>45fqis3AmW+`L?8kYBoGyc_%9u#!sxUJIGr4LN=3@(WhcS? zz%D>Jxv{Z+>c`J-nAu{+t_NWARHVkrC{=xp*89GmfvMN4Px|Y?;la~`KuN?r6=`oi zOoyNe>_30(3JBgVujIgR7#$Kp7a9m)Y-ETnZrP3Q&+u zPG1K>z-Pn@!PmuY<(^7r%jl7EPOs< zc>06aw9qqvMTiCj4--O=G!2@q4u0ppi{?$Gg`NQ{9@wkyb9&+iQ`tJ_|HyK^n&wU| zMLH4V?U#;H%BQJ&E#Ccl(faXbWkv!P4@6|Z`zIEe9$&?}aE%~TwGJEB5wp#{WdD|i^orn^TDkT5OXRE}bJ|{HRyV^_V^jF!a?BiE2$~O&z_1pdAvsL>0YM4>QNH&SuBPkVZgy4U& zR!@>Jw+OVP-BA>a%X~XKMfqxxjY@`C)Mxs{VMg<5x=uY)VtlBN9kSg~WcupV>b;B= zS6Exm(Qp%Vt^75>UFR`IvPr_G4rGu*&?UE926oB;0d}gv(w~Eby)ZeFnw3?dTY@KZaXa5Djl>l-ScNeDs0000JP)KiK&I$A9w+$fPP&ylU^>&f6kvlFs#$&h@jA2ps6{xZ`>i zU)jo{t1WxKGutvxgW$MjoRUl5$Pj%aLpUWD$1MXwU0X|PsjEGEwUtunVLexL!mkBv|K%d6}X$goA5G}EVZludX z=|T|Nl6K*v`)*unH!fTX5qyAXq)=&HRZ$cLK``2qI^)gUd(XM&(}4)XFuxzI+wckc zA)$g(%^ z-a{J$W`*~NXo88ph{4}rqs=4{jiJk$WrAN13bbMnF_;;>h-l1MH>p+(esl+r|CrV1 z0Q9C+5hwRnIRBT%tGou6Bw%LrD1GIRmu2yr8XOrF0q#KJ&D~?P@B7_VSjdoNErith5+yu%6e6KcflzZ66tS0}q2u{arSn$*Dd4%{t_taqm~JDv$G@hQOiUjsF9#Xf*J|_ z7Xkr03xE)XKp|J{vhQt7gj5Ov-`kjwt9BWMiDFA`vh;3x=ESMfW=DSEj8Sw9wuO6> z!TXlx2T#W?-}2U$0u%;SG{!9EZ}dND@#P5HijmZ_p2x38WXVM*sA6=Wp{ujcxnO1M zu(EZuAGgns4(#fr3KPwheyi#ESjSshPaa@@4N&*nCk~^M9fcXs(~# zbCqP~Ah8tx#8QyVwBEefJcLG|Nkq*wkvJ71aS~B8jYgnxz49W`p@MX9z49U&fo6Pi zc?!qQv2H^cKp22ygJb8$Cs(G>m}q{uzqURUUd-ytuh;X=d4um+ z;8^fLYb9UpbU!v{UH)$k;}e-yWFP|>q~;v=WwoUjfQOpx?%ucl7NoT1D zy(`79Bq0e&ILyEd%)pF(@AlPDmfun-2K}c(2(M9*^piroq9_!FqEHl0F`yVw3@8R> zM~7uG9K7}Sc(=D(440WZOq29YpJh{@W%w+^XBj@rNVgt+jFZNr;?&*Uq6IiAom1;a zt#)TK#_%I2xV)K@H*@l4PTtH3p?qX=u>UF0pt4k7p0qpNJV}!4nfFiDyr}>ya8Tduw7BT+dV#LLWi;>iv@>eu`v3p{07*qoM6N<$f_B$UkpKVy literal 0 HcmV?d00001 diff --git a/emojis/1f399.png b/emojis/1f399.png new file mode 100644 index 0000000000000000000000000000000000000000..a9cf3323cebe99d6957b4f96accb1b174942b5e7 GIT binary patch literal 733 zcmV<30wVp1P)Zs|18 z=aCarr`Rk>lF^Ngjp^;>!58UhH0pCZhezKbNfy||+401aY%*f4{r=*GZ%aW?2NG8P zS)SNAH1fQvz5pzeVyv}TYq8d1twlASKL5q%rQPGtaO>uE@}7_9`OIIwR5Hd)8)GoW zV2r^SgTsRyBc@t;!t(GVv4ytEJ~YhQ$_jTpz3+f5 z&R=~k(quGAl9P1U-TMy`h9MnOf8MxOaNOM9zH&uctroqdZKx)=xjb$z&)VuLOTR7D zN__+4BJ!z-V7PC2c+c3!*4o=Vgthke$k@J5fMvQ&q2N&{co-vdaXXrD-RxN&!t=bd zQ5e2#jG6PiJf4@w1ob9Cy-5`53?h?ZxN**P-B~ut<#V&`sC_P0os8pnrqx=f)mq2# ze2=bLtnnM|usxG#`*^XZ@X`AEe^ok)#o~8ciaqi5-~X7&xS3dHk+Gl2Ekj6p!OaeZZ`LBv3JWEG13$f(&X65 zDN=T+>W9EVzy*Z65+DSA1YQT0=rXE`s-mi>>QSHyWC7tm0kS|9I7-U@UsUz*d7*X` P00000NkvXXu0mjfr>Atm literal 0 HcmV?d00001 diff --git a/emojis/1f39a.png b/emojis/1f39a.png new file mode 100644 index 0000000000000000000000000000000000000000..ae9583704cc70ba036016eb8c735dbdae42f561c GIT binary patch literal 494 zcmV4c10KoD8y?d18wU_3Sh(x0iO%~}Oh|oc)n~Q;JWd^KaUZ zA3nIf)LQ%`NZh>Dya&{AL{UT(MT}8z%s20nko+;lq0ejIh_xon1$_MQj?|?qv-EZc zNZ+Sct?-*iKtkd;ce;!=1|bC67*d7&H2GYBF9a@$Bern=#e25*_OUiY>iL&96s9sf zyEBXAIDun$5VP4IqK(B^Fc!42Z1#r?4`N&rM=m=-<}z~%8@B#u&;#}!N}f=R_V0*5w+mDP1N zesmex*y^&fx{fvmm&D-h($ literal 0 HcmV?d00001 diff --git a/emojis/1f39b.png b/emojis/1f39b.png new file mode 100644 index 0000000000000000000000000000000000000000..c4992d91489d1cbd45ef1194e4009ddbb530ef05 GIT binary patch literal 813 zcmV+|1JeA7P)nMZ839@VsH#3F?&4>$_Egp8+ zc}olji6dUsWX8mJGx6qaF;QbOb;#HsWsPn#EbbuLpbV)7YX3nW75e)6vt1ymOZ4** zua3Myy|Pm#;5WPWJ=-%7dMemX)tXhD&#$drOD?a>@)-SM$wJ3b2U+&LtK z&|L95)YyYZP)a$4_2R^GIy+jj?K!sS0l%LbuiM?<-WK`F``y)M+;fx$kD|ODwz;qT zsJS;wL&ou!UPvq@UoWf|Z&0P3JbeaT(_$UF+NLy3HX|jQeuK$dalV|s#`N4QmQ|p2 zR}>ivLa^BzFwJ4B`1co%Q^{(B!>7d4E#c1sQ`0?2$?tB-*|9g7nw(%Im11dWiR)J< zxqR~noJEp4;Q^{E#YWxHGffto@nk2_O3&t37ej{+P}9BqknbnH#W4NU zB$G+%S%p=)d-u~CiBR+BN@`JVY-~&^r7BeQ9O%O^d=#w$k1JXQd_I%z{RdHiQmUeB z+LShO`pjPf`u#nQPv&-CVU zKDl@aA=oViKLbIk%C^nS?Vm{8|Bag6d-l?Mun*nkVoTbos6%$yNr+EBzr-Vo!w9|x zg8aWUieVs5m9FazY>5jY4k_h)ST2`O051N`_P86qF%07^0SUI~fu=_4B!H9oRja*H rsT@;^7*#?rC#AezQOp;tb?W^C=TaSl-W`^p00000NkvXXu0mjfTvhFu#-4xJH8*v(lFrsz`;CjAFVdQ&MBb@06w4!6sp;3Ia8!<`8oPiex4OW;8AS z%OHUS5=bC{v=j#ZMs;h)8y?FslpW!`(ZEL0GvGGhfHholo-QmSStN^Ov6jU!2sSF4 z+u2UDN$a%1L}{9SyTjS>%UmoTe-d3>JaOZ(c_aJ1vo^oNHEXpP2Ej&Ub2}UQ0f}@P zzt^K#KV`f$O}BN<(cZq(`0MYC{yA=AtPnFH>Z0HBvTVBGA$MCy7 zYCF%VZtXC&Fw2$KFHh*6x4E=rWVvLQLBAdTS$zqdKeVI;a_y~2H&AD_h8pGtO{EdAi!Ch zTlqCHkp4aGd0%_Ca(7zw)5%ujjC`p`t8s?k>5}$_D9k-58)H^2s#=6aScJ2-@X$)y zmsA$4yUFC2$9wy+px-AyQ^a0G_RFi}xBq0eGYq@4EbvNeLkqWKT2B}Pj ziJ4*r%c_lRjW;j|5Fn7jCQ_+y^QCEqZ;dfh$d@HOl2KJg$OsuBBV>e(aIxHEv3%v_ la)CFN`v}WtHnLUT;vfA(9+iE94chS->P)_& zXfBO*aQ)dN?vHOYOB1rRA=c%>wae%;L-aqH;UmpagaRWNV7a1*^u`%IRiNElp-uy? z3UFHt@r60gKYdJmevSrBXl+}VU5Owf^aVLOdp>dd#zVvhd$mN&64JvhdIm74G&uX*+UE5{=x8Wf>g08_abYyDU8?QV{;<)o-q%8Vsz2%y|<1Zi5)Wksz&AcP2ENr#FKLJ>hh zL5HADbqEZizlRPTf*=B+LlotuQlj!AWvG#+Mw-j!HmCD#?!ES_C+yIr&qun_pFM$L zb^$8?Cym581;gwDREl_&B^q5b_(~0g*{saaqMy{VgCZ&>T?(L5BvLj`*!_c1}UN{Sjy#P4uoV@*?ippT+Pz#JnEx62(J#F#DRyS4LLSc8FY^t zBn$;X!BYNx46ffJ4wURaPO4@d5070yFeMrH#2E2wcaebdj!qKQ4G0RBV57{)p>{?y zKBjBx5HiVM2#)efrfceW)_#nTbCzI8W<0?k3KqXTMUU1*Jm*44&rI_6=4ph;sT-*N zHB1LW=(cKF?8B^(DG0l>1pG}zeI-czmCMYN&*|iII=Rd|f&@f;B?SCUgxy&Lg#z!> zXCywn!Rhis=XsE1Y)%iVe+`1o>ERF4z3d5%Lnk zcyBj#yAC3Z_jVKRI0KS|aXiYqQ5Pet!w513xl%iyf?IHC8apcH&=WsNP7I?pN70(2 zBqxT^6F=ErF^65#_!QhiuGEg8Uw~ei5M?m_OLO!2S=%durazDThDDa?`lB^ zILi3usX|behEFW$41Nz)(u!llkO8nsD;A$L6&&p+XFvIK`yCB84r3I)r8TE^oe zXZh0efXa32`S`Vp+UKtkJ~l+DjI?pfFsN@i45rBn8AxL>jXbfzK58SaOnLnb=xzpd zH&b3ewUJh0gMFAro+4@K%KPjIOtTA6DOlDsD0V0RvaDxN>`p9cB+mT?w&K@|N5ItdOc-Nou6 zxS6d^9oz&5K?lV_5e3ou18Z?87NSF~DERAg?WLEPyL-R(T68Fi34IS1MNk zo6ZC%#;v|mxdPa9NR!xzs%XHb6Jm(`&m7iQ$>H0Y4oMPIoWIUK^?;N`o1%IR2|Y&K zDZcl7BK{#r7Bp>=sL4?M2E*NVIOcw2=E66cL5xKkwyF0V+%!qD*`rxCOwAo(zI6`} zH2!1Tl z@tbAU7a2Kwg5{yTeA%;~#r_?%@-|(KkS*0&w!ePD)1;f3i&y9hZ?c|_lZ2N#$D7eJ zsOnn=Ze3&7qq_`FTq4XDczo(S?`l73_1gT6#R}01e_$t3sSKqu%cCc8r(fY87$%kF z-!vPf*&q!Bh+&NY!YVQRA%-;q2&=@fB2br~H^%gmUolS6R*jI9WOHcW!xS7+ddbH) mMN}gsCD|O>_W~(6=Y9bj^`Xr8w4($70000R|n literal 0 HcmV?d00001 diff --git a/emojis/1f3a3.png b/emojis/1f3a3.png new file mode 100644 index 0000000000000000000000000000000000000000..32f5e90937575d8c2b2e45ed1df79adb16ec4dfc GIT binary patch literal 814 zcmV+}1JV46P)65h=o8 z?nWnq-gzYmih>{DjR=0RfrwI_j4?sRyy*NaD(c#~o0%D!SaOy%CrOiYa{jL=c34I5 zdDNki6kFtCT0Ju0+IxWn-~bjI3pY(SpAQcePYa`z-78@tu)u&Haj;8ECC_^6amY7?wNV=t2bYrxpemQ8BkL|Rf`eC z2x5f){W97wqx~{SI|SN-8n&aMu|Z&e z{@@|N&^xe$4YuQsM9MzAy53m;-eQa1wlZmGYfQ#wQ_yPQ#Cyq%?I)Gr%O;~u^o=rx ztt``_%Q4{EO(&J=gn<+;d`G9<1`K`aEZcWaU?f`9PR|9p9Br6L)#uWV+*b)>AGTnd zf|gwypPr@R`@0X^mF)y=HrS3!y;?C{&qZMq_)4K@jqS`obg4fRYgWBA zow#`R)5H&-OoFM|j*IQM7!mAs?~Pnioz5j8mxOHG^oL<+H5v_~D2i#v?bwQ|)>Nld zi4}gVukE|{_E;i)GhKeA^kozV4~L?owrJX-@jLqWfj&FEYsc`Qx42NOet%v^m=~$By=dkUMh8dlpmXWahCAs>Uvg^?A*Gkwy^v;_T0f_Wo}-ZkZ(sa=Dr^W zBC2{rH5#ziMM6y38$45X<|E)H8oh$ZXOtL|1rwiMrVa<1JJZU_D>F)c#E8g2!8mS- z2!a6m6{G|)J_6TOm=-t%jAl62wb>VVdv2hCYup5AIHaBa>g z^p@D;qazIVzsIyJvh(tv8FOZ81>gp{6^elx;)Vjv6`>DLZqG*|{?3POj)~A%bVt>G z3S4e_Uv-5$+S|@bk#DyoIde_Wi09k7s!Ae3&LdQ@L{+&6GzdmSSk4lJL?Y~ANfuvjh|NCW18F;z|g?X1E= zl|@RHn9{CF6L24x5!D&iU?C=pBzi_wT0mNfQ(;Yi03}hqch+88IRF3v07*qoM6N<$ Eg6E3{A^-pY literal 0 HcmV?d00001 diff --git a/emojis/1f3a5.png b/emojis/1f3a5.png new file mode 100644 index 0000000000000000000000000000000000000000..5d49eac435487c44f9b940be58176ed5cb75941f GIT binary patch literal 635 zcmV->0)+jEP)8$~&NkEK~D@wG8FhwjC8_S=m-vjyCi1^&949rX@Z- zc`Hy{8VnSb$W-jRGoOfeIKoxKP%sn>1w+Y_lx=57rPEAIPO-F*bEFu_}ur2iEq(Y2sccD zqssx z0!pyBl&+iCQPsDCoCn^U{3bvHYpK!~?xio>i>h*>t(}~Uthi#Zo=w)yP!)w+g8au5 zAPP7pIS$&bqG!F9x4*Hu#Wm3Xk=ghR<+~~=@cBU%m)j!e4)6$26BttT6mVBmNT*VR z&mKS6JwG>#%d%Knm}gaNVjNYqRdo=^kR{c%b!<>0BIf`(5b!sU9;9C~^bMT6g`6>n6o=~kf(81%;T zo%)Q>twI?v=$)Zkg|Y+;QnDGr#Uo=J-93oYY;$+1!P=KLe_%+qxPEGa^M@>AQ@cz` zw#n7X3qWyl-!QSqE9P(Y*<_ntOTil3gn{mhfPOAtmRf-s`l>JSrjO^)i^ zI(L8_Mjs2$*Lb-6iNxfH&YjCegwTjZN-@8klT;m(F;je7)4ZTF7u14d<{ab9Jk4B z%kVo2SoZ@GlCC!&eP$P4qw(F`gB30uw&;_Bw9QCSt+_0J*dQSR4=^--sn%SoHJ5+j k3E!#D03N;be5Zc%8~&+`Pij^S?EnA(07*qoM6N<$f-CRbT>t<8 literal 0 HcmV?d00001 diff --git a/emojis/1f3a7.png b/emojis/1f3a7.png new file mode 100644 index 0000000000000000000000000000000000000000..3473aefc56f82975e9b3d2670797e292d19a922e GIT binary patch literal 626 zcmV-&0*(ENP)N_v_r5`X(-5hS z9;$C_+6#12@d`AHauz7?6WiRMzu6j8mXVkRjQ4b~$vgm6$Lv|r#BODw+2 zlC2_=1ndt16km_pkYC=lm+2PukoCAMRy@+5J_0CCYAOQ$&EpzHU(s;Q2TlIcr-up(vQ~m z`q9Lgb?RHNbMLx==P1*ZEwuHX_7bTBfB>^V1`wdeOQed?{KRDF>s+@f&5hY`F^51> z(3ub(iv+C)1PFi`pcNPe)&fU0Qj-&BJ}H2GeEY^V5!un0OkIt~YglC0I2gF2m?2d2 zf_5Ra0}m9Q=H7hR_V(G`J&xmyThDX*D9cYzv8;8|Jn>Z&gdm5oY#d=gfMVhOVb^t{ zBJ8yMJ4IQ+@SiMyC%|T)n?JCsTo++oRbAu5hV6s>;ku^I>ecOOASdoZzlLL%0Re6* z6{b3V57+|w!nO^b?4vB&+>tR=@eDuY1PTgYfEX|-%6I93ku$&<%4{sXfkh&8@vDL# zj@_5QZ&4Gf1zsbpU_bytkt4tp;1e*aFam-a`w?UcL_q)n1Q0;@1`c7*zOWtx-v9sr M07*qoM6N<$g6dopHUIzs literal 0 HcmV?d00001 diff --git a/emojis/1f3a8.png b/emojis/1f3a8.png new file mode 100644 index 0000000000000000000000000000000000000000..59dc84e779d18f17a3abd58b2605ea87a2654f9f GIT binary patch literal 572 zcmV-C0>k}@P)ZYZjLctaXp$-lTiTE)Tp+lw) zI*Z*pbaHVFiV7l5I_OXbHwQm(C?ZA_KO(i_N1|R$Jt_yPj(?LkkJD+&c0*2#s2wY4 zyI~V=<35bqCHJ*#E#8eF474kJio~1JQJH73*FR{DT{bhfVx)D&&`QBWn8XD#M7)Ix zuj5xdh#9q;4t}H2>?vi_w_o3;_C}Gua$TIn{aB8^$B7CywG_3o6({Xbg2Jf*fK zJzLz+5YD>haPDyq&tU{xYOCMhV(o{6GNXr6!lfeYNOWBjcp6V35QZ}2ODqcSs1?%C zRq0-w5^)lDU;>FQK9>0^UdD#>mr_NzE^J^4OK4%jKS->P)0rK7lXe z+Pz^#f(y|^4T%^ekap6c?a*oG-s6nb1QSX6eX_cCn~7jEu=1=H)*k_Dz&sE#kpdmy z0A&|=3+z#l^?MH}Y|J*I4~xqyHi&r?Af_uo;55f+J_Zt|mw0t!r;b4R%>yyhi$OdHwkkD1 zbj&bjdhv|RCe(wFW|<0Sp|$y~j*u;#8<<92A*T5@aj)EXmOr5Hk#YzPPaz7$-14b@I zQU2%)ypgS~ZM@RTeELL0wt)>`1(*lwOr$^?I8bCt(-oaTtN;K2 M07*qoM6N<$g4%cg8UO$Q literal 0 HcmV?d00001 diff --git a/emojis/1f3aa.png b/emojis/1f3aa.png new file mode 100644 index 0000000000000000000000000000000000000000..36b4d72bacb346bb1c6a955a6553327f6234fd2e GIT binary patch literal 691 zcmV;k0!;mhP)))CbX5VMbrpPA$!$wu`3TK7L* z#jkE~0Q-jv-|{{R=A-fPPn$y@lIOVr3f{v$`^A^+r+H4H#dNLu!Pi|^&5i@g*)PqS+yb?R%DAk?9rN`q~L502459vGIO}$PY8nW zhGmSj>+W~adOTJ2+!?>(-WQRCZT2D0Vk=1}qkeq5P(3*kG_j1~*>aB~tszSPue{{= zNPz1&6U*W1z0JX3@$e!4qHSAqru%Y@aIJqS&GM6tnor%Y60OImDt^Vquehix(Rxh1 zR;5w%Nwa*S7xgc7dl7b;%>BuHtInOZWlConBb;7YXJzse`oGSSetZf)T>Z_dREU{=JA1b{K89pymh02qnw1sEi)td9ul_=gB7C z(W6+7L&+FHeLu)s0mi)OK^(Vv%NZKNxGqak$gZU*L~I*(c$jzMxNTnautnG=P2Nhv z5NbZ1u*v=r%(T(ofo{Js-kyA Z;5A-Y1#=#Y=(7L-002ovPDHLkV1gAvQ6B&R literal 0 HcmV?d00001 diff --git a/emojis/1f3ab.png b/emojis/1f3ab.png new file mode 100644 index 0000000000000000000000000000000000000000..b25d2fa09ad9ef3cb95d0aed8ab8587f2f74b730 GIT binary patch literal 661 zcmV;G0&4w;3(F?t5VFfFszF_R-74))wkZh^(9bY zHjs9>AicY?!mET>bL$b%=bZT7_%84RQ^6|;zvtHXZTEjUc*60?bLzSo2);vFK>~>o zAV7cs0W!jT2FyvKD1w|5KmEGT`02BO><6+}WD^1e2oNAxHQs6*&uYgeXO;#F9G^Vr z%H<^n^L@??fCoailiQYmMZ{Wbj|6?G`A}jPYoqtZY|$-C=KDR02&M+cTM3DCg0b_w_YaQ7 znixi5T7(nv)up*sO!36rrTwHuE*ZtZw!|&k%|J_ zNaD-_FcSX8aHlnHZO(vDHZF{3`Hzh00000NkvXXu0mjf@;*AO literal 0 HcmV?d00001 diff --git a/emojis/1f3ac.png b/emojis/1f3ac.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba9532cdd9ec8271d8fb7e50e6a62112dfb9201 GIT binary patch literal 661 zcmV;G0&4wZ0v5E29loxJ2r*&D7-p=-Ix(o4+A&}~Ji)A{Uq_OAyzL?_YDhn_qe#&#?Q z0@+K!;HjG0OBMFxC#ng21VFD?T7DA$Qx%1nC>j8&*oei>cXi&cU0GSStE!s1H^Yeh zfFMdn$~pk6&BkXvo?n?+ zneTNv-Ozrcp;Jl7A!_gH;dS*5(8#ikNBw=6{ptY`!DKf7xYzMuN|JOR0JtKNu%9uO zz&}`APF&@{zWjVUXN)bEIUKL#t<9%Sr?aEx;)V89k%r?N>!0Hr>nn_Sl6VrtlOUc1 z@g&53;a1haG1Oj8IZ)`@M)ixk9 z#&Eg01w;hSIbIAuhoUIZ)YUgY((9p_7#l-08iD4_*>lLV+Mp4OD+&QAjzHLt;Nl|u z-=~q10T_)&SPHTc2>TJ=+{C171SuIR7!y!lRfIs;4-Hkf9qs3w-^R`i2%K~5hJalX vuuB4fRqPmF6*yrCfExhE_Hh7iPBioz_od}|R0FLW00000NkvXXu0mjfoXD+z^te_404Y)O!q+g43OcMF<^|pO=^#$TF*9D~=158(|m7y(#ZB!P@R2ItAyc&fKV>FvhDhn0jG4~59v}1r*`P`Zz zS~@y=_)CmsuMpZY#&>V~rh4eZ`>gf+`NM4rCN1u8IX%z!5`BcWL{{uU&TzCX;e zSr+bmk{?rxOus9k3c2-Zq6x#tmve-n(vx%PUz-w(mc-)f`Rx3zeZX@k;)KRFfp1sm zDsy#4cJ{DoS1*<=s4Bx-yD04Gqgf9L1D!PdmZ}X;#Oi%J%I?IVfER0I52iLIFY{X_ z8|6={H)T-tg;A7cCUC>f^5&1U2;2gEz=WYvoT}nCLVEKFA{`b>1i4`ef*=TjAP9mW zfJ_1pHB>%4{m$%El~U2;?c*7mUO-C`xNi721x`1-V0UgLZMhkTC5^=ZuNDxA+UJ0Z zr35GeN`Mle1SkPYfD+tw;?_ks1r;P)eL&^y3{G8 zI!L!J;kCPmgz8d(7f;=zgGf>Km|~5z#h%$l`!`L)Km$J?W%~!&n>97Z6Hg)$=P~e< zeMG&)A@(sQsbXf&_z#EueFX9baRUr6zyJdbFd&lZIsyU&2oReDtVBgXvP$Loq06 z%8W_iSEMuDjU(MV?hoD151sUSvc1IICcYKFu-ol3Ke>B$gUf!+OExq1dMR2r)0`uj z7f&RvcV}`SfkbyEN8C%WBhy;v;)yDbz!6-^SIM;1$0dt9Kn_T8a4DeI0Sc9{%yO^@ zW?;s0ut+5=vm+=u%*?yg4eACn^DaTjK~RVad>Y=(zvc6%4>WroJ=tUA`UhEjzrdzk z{~)hwNuIxa!$u_}C^>8qz5^<-trC`LOLowaN|WsyAm+NnT$gO$03E3`wU!(~$>A@P zA4T}=Qe0i3Gu_3H?`zbm)j1kgmxFUHZS53SSNMl0$R8Ok10Gv!7MM2Us$j{m2^xeZ z4UP(?5m!JL_#>1*GWr5I5B3PS1627x7kB`=i7_jG_*4u?0$(|p!@&A)E|8+B#2g!n P00000NkvXXu0mjfzp?o( literal 0 HcmV?d00001 diff --git a/emojis/1f3af.png b/emojis/1f3af.png new file mode 100644 index 0000000000000000000000000000000000000000..81131f3f017588092d1415740d52739551671e1a GIT binary patch literal 866 zcmV-o1D*VdP)@$p$<%+A#2iQZ@=`Q^7QalH|hNB>mxK z9Nr@CQwHu+1`cnL{_rvv<|ZkWBvZjOWttFTL;;3!rp0P3Pjf0pUt|TluY~V>23JoW zS5F?_`3!bniN44RdMeKSc%GbTQ8uIifuvEQXh{wxHW5-%b0m+jN!COANyMrUHc8Eq zJVHv^5*wH$Nzy1$7SQ+~`ZHNpmfTeA!{WavK)BwiqA7xqTSp2(X3>r`1^etJI=T`( z47*sn@8F*Ch`W!osHQ=^Q>84dUcB_~A)6|CHy@dViVnP)B;JiJa_cs*pcq$pxM;9i zt#UOQ;m4cb5uf{(YNwOV!(Csi?Jsuz*%D|S_PK1z+=juT=Q$d7Q+PHLr_^RVb| zW7Bi73AG~tZY^krkd`xfrP(9aq0DHkOgA23YJk|WHTlY3}AN5x$ z1Fh9``>S{{))u;>9Hp;;6`kDV3taM40s zg%H>>SJARZ-j3e6|GYlJZMEq8`0rH9?$%yA6dnV@ z{F$tXj2k-?p43V=fx;(vhzLq)6bhdphd3Ua1nVpct6e;w zZXn*%OkOVrTI)G-4bF7!p$v(7gv&A$vP&Yb^l$J5kTGlB= zbYuwa*z9O&#;4hoc``+0@EqIao<74lJpjgHi~BW&moE@#Z^frsv-%}P^}!yjXbrz9 zg_}y_oH)vMrMY=(t_`xq6ia0a;SiiX#Zop;CYQ%`D=cMlnCn-_6wAOeu3I6K%M2!*pA79duyo+xkc7t>}#oPHeoVTY4%A_P)jK~#0Yu}d3a7{KA*d!IE$GAe4JAy5kr_JmU?iIZ{4AXw;Dp?FFQ-KEvh%hZ8IYsCJJisR;kw~!M`;3h}166*XpR-lSQ>)bo@j*9D|IqN7 zAkXPYBob`oz7RATtbO{({{DB;Q&YT}pQl_tp;9ij4^~Hdx)T_?CtI_ zJ3C7(_K>~Z9kSUhQ5>L3hqabU<&3sFRj#hDxxBnYm47OgGpx0QR2@Z2glrWG1VO;c z$_mY9li()c!|E!HMuV+FfiQ)V=^q@v5|Kr~p`~80Q!bw{GBU#4+zZm_G#3|t_`JSO ztyUxC7S(q$>UxOCCh&$X#u(bHwM6);%3DW7Ky?{7ri--}Yb_CuQC$`kGcY(zOH*N6 zLhl;Q#;t literal 0 HcmV?d00001 diff --git a/emojis/1f3b2.png b/emojis/1f3b2.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba816374e1503b8188f43a3955fe395bdecfe12 GIT binary patch literal 783 zcmV+q1MvKbP)}9FW|07?Rav_*p~ui;_`z4F5xcpp27R^e*!4AUon3Uphf^l^C|D#EAaRZJ@~DM z9|wp4B7jIMrH(4*j{t=DPe@7~5D0_tBM2S@fB-FVf`1VR=512Io> zIe3wS;A;+oSZ6CuthCp*)<%ZM`)f7aCV8&hay{2XN#0y#+#ydo_oa=-IDi#xTP^(E zZ0m&!f0TCa-W88LFd70NK#!QTNhUShK9_S-@A!6 zNhsE>^*G+{oO=X-OdOf*_)f=FGF#eIjgY6QzddnevQ>paIz zwZQn=*vJPL2xrc{I{O*-_YDu?7D+R?aqM`V6u({~I)*#Y?~~K$6{FQBSV`(dCd18QLdCTv$L~X6>6RJwco}u zAtJY9&ksH#9v6LBokv?E>bfOOBryKRm+@O6*H^2Dub1b})_p$*I6%`&rS6&T0ejD1 z_0h)4>WkvUe`-z_rgW(~Vh<1fAZ`+q$RFb3)i2+ezCCjRFg#&aYPId3)Mm&J4ad&p zU;5DQ=s0BcbPs5&g*fpcE8U6R=Xm=jXNy;WIBj9rq*N@hF4@t+y1D8@dPhfkyRlvf zCZ~?;A4}+RH7B;YY}@_)=Yt@~&fS`!?yn*u-1)sg7&h6~)60Jr7Z*AF%BfMaKZ}{j zV)l(CtnCBO8sGPiHG?%CRPNybfgo5T%5j_@Q>j#m2!-#gBS-S@0n4p-SS(INaPq{dcN>kyHKJ6% zwvOiWcMl#o_!_WG+t#iOnVw!E8mju{=T|=a;>L~dKjn#e5t)>;=RRQFuhYK_Rw|XZ yfzv=AumpUos_z3gX-g(u>Fe+BqfMZW^5@?slku|p23vgq0000h5FYs_-7*qZI^?DaIx_B`h~&-3$4=VT7r=cAslsy|p|MO%P4 zf6Iw*3pfUN{DZEtqAft2kTJiUIZGFV*5sK=aah3?1!W+B00Iagm_Qt@sW^3<(tW#7 zra`v5hg8!Ayxx9(QN)4!3cdj?BJvgxLYmOrt@V^0+=H59f>K0QCRljxBs19!n=BQv z4uEP?Nn2&NpSEo!-l)80w)_!%u(uK`qph+NZza(zjP z`NJawuFFg%b+ts-ucJUIwMP^Be*Y0pM;8S${7OPK(b(;!5qpR{Gb6qmGt37u!=#uX_QPcN*>~yG5ke(er>m{Gmr|Zf wfx5F|BeNOJWh-AzjBH+G$KKc2-EKpx`dX(L@8ydk?1?Be%zzXyB+$ zJeqOF6THO(jNy(8RQ={K?TU))>7b20wDnX2l*kQo_c-f8imy13zTps^8`0Uu<7$9z z#v5X%==v-CEA$jYDuz@Hsk*wFEC$c;6ZiF06f9u@w=k|>Bx}KQXH>kxYZsdgmYkzt z+4<7teiXFz>yY0`Byt}u|LZ0zHPg!o>lk$+lU3r2Q;8S&h^IJ`-V0k*ct?CD=W&zV i#3%iZ(L&2_;g4TpR7C+?nyse*00000zVp0%<1%u#VibYHov03~R3XyW8~e8e69 zQIDOOHee1XG*;}cg^6m|N@l)GUI;@9GsIn-#Y8piaYQ@`JDS0)M%Le%Hq{9KsLAo* z9J=HpVNEBQ>t!z28etbp!37k&Bo;Nk1ovu$Vt11$=%HhTs!>pkHrMO-ANKh!s8NJ1 z6*uq*N3q|qPpwkEwTxEr3`cB9qaDU6j2Td|j9HDSlI zn8Io4tB4L^T}^2~!IW*XqwxbDgf(eX{kgAYKyPoif3x)S0oqvT?y2*=5_a+jMxJ5# T&aL(E00000NkvXXu0mjf`J2Fy literal 0 HcmV?d00001 diff --git a/emojis/1f3b7.png b/emojis/1f3b7.png new file mode 100644 index 0000000000000000000000000000000000000000..bb629257f12f97ee985c634e83ab310de0ec1d0d GIT binary patch literal 558 zcmV+}0@3}6P) zsxd#_E=jEia&10*FtD-*s17Hq`fEsT>Xh-dBwOz$cy!f)R=JTs%5^|9s1%f~j2!eWU{ut5nIIA(l1z1_d=kvYHE!?cj4y1NY z_fQp0u;v~GA0c*#9b$*r2@)-hd46daC(U;*^x@u8Ms#aS^no=K0=E%L1S?P{!YPV+ z#pwb`0abtjmmKmqB~+BtK#Fyd<5v(~08OmxMdcYPpaLqO0xF|6KiU-Am;z9ACcu-W#rohhw wW56nqb?A2YGnmDgff<;A8JK|?n1LBz0cwuPRJ?lgga7~l07*qoM6N<$f<+ba6aWAK literal 0 HcmV?d00001 diff --git a/emojis/1f3b8.png b/emojis/1f3b8.png new file mode 100644 index 0000000000000000000000000000000000000000..9b9bd5ab5189c8905bb2c26e0fe8f5356b19b600 GIT binary patch literal 542 zcmV+(0^$9MP)q0D&i8ME6P)ZqK97dZHnCE}wOwGu6iD#olU$InQDA&(2?r2Yj`V_mn zS~Uo?00|&nO|NFA^*A4guCcGXZoYG4`W`}n5u=5Hjy&iMkR?)0uOU%hV7B8F)kHn( z-(RO@8h9&g58#P7(0L$B%v{?sB*hDR4UksBoDDrkxt<5v#s6=)Zc_9jPLqa(%wy!eX% zxD9+FMk4N=M_)X`BRs+*Ji;S_z%&~ehk!|bwB_K7UH^09jP%bH4t z#`k}?1b*C8@x5HI_ikt5Q-Q}`J=*OO;Yl%;M|KqLy_-3U?Q_2X)A{G}?dM8sUd0?= zey+4dz~Godh>#ZN)D|x%)rFHDp4~YwQ6li%*A+;l3{U>O>Sw8LmG1*T8!g`ReMRNW zzXfZwQ-ho$ lvjaiQX+d1KxBcD2kQQzCa_=GMy9^8r44$rjF6*2UngHY7elP$4 literal 0 HcmV?d00001 diff --git a/emojis/1f3ba.png b/emojis/1f3ba.png new file mode 100644 index 0000000000000000000000000000000000000000..b4fcc879e2f2d699c078d78ff094cd14e621a7fc GIT binary patch literal 636 zcmV-?0)zdDP))c0P?&1u`{JFK_Pbw4 z4i273zQ&4e)!Fg=?pK79cqP+|Sh1xL2m}IwKp+qZgs#BR2$zLjfCDKlA^^7&dlyys4w`??r8&@BD@6C4tKT7K7Wn8{B&8bjy^s+ak_W?`VsdO7pO<^s*D5DRa>gM zN?jX`J=O1zzI&lv_J26C@XciZ+RV4MMEWknUg~pL#%f*UqHtSPvIqP)8MjW?Sn|S|qeW{%M(RZr)A8UJ|H0qAqp&Yzti0<*QT^FW`ox=_iHgaDZIPOFWh|sV=Eio$Le2RhSpoX+`s?t( z-NC#LeE%@eAMrDe@qOQX3Kx^Bp?oH`FBW(X6p_{QIk@Z5hoD=z+TDvoKXU>;1TcL~ zQ{=K~Ijz1Fk@a{u$fZ{yTC3B+s;IjWc*;DEmlC{`;H3nc6l_w!k|FE<+aMQThB>!o zhN`Fs$bNDd{s;gEROAroN01|AMS{wyO=)UMUH%#;hd~Ld$Sr|7vYg0r{NxX2?J4z` zXA0FTra9bhIvwBrvfE)&78(FF#DAVy90*Vo2C`JDk}Cp zOT=RvKDqWa76MZWn4-*XF6#ng^jDz}OvJxUF2@(9un?F|07I0is}I!KB>Nc*qcwc- zisJToJFpO#Qos~tR+eHn3|$XNk~E%NTOCQRtzsoGC4gZpKD-~lIvbtt1++f~=08Vb zlo6Ohz#t`>R%CAG)14}xj1VH0P4CWh z)x_eXUj?;ZRr07x9#zRBFwFyxDM@c{_5kfG%khlOFkWIq+RbHK=4K*4(0M|Mz!U)b zCYI&B*T}X0jh(GjOxN}E4yS9u;dFNSQ*yA@&&kenuU3{~H>-Sd zQ!bNkPlcd|5H4g{N2ECeu&X%LHSddHE=q)07=P>p5yZ|c3Z2`+E<^$`9=K@a zpf_(OMze#Fvj^kJctH|zBpf^_2?sPW;a^CA7$b~70hh7TIo7c?tn1siec#8oWCueG z;q#HPqo)Bgl->2#7psq}6U~M<#WUD(_Z2tM`ISMA0#|j<&f)DM{05|#AC|`E?oEAb zS=R9&2=0Lic|riQPV3l_p3U1P-2Be0z=%cgrnbcF50NyHZ2v&IQktG2i^wW0p8Ft$ITatXxkyKnjFqv zsl1=NG--YM@d0nKnOv>5It~)C<1U#OHsX6V8uc0?LRU|Y7Yjw)WSTAY8>f3OR?)Np^;$TPo3y>s%S5? z=}>+Zm<3+qKXlASiD5i*gZFwble9eAmRpI3w`zSABKo`8eS|zw<0+fti+tF3jva|I zZ3f{|b$}nr!<7ZUGbEy0Sgdha#10KoD8^W0r~S7}R7Dp*r6G4eVP5*)xdbTJNo01X2Pq%m<) zzJilcHcc>)m}vL{4kivAJ3vwvUVLFdlz<=vie9hx_E>p8Q>722 zZ{h|{Vjz9v-P@&C!~6CQ|DZKn7jk#{$NJZPEZq)5za&5HEm8`0p6|Px!=po!Xi}#U zT^fuIO|n<{HoRS4d+~XH5g9iVBMB>cZ{zR-URb8D{W^{Gwh!TkWxkd^(qzW(T9Md@ zj2h7#AgNkET%jj5NFzNL2l;ZiLX9*HGbgQREKALSvrAhdgFXKg&mXYMRYf zwo4lb1ZN2Z+eaHTo2}G2uAP@&;7ykSOYl4)%Y2zN9%Lm!H7jR0|Fv5bM!6>fZV+JyPnn>9G;yZ?1qj)GrHP_L6Gfq*GRx!PRjb z>k13N5yx{c>DGg)ZDHy&3TMY;+s9s5rzeTMxgPdC=fRxG_=Dp&2|!2`E$h*v>R^9P z{?IENm>fl3aUOB(YlgDD9E35%;>Lv6?!SBgWXjo7HDbzJYutOtI{F5Xy1NF+orjUI z-h+SPEX(~SIy+zBZD|9wDzLXUVq?!OP^*Hq;FL3W#+3^YAq~`K1qi`^Sf++VrzAw9 jNj88Gtd#_`s6^)vaq9*+EE<%y00000NkvXXu0mjfY&1MY literal 0 HcmV?d00001 diff --git a/emojis/1f3c0.png b/emojis/1f3c0.png new file mode 100644 index 0000000000000000000000000000000000000000..c743018fd1059ffabc32fa0884b2e9c92333f79f GIT binary patch literal 652 zcmV;70(1R|P)}cg=i>;!$_pf z$;UJ2PZDYK7dC;d!KZk`!P-wXUgZ%WQ<_}kRUU?ewF?bC*^5n7dL(8B+#`K$TIcXw z1qG9m3MLHCRnXU_bC4?3~D4t!(7q&%m;{#Im5tXRvv!P?S0~m&Lo7J`U*E z<~LL#O?gU*H0Ak_RB`CjF@0Q&t`_2nv^lxBsj`12)77j|N>{VS{+Z0;mP#URPQF?# z#AQu~rKGiLD3v#!-OSckmRS@f4qRO5sMEP1OK?4q=gnIAmlq#1_l`1VUSQih(X+AS zVefH99|Lqs(~qFUDv7@Y2!0{V`q2_z8lvF+d0000N7qKCu!8-j8ghD=lPX+BkRzcJmu-){r3AD35>>z`sV ze=?b@$ziap8N)L$1CEH0&nqku%1TSRfUd=bpL}@tmK}jW z0Nb|FTC>XnDn+;qGGK8)T5FV2*tU&`u*bRD(t^Lt&&=!$n;WY{!V%IN8&rlu1cO1U zs;YSUEEePS%l8;#sI5KC;NUB?)~v0q z(b3+9h+x|`Uayy;q9Q6PD%fGMkBA@wT5I+gV=%^Gj6p;Y5%xG^@i=Za&#_>Ty1IJi z=H{?%8`pJNSy^U!YMSnzUaG6B@%emocHXBvP);-&#arOT>FevI{q6&zr=r~JXhmzy z_lXHw@7%^1gWvCGXm|vzHA*RxOG_-w&l8W2vcq8?%d!y5LTk-IIP6NLU2?g6!sBtm zz)@fmSl!Cy;-gsX&Rux3rA({G<3!3zeVL5w z79)@ X>sj}-V(U?m00000NkvXXu0mjf%oZ=x literal 0 HcmV?d00001 diff --git a/emojis/1f3c2.png b/emojis/1f3c2.png new file mode 100644 index 0000000000000000000000000000000000000000..d61994a598673844ab18849e82c02ef7d4f95b33 GIT binary patch literal 793 zcmV+!1LpjRP)pkNoGrD7G87-|!vZEavoW29S{ zpJzw&-H~V%QAurZoUf~Q2KQx7|8!Cmidz5(5d8_}V*retOvUk%iHVW77C51ZB&4zk z>esu=GG{K_Cg%ETM4qX*(Y{K=z7AsyrpRmWzl#?lO3^wuex)Hh_@NX2-Szl#i3$(O z-NbzE_obZ&A2&DlV+Q%@y0xfbko0Fa^oc}#doedoVWZHuD)i?W5<3v@z>qPrp*L^Z?&g{W!zuoKw(Za1CZJNktbFELFK5Z6b zUIz*)YBU1`q?;53W(a~Hra`;n$z-=JB2*eod@zezg*F00000NkvXXu0mjfQDkuO literal 0 HcmV?d00001 diff --git a/emojis/1f3c3.png b/emojis/1f3c3.png new file mode 100644 index 0000000000000000000000000000000000000000..fd7ce435d2ab7b94a33a49f3d812d2bc85eb7ab6 GIT binary patch literal 686 zcmV;f0#W^mP)nnL$y4Qd#uyfz#EQ$$8y-?)j&rFv$3Q>}JieMj#3g)l{apOW2vPGA;>5t63WInwHfl`p;wh-J_Y(Xe)AX|}NDppYT z1y*4VI0pj)j0js1&=|5YQ+E{US2fP7LD(1jmbjO&U2KI7HCG~+!e9ZHw((|RELyug z z-|DG4wTolb;)l5SF}@Ojp+EJAo6_Tu9*6WeG?^yIG(n~bGDS?LsEHJYpfPiPB6wZ+$Il3v8N`1NK&pe3(%nQ1ZXyOZ5rbHM z-ivI?3YMe1p&rT`Rhk%zMP}a>TO|Q5jI#h6v|so4Ao44u5!qNJQicy37~>kxw@v`i zHP0E=WCp8dm!~Jr=UK(KeLKp!-Nl)sR8k$qI>GH3tkHv2yEF5j`&2R#Vlw5h!oV|9 z3LBD9dwS*T+b$3daC^qXI#zeA9UGXD$H|jTnv)7!{yqKJgveuQH*r7-eG=>b0YDTA Uhs|zZ`v3p{07*qoM6N<$f^GLWU;qFB literal 0 HcmV?d00001 diff --git a/emojis/1f3c4.png b/emojis/1f3c4.png new file mode 100644 index 0000000000000000000000000000000000000000..f05801c7a924805d1c5752d4d6523d3faabe7546 GIT binary patch literal 802 zcmV+-1Ks?IP)r zpN|+H>84t}89v_IuytKXug%l+uU(Y$fX6Ph!8hBfCKAaHgx_exY(`PUIo&OffVjsl zv`bTGsdltw`P$jm+0%fAlxfRylI&u1p|4w;{-=d%OOH^z)Z_6+!|Jy@@sp>B0bAX3 zgQqx3z&EyZ_)Co{L;L@3-&$O}@ym3L2{lxlS5^5=hq?8vB3NZd-qyKg_g%F_;HVlq zae-}J^=rXTU%okR1eKBL1!DjRQ1Mo8c69ia_4hkXD|sZgwe*}>c7MzEUR)_gt^q=0 z$4kwL<1Xr-0lypt@fk?A{W@Da6*R1GyIPzxWt6!qf4ttmkPUwUC{$=XA*B=o*;Hed zK_-B`R1`|e=il9GO41m8I~8nw&j`v7+s%}c$u+RPsi4MATwq(aKSew|}& zC)wxa`QgW#T>ol}a~C&=TZ@cMMk!deXg=(SgWlo8da=KI`BbRR8;Te)tim1Y>h`d& z?s*z}GNi?QmRBD!_4p1G(`{r52HP|TJprh_ojC?O4-#uQLeN*wy)KuT*}F{4eNRbC zAZsQ0kjcdD12|=cCp18fhBPj{_6B}Urz~BTH~*r!r+{cSD5`6$XKJ`Tx1V@A#M3m8 zIZukvN;-!v9G1UOB;bppZV5aX9+(MKWRvgE&nnCc4QE5QTX zYsuT`Z15@KSk*($q#{rPJOLr)a6gGl}U&PZ7luhkm)o7r$KK(ep6*IP>|&#Bx3 z&H%~}yyC2pe_IyC&-_aW;e%MqR)7dtG5!*Vhe_B}zOy~A5IzB7s%6WzcYy0u1m}=` z03y50*Tz3mNo7$|G5D&agGgtAOwx+&%YqW=8c?TFbho}QyIYHZsl+$l{S5bdxYsK% zH$rXbIPf}kEC&ln-Xf%q@s1q7>LT$21ZL&#ivPl}ryOJ&fx7m{c85P^B z*dI%=F9oE46i8X`IRiF@E}W{}xjV(vc`DC5_1p9Q_(#AC2BhVo1@;j~KrONn{?^+( zMDh&qkO2V%2oNAZ6NI$R%sbP}orby7F!S~_F|H%V5gAti3t*E0F9CvW#cu*) R3a0=7002ovPDHLkV1f-W8e;$e literal 0 HcmV?d00001 diff --git a/emojis/1f3c6.png b/emojis/1f3c6.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce831af8381f5cad3476ee898de8d07361c49f7 GIT binary patch literal 537 zcmV+!0_OdRP)q019T zM{WZaF#NAW+Id8?{R&V-s`mV`_!-1k_~pnD1BuMjXt7O!1p~|hFBN9U#TyKgi#I6b z&jKsJbpvbyA4GVENS#4M>J)}ou+cj3*#K+6DG>1CJ%g2Tnc%||P%#*@3Y_eUNwk$N zF@UCSN$bsnz$8#HsICGdM#FK*vPGcA-oBEHUr21HftbitEJ<7X<8z4 zkU7X4WDYWi#RvLI-5B4u*kO#t82Yj5Jbj1=7w8Gyi|V^i>BFvX3O%ACoiC$zyo*j- zt5f`T$tV7~qGd1cA)xHC)$%w!3Ns-00n6VK;3_aD=rY1vb{PZ^K-eZv0L$L2BJ--C b3aaoEfKkI&c^JP200000NkvXXu0mjf_8akI literal 0 HcmV?d00001 diff --git a/emojis/1f3c7.png b/emojis/1f3c7.png new file mode 100644 index 0000000000000000000000000000000000000000..d170130ab74731ff346a7bb1c51fc822980ce84c GIT binary patch literal 880 zcmV-$1CRWPP)Z4ZlD_u6^C;h-NXkO zNCn>p14YF7A```@jfxMVf}rRgMA?`KeGuJ-*wJp5Ogd>bAGnM z5Jd37&j_mV=qh;?{Sk z<+bUhsT~AjUX89iJahCwgvT0JDvrw-jfwI3Gh%06oR#s! z4_xS1GX?)KGo;S9x^suCt)(aGX8E^!VjX3v5Nlq!&bGDn~bR1A8nfQkIXtwUNfVY zI=fP*MPKCJF+}i}CBHt!2>Y>0&R++0^ue__&YXQ4&-L!49)K|b`_>x*z$aJ%w7Oe` z?b`56Efvq@E;0tfDhe9#hu_EWcOO$BB8jYVhQG~#2q1!x(LCbWcz>!T*AFT4o^62w zi8a#t6+MLct=l(!9Ze_uT)UnHktcQYBX9$2gfNJwi`i2Ws@tBKJD>vjg;MmU1V7IO z5?U-hoG7f%#Z!qFnoFaQEbxCW6fr0YFX2xlne-E1R zfHq~$Qf9`ZEKhiV$ne0wS$W`rnHgtvl$MRvwGy!_M|ZzpcfT)&t=08YS0*kQMvV?^E#JvB>K}00B)z zt4E|7&`IM{$6F(rh!6X#PU?}?&`4~cf5@>Q%grAmQi(`4Y2?hwWA))6i#7*nIeWrL zCK7RfRh_dZ{IXBmUVn+X%U2d4QbQWI zZz?^lp<2Mj7@}ze&RxRg$)xFEImv{{f1z8Ap7_vUmwusaT`nSi#t= z5$%Z(|31iQZ4d8-b)W>uU=(+zm%zEp=!U`Fno9aR+fla77#50Vt)OH>A*1BX$s>El zObm~Qq-oOM*^aVp##0ZRD%Gu*9zB)o&ho}WH?Mg3ZP~60W)~IHbg-OgPXuM#q>(@o z9MK$TjTHf_c=vu|$=01eL^LL4PvPV9CnOUl@$ZAArBqN*ZGyrvcVuW)YORdjQ6&OGZ@cAscIky z*!<&I=yi1=QWhKd?2Ej9Vfl~LI#ZT8+}j>D_{#$OzNpkTLERCQ5)^_$P{_VnS%8*} z$VP;v(+lQLDLa47XgPDd>%+6hVW1gBHxu{;wSNa2AM?a<00000NkvXXu0mjf7o1i8 literal 0 HcmV?d00001 diff --git a/emojis/1f3c9.png b/emojis/1f3c9.png new file mode 100644 index 0000000000000000000000000000000000000000..972757aac6076efac2eb40c31e6d415c3846760c GIT binary patch literal 706 zcmV;z0zLhSP)|=Qg*w+u7OKIltV4lHuj^A)dbb*iBB= z4a6vRI2x+Eo0~k1)pnDWsaiPbUmFi4<(HbyW!5!#0srG1VkA=>j?4N;-*HF%dAA)F zqkt`5*I+O%Uw=Hge2)44DA}O^vjg~5ND?MZtAy6Xv zmgN@%C!9`itquE$WD1xLrqNkv0nI8prUKdF8oQ~j-{Zu7G@aworxlz%S_a8T7pXs{ z7#5<+NWaGcffDRR=NwO_!pJEqy6VahPO0zdkGRrd5@~%)jfB1ARUM-f%kV9waHZ7_ zLP#N**PgOyR_m^@n_yxTyYWY4Je&+6kyCNo>qNO(z|VN$Sv;pNuvA`a^teRqB$`q2 z=4%ua-`61-DQ=y1pvuaSQ}th=bn&iHq+kH7gkX!#ITj-_#=j--C6I!uaU8ZAaP_1e z6=ngd##3*7$&0_EN&*`gfbjfE7VlK1kFW(V?Ye0yMZu&GeE9s zVINSYi78t5gPa3>1H=N#z-J%^)PNnpFwiTW9s@4X!~{7Gcy51DS17m&D`po`1M(9IuLN>#(MU3FKWWTqkx0@1ahnmW0=AiC^e!~=Brwb7x=S>QcL zh-DkwgYHdm#}P&q8n#=Nw~4Uxp}HvC`kLdN(?iLLG4(T@@nFP5CHYqx&4hVx_Q()* znJw)T7iN#1op;yq$xD+jZ(>(8KadI(4?ipIC7XOg!vBpG3>ms#(zHO)B1MZ7EmE}T Y7wV*$lkF^NjQ{`u07*qoM6N<$f(hF1yZ`_I literal 0 HcmV?d00001 diff --git a/emojis/1f3cb.png b/emojis/1f3cb.png new file mode 100644 index 0000000000000000000000000000000000000000..90384ba8bf96f48c77228287974d0d0fe7b126bf GIT binary patch literal 653 zcmV;80&@L{P)*8P>|Rp#m9!`YjtgRW_IUmf+E5TUH- zEC(vCP0q$|4~OZCE-yx3KYxnsY}p2^8({Sa)DE5+!A_m0Am5<86gIXXkqBZ2I#6ol zNXUr3xEHDxkj5u_E*Ij9^P8IrvoG(a7YK~Tw^CioDj~m8AJv3tC+$7T&-K*FhTIsx zXjmp#CRip|CKx%B2+^eF#$Sq*zN@A5T`k8RMAw>-`Xr_SrU9k_rh$gzg5!eYg5!eY zCP}Bq`rcjbA9otvai`Jk8@B(}=9G6PIK?8K;dK^_@1q*{6-LI4O(fr)Jc`cjH zFRUi`9>)C3*2&;>%rklsF@gV(?whCzd8mJKrBy2Ck4d-d`EaS<9%x_2hjIY0sEKI- z8le``MHORMUj{E27PZ^0U-y1iDQ9H0Kg>YIB)K;Vt}oC4i4Di^;jwqNhKha0CA%Y^7zRYW~* z`9lE17O6phh!}&GE>Ce*IIlBLp$;Vv3e+eWV0Ugb<#x_Okr$CL9KFJ9{3T%EC19W) zC10IHO(Myut7q`A{4s)1MXXp@%h|2lne zsidZFKAn7VkI$$xobw4ZK!K2`Dy-Rk)5|kYrj2i!jAUlRU*m=mKj*2k${xrpSylp# Z{05mD5q-W002ovPDHLkV1j9HKi~iW literal 0 HcmV?d00001 diff --git a/emojis/1f3cd.png b/emojis/1f3cd.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc7a338482637eb7d863c6e1fb39d3fe4493078 GIT binary patch literal 701 zcmV;u0z&&RI82^fRlGPh4z|gtYUCWg`KAL`fhe z!;&{P5H8_57u~z;8FZno1^_1k>;#A22*8dN>Y@RE=N!Hd#byniM+HW ziC`e&3FqVvw|Dh+*i-Foret&8%yj4)TUv@g@9TPBTkP{eQ&m^bySIl(pyRKuj6TI5 zexMD%9aYukNBgU)W4fy4^>%gFE-x)LlXq)@l>};(B)Nuj9#3f69RT+M82Fa};0%+b jb3|lGXj-db7#Dv5u;TwkYy_!J00000NkvXXu0mjf^5{4m literal 0 HcmV?d00001 diff --git a/emojis/1f3ce.png b/emojis/1f3ce.png new file mode 100644 index 0000000000000000000000000000000000000000..5bc5f99009ff37c46320480de2f732898e977102 GIT binary patch literal 573 zcmV-D0>b@?P)aVn0f(^TBh=`gI!gVdo!rGsR23r`(_>?Q=g z38RB_=+doA7z7nmh$1F*u!Bg5mY9pgt&+Aq?wPpf*?j&rD-h}hbm;Tpzkh(7i|PDL zuu`geT4Y#I8ozi-mUX-j9AV6k`}vc!SZ4I`Oy~WxIkS~RB869siw5qGu#C}$Ei%%b|H;+{t&JD>=R-;gT zB60<|2y}tcvns?@=K-$rQzilmVbXt#Zf%vak`-`_-G$TjjpHmFWHW){_7*=03*G=H zBVpo_#I0%N$x4=HNpW0z#~}f0w#(EiPi=HN>uZ7H=OhP8C{qY?r2%eUXvd%XM34EE zXniGv`YTW#N&yOLFRx%2p}l_3f!m9X%zO;d*JLx+?_)#7+1#loyB(+-&uTT@twtY7Wp*#kPmaKC!dUee0?UH6pNZ=QXQW+>x!Ks>cGfuC599?iAqavX2!bF8f?)4oJja%f*2F@C z7kw8L3d3O#m`bsTpG*ouACMQApbkR~KbaUz9_}@fSd4Q17p1ivn+&2EMbp&bs3ol0 zXf#ap9x|o19Eh;ZAevDHL9*0v)DSh#RYHfzV=vKc_?JO6qY8q_vdw@10tg_8no(c` z2-(RXno+_uD4-ZnKmi4mEuv-=7y&|dGKgjrO@rV-s7KeUPfK4Hk9=Ft-9DJ=#I?n# zVGzxzhU!A8QqRiE_t!UOR&KnF&J(M4k{misq^pG*2GP3)RZs<0Pz6;`r98883vg`G zN|nO&EIa877v%HQBVNOIEd~5#yoPDu7-0D0)kZF#vG@8;fdUFBpn!slc~cu-mQT#u z!v5}R(^#;SzwGtw`(a~VR~S^Y^KkCkwYBGRVszDV1c~pf}c={N)b>s zEB;A06=DPG0;z}%i*8tDgDRw|2!bl5!6|X<*zqJ|JATcK$8+c6K_K-U^5ai0@IH_8 zyU}>^^NH)<*EF@5ODBR5(fepVS(x45EhnHS$@&EGHZs}$6j?COp?&O?xEhe zKp~gGZlw%WktGoF01zue;8PG-%=ZN-Ay1u|TWefg;@+JdFiAq^%EWoQi@oYLG*v-> za}IMb#CU3bLMeS3(L?*pFnb?4j{DH#9HsRFWSPOT9lUF{@nN+BRgn?s7$)lHEu`Wx zND_r<_8(TaN?+6UmE32;@q`XW6J%2f1nP|zHrEPJ6&Znc_ZrPh1C$Vyi>ufwu7Lnl zmf1d)D6Q@8Y(bG3j!)0fzZqd-*;q~|5SY0x{%*B#cc+YWA`ZhGfDnRIB8L9WsK%zY zb6XE-xOZm!-iHd5g}K2_Xam zip&tZ6~S^kiH(&UM&l_0Orn4g@P&ZKIhaHnG#-l_?p3#84u<&k_cu7Z=wLLN!s8qP zRgvL&9)uA17a@QUuxtmKrXI4%)PAO^%A@L5iQ3K#U9*S38Z9_87o2kt0FFC{?+Xx0 zAbbHzDTd>TpNvJHvGa?|SH2L>^V!scR6K@aA&+7q4}k?CAcVj#ua7_|f$hwosR}&K z;mq9U!}0VLBb0&>a&U6iT0cE+f1J;zkcveS(o_&a;BgK~l0XT;&1j5hBn-=PUS^Yt z14;_}@SI*Ksvss31oG O0000|WK~$Z=y=xRf7{KA*J2QK`x0fg+U}eB2g_YXcr3gV|k;Y09Ewm7VdaW@b zAcCA&S@;iF327Az8!g1bKpL-6$(J7H5|Z;a+1s0)ap8nSj34oN&Fv|K5^qjC(eFZcl#yUuCIh)@OY<|`M?lqyB8$SH8W*i{ z9Dl7RG}5x$s#n6s+uf7v6>l9T=*iM$5|=CWz0$YtOfVD}6G1gs@%K za2@C};x~3ZP&KFynb0q|6KAz&8sRUUcI!>Q+rGkx-+cd(1Jt4@Qj(^WyeEV}FVE@a z`J9=t&sS$>`4>r>?Phap&}y9qD!>rE%nTtj{G+QZ=T{df>h1e-(wNNn8Ihnalx99m(W+fE1UN0Gl?`Dl)Q1-Wk zB8Q@m-HI@ck>?t;vuwhi8yqC?Y9i@Oe!PRH-GK002^c2eT*b%?-&E7hk#c|U4Zc%u z+Da<5J@jB?3`p~*I^YZy?$a@}U9@~n{&3#6!#RJ=Z$$zHRW>?770piJ!=Km`;~K(WAEpq(0M zJn~7yL7xq*Mney!P;TcRwAsZ!m>7}85*rywZo7*}mQ4iP!gxLVFmp>!O}>c97cu!F zCSSy;u?5`7X<&)J&}NtD=?0p1O{4W&I#fXwR6!M-fsS@)3{T0`6T)Q7@eJ5j03TezS382X=!`UktQ@T#23o*$eT~!UMJH_IUry%2VmdoWP0fx zkYI8NkemV%oL!*!1L5=(CnWWNXRC$>mj(!i|Iz#=<@R}+jpKWoi?bZ*uw4*9_#4GB z-*kAg=HYvqvGqlt^>YKpT#0zNXt;eLLa>Zzje)wEhjlTMrP#(Ut$W^b?NrH ztX^BDK7AD@%zw>w+YSE3nuyk331cnB!f+T-u2gCN{Ej;8>~k8{TB_wDwY>_~TE-L; zYBg#Uck>JeeMS^#(CZ$so8O_;Y@oauVI<}YnL93XmlYy_Kx|rw`NEhem`VytgE5AB zt%S}#ikn_DQt>&3(lDQOINY~j!3zXype}Wn#~hvMTY^#`00000NkvXXu0mjf11{v! literal 0 HcmV?d00001 diff --git a/emojis/1f3d5.png b/emojis/1f3d5.png new file mode 100644 index 0000000000000000000000000000000000000000..51841c57941b8e3920d3172dbab70d5717531dab GIT binary patch literal 651 zcmV;60(AX}P)jYfkgiU@;6g00u+AcD2f;<@}~`KKkZuvJ@NCkXL;kF+2N z*s3j{>#^m*hnRl}9hSINq9@Zsv)ROP97KdTj>%@TM9pt#eiQa0xUP$cV2nXT$mMd_ zBmq%qQifP&Ymq4U#^F}f zOCT;Hf-#0{c97!O6*Rm0S;eirVa@F0cyFGh9@5o=VcO60q+(IZq5t$H1_~E(Ges1; zrsO&0?-45-27PFRf1P(W=$qTbTY%z`8Qe^f4#jUhG?-NLlxl5Oss=q&K(r<;UoSB} zP{r>2AWb)d$4q7_mi2l`3FOYR l>o;r?%mP0DCqOc{e*w(R^-i!KOk@B6002ovPDHLkV1l^mIYs~g literal 0 HcmV?d00001 diff --git a/emojis/1f3d6.png b/emojis/1f3d6.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea70066797b7e678d41e9884280c558057af59d GIT binary patch literal 612 zcmV-q0-ODbP)V5W$JFJxvyMjblvAy1G}Kn8vTA^+%#d?m0FK|OSet%R=e2ls-X zgO5jP>2Aey;SAP`3Btn<=-F98va6lf-_rzZo5)kx#N+?MvAZ{D>+fR6m5XGpbt3m3 zLN-e#7{;6U$)GpEzL(?VDdY$#>3B4PzNZfNxzpIp@#o0+26>st3a-urbX)WI-oC=7 zkmImo7z=*XvjdPkwYA>4}rG;*X6Bwad7mSoAw00PcmW3sB8ig1)v$8mhcb@XIm zEuO-rq*7>XM+jz$B}PvlWsU6wLomIXB%?G_J9vp$oezy|$V{4KER4fbLtZSwZ-UQ# z1K1R{ku<{yRi&u3oI|e*1wv)U zTGAgV@;_rP5~tNE=rpG&L_6G6vEEi|xK7ruP@Y-9F*}MHdWWsjxf^eZNg)zpYS+6` yw~bw%J8E>^>72Tc*a(x?TRlf15@9A(zI z4E>r&cJ%`;-ywkRMi~1DehnWTUQ~%>*EPW5J6de$TPq6nr)AYi0vb)Tv6Drh%uFH}xWCeDeDaqNODE<~1GnZ!_PNU|`Qr)EZotQ)tbq zzy2Wp;yHze1VM9>Sh53c7$5{*&rTx6JZt{EL1;S^_8uTKEvhYTR9Cd2BGY-={=N%B zP}sMVu|0ikdvp(LVhk+}%A0@09!V3#;%LLb@IMk8dW8rAa>q|1g9exJqbEQ}I%*#K z`%ja2_Ly2MPT({U&1FGD&2{ms6{5KeXzbaNxPvc=rQa~yu^PgV+_7I+ z&Kn*e-n|2aP=RbpRt&v&dH`I?buE8lYfYmiuj$~*du9{(%7aXkT#1c>gRK{3t>Q(sV+p43rTv!U7c?8}YTF9CPvml})|a@86-k5>7S+LSR@9D-Zn4 zH2>b=C@_HVd50TYk8H4q2TejF^0bj}9+?0_T?a+z%E@h5!Hn07*qo IM6N<$f=6*o0ssI2 literal 0 HcmV?d00001 diff --git a/emojis/1f3d8.png b/emojis/1f3d8.png new file mode 100644 index 0000000000000000000000000000000000000000..f477d9b38a9b2eb5dcb311f0bab7460c69426dbe GIT binary patch literal 784 zcmV+r1MmEaP)C~ebE0RP&OQ zHZ$W7c$=}rHPXMG}KS-o3`jUT~8v^=@zSfbM&T`vf2NXhL&D#Sqeg_Lg5uDAeTj0 zSw`mF^v(Fm+X{)apTRi~vw0`C(*d64bX2#6P;3^d1tFMFb9@^8nNh0>pUXvCbew$+ zPw_hobgoIF3W=^sI@jIBEi(L+;eV=yLT}CmIiTLpa&Hw~Pa-7Jemd7A8UFT1j8K5w zw*7qnu#vstVP2>37Ik`_s5^^8NMzYY+L9WzMAY~fQ!DT~6|@o*RbHAdmTC6?NwWcy zS;_QL!QY+&k@5h$>j%KjlPN3wM`#6c?3be*rSfD9S#+jySt${85okg5F1ie%>!7^_cUfIT zT?G*eB8{S5m=}@7nCmZT!A7>0Sli6y&i;Cid+Ny9I0+N{d?XY}UhfSA!+@XtF|`m< zy@6mD@Z(`uO>&D*sH~;fgI_dZ1^Dr>t0q4erYL2W$i^R2UQ4nEzhakSDuGp8#~}@i z-|y!@gmw&e(KK*q4L2?)xfMHy!!8%t{Q3^ipuyKaNcX^TRDNZN{K^vLLJltxn0h-% zL$jk^_{C;2j+KsasVhP$vy4MUCntzbPVi>t4qh4<8(K$+AR-_N5n;<#EPn5!$)HJV zyv`49F#BPE*upbnFXo|P(XeWqIem<47i=D;&*Cs}ZLFq9%-p7y&(PP?NmI3KqIHq6 z5g)_B4xT5sx&QhoT}Rkq;3{T+(4ULo$eE`|WCCcdadi8HOxEV*#~MQ?prM5(g-Zj= zX^YQki{1JU9pK`q4-r~KKty5S8Xxg79PHrUQXmN1wrz`AxkTkp9s`%wFh1hL@vTOSwXI35+O%T;CgA6vXuOK! s literal 0 HcmV?d00001 diff --git a/emojis/1f3da.png b/emojis/1f3da.png new file mode 100644 index 0000000000000000000000000000000000000000..d036029ee9c51e4538801cbb8d7b7401768756bf GIT binary patch literal 626 zcmV-&0*(ENP)ff;JtOAQ$mHk4|B~8hjID%fYU)BY zH3)oX3)b$A4z^$m<|9Cq@^Qf7AI!!?l4`2hreRK88_n!H*q%&Gy>~`E)q8+T6>Hay zC_&$fuI+Ak6XV&;z({ur-94RYYD<#VQpG{H0>MWtkYyW(G#OQ}|RB@;U8K zHXVKNxqNF~xC%J@VMd#5Ry}3a!* zMJR}X*_cS8Ds`q|J{iwu29BhgQB_0)R54AHbZ-}LU%#Uv5+XZ%ATjkmcg$104^pza zVi9~}eW~q-)6LwueHS~~#HA}2$j!~;i}&{6x@&~PVTSj%5L)>ed;7srDy-{04ODy& z*GC+n%}zE^zq1|%tl9{^d@he^nv9)0g^17>k2sxP><1MV0fu34@$z|oQzhQnfp2bl zp3`Sf($H8>HG?VzCr9b)SA50gJjLZa9qB!+7E8=b&Z4RW83d`a@^OKplLHY7i%S$1 zmx#uq%uc@K>EmapDnS-OBJ5~y!!Rv^6c`#gguCh@A_Q4%^2$oZws;($r~-;lRB7Fv zVv~4fm9-K+Yh&mP+Sqb)-H^eeVG!gc2JtP1LIiou`v=w9b`!Yq3q0n>ZLiZp3IG5A M07*qoM6N<$f+vd^2><{9 literal 0 HcmV?d00001 diff --git a/emojis/1f3db.png b/emojis/1f3db.png new file mode 100644 index 0000000000000000000000000000000000000000..036d4dded923683f767eff17105e2f02048b6090 GIT binary patch literal 506 zcmVe5YWN~JZmO52#Cl8ZBwNiuUxz=dRG&GX2uyZ7iPh$iH8cJkOI zz(;Wo0k{f00(}0^LV$sUh|B@! z9oMrf-+xeV{K6PR&(CU&;dt!Gt{r1{60z821J^L-wg?T4NK)VfFkY=Ua9j^762Tf9 zrC+__(CGyGlG}%`i^xUbux>bx=eW(4APC0!2d>w|^_p}oD<$sG)X7tU-)ep7gyFg3 ze1TUlpJPR1MB{OuKDbYDzCijwhSH~HUOan(K}aN%v|FvYcFQm6i9-hwXo?6cAB!w4 zE|AaX$)s(*elF3IN!wI6%PcJ}kjrJsq;0x=0d+$vHHd|*4+|VNGp%UKmABnod5s;07*qoM6N<$f~PmDRFcWmZBzQivoj!vPHRxR#Gj4zCaMP zsFfLgfOgWpps2P5LYssrT7+PVBE3{FXLKI-UgvR6PB|f>`TL1GuV!wg+dD@AhfNk$ zV)z7j7zF>}gSn^D?VV$Q&87}9!lAcjnAVLL3@4 z!e#2URT^UP7?zcz5=>GFCTUPghn)U)pA*aD2&3s(f5$}kBbMAj29_V=ti0f9M?V56 z7t6$x1;X+Zs?{pVR2p^l^APD^mZpgI8J@jKU`5GAY+M~6Or z0r*r{Bk%)~ZW1LGM;(toE5@m|ES3-`_HePSgPv3iGk%GWR*r^Jp~R8ab_O%8G)bei zW*2TW%5krSORZT1f7xylB_&Np>$-JgC!0@p>v0xcP;8r z$MEbQ5JVJo3o;Ouq#~jOp|p_POxIe&=c>)@tUJFn+3=8uJ|A)S^{;DTtvYSIh+-9& z2wU;Y~XJ56=nNv6hCWY2+%o!Z8Wq;g$^7Jss?sql!Anid8=JmbeiH@?3>aqIyVP6JBj z*w=WL>K*5Bq9;Jeh*YeigFJr)MJ%(z-p0!`r|z@6p^5tX9Ykm6NJN|Qy)h<6?~ob0 z2N}NCI zn?mUd>Kkq%q=j^16td$G6hSIt@mBKgB$6#?yP8ozLQp4k9aSK?pX}{6o1vO{F(RxG;yn@VRFIQ}D5C zcY;uWp+vKZ1ZFK-k{J$lsRL5@xjo_!&y1z~U0000< KMNUMnLSTZFn>HZ; literal 0 HcmV?d00001 diff --git a/emojis/1f3de.png b/emojis/1f3de.png new file mode 100644 index 0000000000000000000000000000000000000000..776c2850860931fc90c2ed66d6e561c8d66f6c5c GIT binary patch literal 667 zcmV;M0%ZM(P)jF35wWn5*xOiJO6ghP+*Uo?l853K$^g>YlBmx4s zq|MCuD6P5oB<(iUnQ1;uzQwIthpxXTqv;R@ zj5yzq6#D5hEO9R3!PsG%!32K3%;3;o!go)|)aPr2L7j{%4Wi{1ckND?}V0 z-;GjemvKpp%*>}Ly2R^2Nl2Gr$#ms9B9_dTxqH-_8&NDn!sZ(?(;q50Ygs13ugv7LBZT2BVepz?&3kw8SJx;Onrz;-0m-dL^h)r1&`|{y z`(#WMKBqQYC8Goo5DjtKBC=I-Bj<6sVZ7)D=Ido}A*`Z9lQBvu`Um>aT2r_+hj|$g z9U3O>0nhW$jdP?c4q}V@afLnTg*%wwBFF+6Lx=DCWYS%$ahvaO_$e8s{6rT@n@%d_ zCv-S}3-RD-Z0|nMMgC-h3z)`P5Q|cNnlElV`5m-364Bzs@kIat002ovPDHLkV1g=s BIf?)P literal 0 HcmV?d00001 diff --git a/emojis/1f3df.png b/emojis/1f3df.png new file mode 100644 index 0000000000000000000000000000000000000000..2e72fb17e8a4e0a477f0023869fb8b7874492735 GIT binary patch literal 754 zcmVEMlPq_ZgL+Xyt?8$MyKer4B-aB=e&HLM=Oq~xu zJ;cW3Fn7Isw4x@`tDfa}?^FJ`vPNNkliZ#zLO&u_iX*dw9Da8%X1BrmUlpV#Dg07I zJ!&x3y@ppki%y&KtWMwler}xqlj)C!>6*CBrS-4z%oZg1q>WA`Q-F5YNa|u=24UaFQ}rFB9qS1lX{b$VUv%)IELAyQ>n!yblMaV z^S}PaJIANlGnS!W&T=rEVRfyD)HFs%M$j}#q7{bRUAa%ss3aljcw8>iXg0ZU@iLWa zl{*WI{Cx8kKVG}R((*FfJ3CzZ?h2mgvA$742%eL)Z9FTWP^ehZXf|;im+hUW>?&_P zp;E2kx-J5NQV~0iA_<+gRc8@KE&gkEV^}c?g%pC91VVt8Qj~*-_yhNNRI8ED0T;+( z)_G92--A`+x6B0$kfJ?4R0z?yEbQZ0bZE>{YfodaB6P=qQVPPu4y9nEeK kr5u8|4k%vXBGPmJ0|A2HE=7NYhi*HG4C>%PJmk7aNd%b)ZaOD#n^R|QzqWGp8rH4PhySYIKji864|(_p zmA?pt3_Uh+>#aXHdbd=xQibhYg;S`UA`mk4XgrZlnpeVM|AnryqMN0nl`3rKDzs5) z69^f4G@eK&%>iS4M59-8;dMLpvZBXImX#{xa}{h;dMLpvZBXImX#{xa}^p?8v6Z1 z9&_UMyX4J5V=Q$;%H`eaXp+ZBodcaid`25(g z#^h3jnUx?2m|hMuy&MJsGb=$Rmm)-lHKt<6=c?61NrQui?8dqk^6hQaVPLScLXYbJ zBwX&;=O+n0t^=9`5bECB%5Hos(%`^G5t8TEKGO0y_?eb_{;!-y!A1gen?4rvUYfF* zRkE2?nilh3<~Dsu{-j`2mx9@~KIXGN5Q6oE4C@OS5Q6!vkJ+_8>QZ3mz(x_0`&Ylv z;i%E>PTvNVV--b6>>RX+x)i{Ti@W?HKuTIhJw<-2NlpkFUcP$$EOI^gM5t%ZVso^& rPt(~>7k0At{pkINPcI%leDL%KJXg2t>V@Gq00000NkvXXu0mjfv-lez literal 0 HcmV?d00001 diff --git a/emojis/1f3e1.png b/emojis/1f3e1.png new file mode 100644 index 0000000000000000000000000000000000000000..923af654a71d5e5a362e666c3dd6c034a3604b6f GIT binary patch literal 751 zcmV!A{~cP~sRQ7=ZAI2!gFtMFbFtp==;3 zLaRcXj$L8kF(M%Wf|(IWgkWHSArY-mRke^1h;RZ@Y?BAE6Z`I8$D)uTXg?p}f0+J& zENNO6L73tbjbdWtLk!$d>^JQ3pi{aHI~8GQ=Y z>s{ZhISVvW<5c~8yK5^YEbhH(qN+3+ePzmCgs(c{+DI+x`6*v5E~_e#`h+rsY8z!MGL>cU^t z%+Jj7^5J79UyQTZ-B-)FnM*QO3h)nOcdRAz~nNCJh99nynM`I7T|GXb`Ke%)Ji&y65bn%)oTTxq-Qfp^RE(;2CIWQZDu4t$9 h<~N4&IX+8d!`~9)>_QNPWh?*y002ovPDHLkV1g1NV}1Yt literal 0 HcmV?d00001 diff --git a/emojis/1f3e2.png b/emojis/1f3e2.png new file mode 100644 index 0000000000000000000000000000000000000000..3fcc0461d00a380e9432a615b4686b2d412d97a8 GIT binary patch literal 525 zcmV+o0`mQdP)}T;Cba4_C7gL?2U>gxaHMBW$NiKKy>T3`?WXtogDzW>t%Q8_|ZExPZ@mhc|(!2l$ zETNx0>9UNJ?1FgAU#5>?k0tb*vrVozW97+QvS5JXZ4&R?uMV(2j@vu2o4f=RAXq4Y zLU&tV*Nx#F5VJ4=Ufrt>wgn3hYyE9UiRZ?!2Lvp9mr^{?mm1M~pu>N)d0y-f&l3I- zAnLVn-_eQ-t^*%5&|!(;OfsGetg2&ZvQ(^RrR39j#I<0;`CMZKOgS3OI2viJjVPy9 zcS-TE>Q2sa>a$fJp(lmn;B<{gmw$4U23Q@JKN2qLPd!eu2x}uqIXGS8RyanoBFTy* zE7DRJYP!IcCB7`M9AR*!!B+;$l?F!`d|6<*vZSU9q%deD46#2U)CH|dh84=3%rUh5 z5-W5Jq0VW^3@g+Hu|GixgH~luBmG7ta0sUbmghp1DGds&Dhe-82(tvMA{CAF7pnBo zvn>03*!yz3xz*u#Fv7ap3`i$42E!CfH3RZ_#*bl&W!e#ky%X-P-|77ZIG&vw?zmQ$ P00000NkvXXu0mjf;5X&{ literal 0 HcmV?d00001 diff --git a/emojis/1f3e3.png b/emojis/1f3e3.png new file mode 100644 index 0000000000000000000000000000000000000000..c644e6af1f630cd1b90a2f44f713e5d0a3074b31 GIT binary patch literal 665 zcmV;K0%rY*P)jUmLV$tJjhn9E z@SNis@B*-`qSqHT(NH&a(OM4(Tm}x{5EhB>40!1r*DKZPb8D^RKi$837Y%LM?CF-& znmZtZ2rCHA?FTmy`2HCYxyyfgPycRKNCToif2HN-EkIc2__duroXd9(7yINI@)uXLKmeQmk6Ic zBT+qkkcO#m(`%=TMIRw%k$&`ac&E1RgcbkT&K=vgbhPJasBhlDYLin_7vFvObj)EM zg1avdhF{sLQ=)L>GZ8JBR$?ne%2G8RiBMT8#>4j%q7-|K{tOxY8B&TpMv4*Ra{-Ajah5l=b;KxiAclS6B$32` zM_;B!XH=&(FdSN6Cea!gj&{$}78t0&Hvbm|T_O;JR#>|AEX!KRhlYG;5MbnEk;Iw3 zZSit)oYuiiAdQE3@ige&$x&zAv^&-lHx@5Wbpnn9VSxrNh0(U3*oLooi5{!8#z99 zF3Lsc`8RX?X~VsF@EG5S`Co2x=@ob*O>gF zj|im$@a3fuJbjd1EWq0pg8;$9_7+$Zf+v%brb}mF_KBTbzoED`co}R>t1sXF`U`8}i zMJr{rQYMJ%=P)T}4DCkf`LD9ui z_e^j73qeF3`YSpm^tRdy;z}CTL05WHsbzI-*7>yq9#qDjM+ouY@zb#r11HDT+=5V5 zInt@$=3Yp&`v@S=^=z-AJLaN)Z79AZN;FyfiQ}FY+Sy8 z?>GcD&y2v-8^RduaJ+x8;p(l?yKZyq>A#h&)Y_ps*6Qo{Q(C8@#q8)l+O)o2n)|-I zRAignxp#j|gbY>PU0of=GCf)TV`eu0?&JLYXR5R&ug;%4J1&Ayl}yB$EhYKzO9<1O z*7Rq4vt6Bsvs7u#B}FtYkG?pFz+k=L`NC3>P;HKo^OC&!=Abp)XfKLlkC7(LkV`1b zfXM>8D9iA<*i<5rPMADfw0K@1)Tu`3t1Z)@JOY;Cqc*l8Jo)M%z;GkDaZPVp2;;^z z)2kMf1q%&~cK$}05zRnqlR$G#1Sh6waR_xF21vng1$OUt3#-?4bwkNrdB`$1F15~HhiwN6$uz z9;2_eOiR=wU>iQl5N2JwlA+2r4FYA)=hM#(b}D;5fu!kU+7-6V`~#p{o*Cybi9`SZ N002ovPDHLkV1m053|;^L literal 0 HcmV?d00001 diff --git a/emojis/1f3e6.png b/emojis/1f3e6.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5aa7eb48ec9dc223e72106fb5a02f8931f848a GIT binary patch literal 611 zcmV-p0-XJcP)hx@K6LH+O&o@SKHUgC zbsg)FY+G|yy|RWwC?n#-0Sp(DHrLgu-@7n&u9JxH_T7hxN<};*vY!ChK?|j{E;yLc zU{464JsTbz7#%yCfXn5AqbC|Y@&04-!SZVQ2HW->0I#u6p1(MbhA=?$rfELDIyr6* z4V-~e3QbB$bVpC3w-&&_`1H1 za(TO;Y1#`FiG-)55IP$6YBl_iNH~lJpJmxoDry=_L^OvZAfhGp?MHT65aB3n=4n-_ zRPXQX?#)`Zohbg!!|T&guh&s370}A#@j)qtVqp_re*gp|iD+I4DHcLO{}oNCM0({D z;;|7FOC_XINwm6rsT*F82kF&iB;uoB;4^>)HPn9!4kCh(5=OueB8FvI__C6MEsXjK3JI)J8UE zF!Q7k0Py}DWSMUYw3wY^6 z$PR)R!HXXJgWzTUnF`%tOuFENmJGYNB}=!?CF{@T>aEM?qs&#GKh(@(4KNr?D4{Ae zvseQR24^Tx6M(_V8G@A5`?Dp|5S6k;rEF0;n?V;5m9j-H6BBm>;%-1elPuT;l&Hgk zJ;IHtbDWCzxqiu{QnnEEN#NPrWuCtN#KGYazjyZd@V&v(io>=ave9g_`0698PK!;~ zWwA|mA)-6Ac|sUCofRnXmWS%3fsFKhO(!*b#;>W-+o}`bXJ`f`JpVPq2qc1 z2|?eNwVw>o~wpnpn+`cx2>-i+aaj(bM^-eqTR zACM#z!1a8_M@J~+bfkpoiBY!x1SHfbK4!))@!;M(ilXptd7bXx2z$&zJEM}Y$1E-u zhq*Iu1Q2p^p^#7oLIxK~c=Qh*$(a@d SJi}lB0000zBhdMhQbf0I z(eIUeFoF%T3703;ZibUJ-Zw&&ya*?^|1adfH}BpCj`206uttZOFZR%{yG&+Qm@D=& zm0c!pCwNdcnXoFzJ;&8izDW^|D5eJs#HCL<>M=7^pf~O^(B+UbtLUP#^yl@iuN<*^YVI|8if1k&0M%bTxOH6=wh2%~bX!d0XfH zYKj}YB@pb&a-UpvJUyot6@8mv7O8VtTMZT>7MA z9y3D)dgCqwT@E?3iY}W-uN7vYb_xM3)=tr;fL*~7I*>D~EPc?p^k)R{0FB>9*O*A# zw8=P)yR96u?ymi4ps{uM{9|aqpe*)*(?Li<>{dxcZ002ovPDHLkV1o52 BP+0%~ literal 0 HcmV?d00001 diff --git a/emojis/1f3e9.png b/emojis/1f3e9.png new file mode 100644 index 0000000000000000000000000000000000000000..3b00df211fe1202f8c005baa7a46f93f50148907 GIT binary patch literal 769 zcmV+c1OEJpP)h~UMGLFlFJL0Sr))Ki4^;6-ThQo$-hNYjGY+Su$S`=>LVnfHEnX%YkIl^bNZHlh&lq9?|swiuVW=Fn0%ka?`>0J1h0V|5P*GtU# zhQ&(E@^1x}#v)cD&BeCIsd^jDJx&nd)h0j$Z+sLt4Czw{^I^)kXBg4KlVQq4&H@>I zIVI@W!iqBrkB;)ZHJqPrUgd<_ea2-Z&<7dXEy?t#v)cD&83dVLMcUuuJFNlLf^0}yf>a80yWR#DB;*d zkAf>ybC%<^9@BY4Juu9d5<*wdkyU)Ttx>>N+nRyNoMjgh8`=X5P1(xO*uz z&m+HV?4mP~Ig^dW&*?&|MDq(+&j%57%NoMjxw5r(CosbQP&?c_SsmM!`{uB;{&1SY zz>kP_$n5LkgKGom*0m`S=@1b_1Q9_*5D`QKMUAa^y!`GwPA-eexVU?}2_8)%i8!lK z)D$mYq50&uEdKN>nJ@Q%F{tJy8n$j`HHw=2u_MGgK0;+P_+x+b=IS31gqXKwR-<`m zp>%TyZ*&Z-#TyyJ1_9yBEdKa}tyx|Or*v;m&!-J;c714t zv^H%^MhJ|Max9Sr-v|lEHcjp7rtAl#G?YWo0tro*N~V(Bn04vM&NwKg&{VZ2BOpMFr6m!vrBO&YmV7*-voWAC zX814z4M0r6$2lmZS)pTt!|aR5T~0WOyB5+ zz8Z-5LPTE`eIw|bp)W-I4<>@Iq`pyyh#N{R^i~hLzQPk4k;~&JOS0^!gv{bl9*!->K1}x>Pw0>PAcm7ch zCk1!NA?`wrMRdZt22#@T0mU~S7M8cUHn zbPxV|8GG&~%d1`fi^^SC!-HgAIt!BjC1&$~4oTGC`k566f`BUwKpzKy#G%A zHInfN@6MedECQxWX+B*V;qlZamwtJO`C1=J7hbyWYy@4uJpPaRY zC47!Xn)HP_q>MI4?OlWtFl0B$ntMb-ZH`4Zi0e(V;Tp%I8wk}$n3~5^so&{0dU-Ze zB4;&88Xa<03sd-<$&|2!&mpkQi!OwB{Bdj?+=PqW;JaCvcr+3gtL ztfjfUI7;0M@yXH%SDXPB>KUf;&vUIh%oXPpQ~4LDdj`T5F6Rek$XO@3FnEjmdw1v$ zw;74-Vv8=X3_A3MIt-|ryg6FrWX$2Pxy=K;>)66Y^#YAzGfATx;*W;S?T*geqQmr0 z1=?Rch;uLBbzAxX08wf;FZ{|OK@T+kveumEY%o$DD9wBbFFksFL!g&74i?Q)-A87A7=@#o7RUXOS!&tB zuwB*{V&~7%qs$t6%Yx@mEY_J7&Fm$a;CVv@4CyQ_`aRtQ|nTW5!*w8zKjYaheWARCZP7WcWRxwL;ADQ`K6pn6M9Fs@q z$b20~;b>=3-08oF32KjYGLNvH!Vyvx(mm4%LOTZprGjFMOxe>+uEq@Am8nr4-#vdRWPts&?EC2_r=TWPaXtCDP iu2HK}tCZ;E7XAYAl&soWn~;Y90000$M*}Syl}Q87G&WM|DTHcmE|6IOeU`xe??4z48!MA~rcX zM5O11#B9tK+KtXa@Ou2-v{6ny|0SZoKl8FD~Zy;cX2a)0!!O~yoc9n=h=`iII ziR;&JW+pkI#IMd1zd8>n5oczS#Pw^Ka)~bI4byiCm=)hgH@EQbKR~OyAizQ$AZ9DQV$W7vLBk2@cJAy`oh-CVR=*}J;u8X9S=s^vd c%>eYue+D7_DhoM-#sB~S07*qoM6N<$g8ETrm;e9( literal 0 HcmV?d00001 diff --git a/emojis/1f3ee.png b/emojis/1f3ee.png new file mode 100644 index 0000000000000000000000000000000000000000..82f8b2db3ab5b73b36de1f623fd877b1de965296 GIT binary patch literal 459 zcmV;+0W|)JP){34 zIQj-G^o4Y2X(^>4i<=5crI9QSVk8OHyUQPwyXy@%bPDF4N5g*>mr7qr?qUSr_rKLH z&vy|M#0n{0e;IHk3^0-gF8e86uMfIiL^MQRP2@74=3aj`6}RyWPT>D2H?H>n^t~<- zIhrjVE@sVlBta4+K@ucE5+p$qBta5ck-`h6hhN-gMJ;DcYt69B7}J_DRbI*FE!oUW zuJ?z-8H{gcBWUOpiN;6A;Q*Ar&U!KgN|2w@{Td4+LQP3tpDf{ zk?WpwvY(%Sn@-7sP(i35R1hi%6@&^x1)+jaAw*F9aQpjx%OCg}Vq3;^&Mp?~Aux*( zG~m8nzb;hVwu^`$_RDLzZ?JF*UeArI-tMmBF(=A)eh?hK3OU3Uo4CpLTSasWJDSzTKdk@Ga6>Uz&=wb}$B`{?O&6iy>D zuBtRcM8;8;1f8@h+5_h1p>!%PG)E!s`@tw^$=<$xr2q_9U2hWTpgDP9n2?=#@seGR zamuA1ElP6)TA~qgfU3Qe@{mAtCefBbXpWKzAg9J;jrhTUz=#5>pbDy>3aX$As-Oz0 rpb82IjEL_aH6n5!i1PoUB9i+FLEgfv9irf(00000NkvXXu0mjf>vsSk literal 0 HcmV?d00001 diff --git a/emojis/1f3f0.png b/emojis/1f3f0.png new file mode 100644 index 0000000000000000000000000000000000000000..90b60e9cc31254c15d856009a0e753b81347c432 GIT binary patch literal 551 zcmV+?0@(eDP)2C*9R{s4PQ?Qi*gy=@2F*frb#BI(3LXK?grc zbnMoppuj_iZXINatdm6ArF7k0HJP<`*#>rJ-hJB%gFWaX^gR48IWaJT>do|Z_4*aS za6AH}fnRFi?jnMD2J!^RaSR5g1s)r?uLLq63qW8DIgUYu2fzZ5QNS$V0rMg#Af_Xu zK;{8Y;FfxL%3jv!C*)T!l2*7 z>ZcWEZ_c2#CJaLoiWcAZaaNLaKH5hk+}L{UT>$Gmv8#LL%9#Bod% zMNDQV5E0rbjv#<;Y7)ZHEDlkr*4QW%aolbkx0{VZkxI43VHB_iGy#hPTcsU-1pD-+ p`$@dZedLUPit*HC+BAVLe*kNjs~k-!{ABO7zCUo5h#Fk^x8OCwS{GNoec_xlJ%5DJHqp>R0K?-XE4(~VUiC6FYLB#HXe$F{9QJkxd&bqESIJmQPXU+v8jx_n@tiM@imXr(VYtf z$BIw+PNiI~SIRFve#$bU@`c$jhq>qC+ifPzUkM}$BnfQIR=Wh$z-sYNpSfpaL!vgY Q#Q*>R07*qoM6N<$f_}N97ytkO literal 0 HcmV?d00001 diff --git a/emojis/1f3f4.png b/emojis/1f3f4.png new file mode 100644 index 0000000000000000000000000000000000000000..88631b0e1ae7b0a4523eeb908378fd7db824d257 GIT binary patch literal 354 zcmV-o0iFJdP)jiJ}ggr$Pn0D5M=i$P#Dh#6_F0Ztwf<-MhE%)Pa?rdLD^0bjA|{Exp4D zgpJwB_);Q1#VI6&XjM$P)^K|?YQ}oJqT_2fJCf1Cd-s7bN8Ie&myf(p%gvfg6xtXm`&;zU@&Kt%?mJEUmwKCL`2T*Y{9i=n$*p z9}RV2=v0{D+PercLf+o@DKm61bjr+-OsqyDR-<8tWDXfR7&^y%1QkKM(UGLP7h-jk zHAch4YC@Q5Kv}LBVtcPZYGjB*sWjT++$O7_+(Tsg0EHR5y0 zEO9{(Fw}seq+z)wyb=(pMsIEJj<#I?EH`!aCx9@=B8Gyg2GoWEDr!RkrWz126ix^? zb@eA?{*%15I1>k4j#;)(t|*ZyNK|AB61k#;W&51qZY|Ell^-A9d~H&jbv;sdhw3W4 zVhJRPqNHIJBz`(FySB{sUV&c+9s~hw?~?uSZft&hbX-O7mRFkjZh@hLp_3XJ!g72f zhC-QT`{bM=Jbw+g1Ga-_tzSk^5vq)H3T3uKMXpdHS19oZ+X36*n1Uc9q_dlIRM-xr z()=Tp2HT+`=Vs;+6okB+Sy5zd%k!Q6yqj6^d}ms3ZSMwDj=0(P(_{O|)nwkyd`VmD zPu6x8CLHe|kT^qUJTcJHJDfn+n4OF-CE`<@;y3RP=I`h^4ov_6002ovPDHLkV1nu) BF-iac literal 0 HcmV?d00001 diff --git a/emojis/1f3f7.png b/emojis/1f3f7.png new file mode 100644 index 0000000000000000000000000000000000000000..7b105684b441e3ed057efcf33de29d8a26323bb3 GIT binary patch literal 469 zcmV;`0V@89P)-z&<*ZST<1Z02#wO zkLMvVczzUgEPy!R84wsoZV@>sf7vUrTR_I%8o(nulz+VhyA5Ov)&NU^uXHHAUI2H2 zoL&vE6ln5?r!Sia5#TA{`E3y+1!>a7W5NJ)2s>thC5)>;lmGkz)c literal 0 HcmV?d00001 diff --git a/emojis/1f3f8.png b/emojis/1f3f8.png new file mode 100644 index 0000000000000000000000000000000000000000..1179a419c310bc4c8d3e56498304cec5777d040f GIT binary patch literal 718 zcmV;<0x|uGP)TTJ1 z72iJS(`sRT@}oUt$G*7H+nanVBHzT$t)k>=_hs5@pYYy)Ug_A^!Sn|;v>pkLE`vN!i&Tf3{-xzDww7k%#zW@# zZLRNo+G;mCS%!$dGEhh^4EHDdRD|mbY#ZvB0}FN3ZSHt0tNGn2i2$o~-F!&-ewE8k zBjPw}R2!Y6E9=cabaITd4`gJ#BK^G?u8>;Kl8WsrKkhuadGGI$ToO&^l89UqF}oU{ ziJbl#J9l`fKlkIdfjsWPy*rDAdj6B!eLKI~O!eh0JZ>}@*15Hn?aPbhc5u0|D2^+1 zm0|tvoz@4N5^eB|e0;6SQ)0o1*+dZC3sfStY480GOut99h)Rk7;lOyxL^2bZ0cPm( zCZMi@S&g@%N9gQCkmuxPP&l-jG{ApG;bfi*&iI<#{$LEZv`V`S^ry*Ut51LT})r zdzg4OE`?TlsmFwxvvW_(%y|)BRDeqYW+F%b0s5R6EPe&|ivR!s07*qoM6N<$g1x$5 Al>h($ literal 0 HcmV?d00001 diff --git a/emojis/1f3f9.png b/emojis/1f3f9.png new file mode 100644 index 0000000000000000000000000000000000000000..890d56f1eddd9f00a744c7945e1fde84108366ba GIT binary patch literal 745 zcmV&iS>xvD>Z{+?k~Xut)hGf2gg{%?M$1Z8bz;6`GhZ!iJLBdtKJfKAv`Uisp#YcxH z=#oNK+2=Pe%rvg8Kh{WtIC^n3PUdH(Y_oX~Xkt8=gnxwr_#ECl{vzDhSY3bDSsSPG z-%Ld>y|&w0^#rJkJU}+q;K~gD&~$aSHnp>MKXA?5SUhNc{b?)+{G|8nHAZ2K!We}y z3hNZTG+j1Lv%oO$0nRp)+0PbiWqwq|O^UdEA|4Tsh$qmVUYah`?(_p4JZC@wiuT;; zOSbakSP=M0@7ZgN!We~hie8$(g}^Ofl^*T6FBWWNepJLwO2+RC!T>FrUSb+8T-wQi zzonGtLCLqDUy2lC!LDaNDSvq6PR=iFCA)WB@7PcSPUMFfbTpJF7dMp8@?VnKuNEGj zoxZd2`dcqt9X~8tfk`bSa@=1YhMD?YutK%nl=-6=zCr_E+ z=E~8{di#n*Z@fY$S$RtNjh*4(z^iPdU20v=oV!8cJo+ZJ>RFcyYa+i~rd6!R zX<*McR@Xje8;#IvDfgM+=E{-s+wY$R?$RaU?JDe0%jB~Ypx925L{2|5G+w>DzSLJL b*0}FaI(9LCaiM2S00000NkvXXu0mjfCY)oB literal 0 HcmV?d00001 diff --git a/emojis/1f3fa.png b/emojis/1f3fa.png new file mode 100644 index 0000000000000000000000000000000000000000..3a128cf7bf84e09734e6b46302af17dc8d35de50 GIT binary patch literal 642 zcmV-|0)737P)4L=Fl2UTTgZXYN4SG^P_XlHpkid@$5Oz^Rb7s==kw^$*Q$$X%z&)MfJRW zKo1ZB1v5Jf+@ggW-n5!Uy@7wAJL3<$oUJ~1KNpUCsDxgdD!IU)9O?>eU`hKKvt-l~ zKGNj&u364cvQbs80TV-AK?q1;U%Dq$+}npu!+uoC1Pu!~kA7YwdqyogO$0HapGVtpHAS zIK8s2Gs7bHwp1ha=3D)k?`d~m;FEPqz82AyainI$2D!ke+DItWqC=DA`uVK$##rE< z7AvGwWxI=wT;TJ$8sS7p%$S;+r$5_97#r`(A*(tw-jjTJqY7gzaGnZHg^6+>ELy##&powo=AZQf_c*JE?k{+;A$#8)o{nP$6(iYHX&8 z2rThE#=q84;nUEv;1Nx3c(9k06L}aV+!0|v|DnR!z|#s%Y6(~ZQEZ0U34=WUb~j0E zv=YTsqL@k)qoN=Rq9DqYnH>f~{`AJojsh{iQ4BD^00V`4z)8UPWyatjB6$l6gf$~AvuU|?YIboFyt=akR{07WcI@&Et; literal 0 HcmV?d00001 diff --git a/emojis/1f3fc.png b/emojis/1f3fc.png new file mode 100644 index 0000000000000000000000000000000000000000..4132ae87c2855453551b6677d83c69904d0e5fa8 GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|^^N z@zx&P$lGin;Bc{CT`NM__t%tO*y`8nMb4C6oYeq&%@VDNPHb6Mw<&;$TI(MYTS literal 0 HcmV?d00001 diff --git a/emojis/1f3fd.png b/emojis/1f3fd.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8a7c2effa9dd5731f02b1ec0cf73f2a8fe5770 GIT binary patch literal 189 zcmV;u07CzXP)z>}NUv?`{XS0au)a2H1@6 z5p}}ld%EO44M58=tG&x;Q~5Ty+^6AoJwK?k*;Jll*HW*;i69Xqf<%xA5+qwm;^p*2=sIJXn*g3B`Tw!*DKX zwvCf&uYH`_W^wj@)0*tr|AOYflSz!2^Q`>_i&r04NXj8k3r_WiDsx&U7YO+s^33U( vy11uxje_+3OokqZqjJZD>|dU=|HGi4Dzm7>?Q|^z0|SGntDnm{r-UW|MPhS)SJ>UPJa%c0e3Eb$A2)Anfso%JPYX`*`9HW5=8zAXT9gDtwDc6Ek#4=5l1G3)>Ze*yYHtX2n+1IwbzUPpV&h#pD}uz#; z2CqJ^Y-}2e{4EDu5gL|#8E}Y>L`R}M8Svb8jFqXwqgfh4k$*5;iuinVB%lBaAie7- z%&b;_9Dn@2!gh@GAfy>WAjKe5vRH05>XT%HyxFRp`tZGg>3Ho_c26agi|D?c!J+8n}Lu23}n{J;y0 z0ttg>7RYKKzC0tzluBWJ*i^&XJ8Ex=uLPCnE*}C$aFzOc zs8Yh0IbZdiWENH3P9meOZ(7Pt!3Yopynyhv3Xs-tVB`u8kXE2Elc_5+ncAjGqA@fw pgmA3T!ncGqpo>qm-~eefu}8AsVpWJhM4tcv002ovPDHLkV1g_drn3M5 literal 0 HcmV?d00001 diff --git a/emojis/1f402.png b/emojis/1f402.png new file mode 100644 index 0000000000000000000000000000000000000000..ca7e2ae24a027239f272d6ec9aca0ff51b929b93 GIT binary patch literal 361 zcmV-v0ha!WP)C0uXxn}TT(_b85J{tF{j8nO@{qWtFuciC` ztyUOC#cYONOSq2C$DMr#nZ{6s`AXgra!4KTQu0Jw}1)QdN8LZcE zT&yO2bjasOza_#0Oh(!;R5Q{s4IU9UiF8yL$`^Q(p)qs_%yDC)ErEcc00000NkvXX Hu0mjfi@2Yd literal 0 HcmV?d00001 diff --git a/emojis/1f403.png b/emojis/1f403.png new file mode 100644 index 0000000000000000000000000000000000000000..995064e52d417176c11a588fe2ff8e5f60622ed3 GIT binary patch literal 442 zcmV;r0Y(0aP){kq z{Xy9`IOMCy%)?bxT*@j(qR8ub9ZdRzvM8)us@Kc4wbk3(y0&-VAd33ig?%4Z8ZZ1L z`Gk37^zRuV@@R;2!}|~Pj2=2tXnOx{*|jTURvHa0e8N~}o-E1U5Elmecel^He4%T5 zkLAU>XHOnkX*B#siQ{-s5~tC=Yv)cgv$O7x-?B+<5iwRq7}7L;XTm>P#g?{OcTZjD z!y-CR*qkMNjDfu)GJO%kP;e2W{_YvJ7Mdc6kikX70gQ454f zI!93ybdjJ#hoXXrEHjc65y~jU>@TDpf(~k;R%(s~z0FDUz1}Y$>@bFhI`#SBzawN+ zR7Pb0zW|u{2jal+JJ=ke2xywf>@}?upMh|-mR+MpkLFj7I{2J z8k<@=nemL7rvWyRVHk$^d15?}pD%pP6Y>nP>s|+J%6T?l30>cmPN!9`*Vi2mha1GnsTnM%(^W(iee-G<%naM?>^GDJLwTlQ zr~^+Ps|j64w)y$Fy5wTAUYweoJju-M0Hk<44x22?2yfj6TPl@8Lf4UtnJJk_ToakO z4Scig_!CEo3Nh%89}Z2-y@MTuaAAP6WdT#Lr07Sz=@AQp>Z zW_k*m7WjDX!o~BVWifIX0N-qEJ{l=43qn;@Xn_E1PL~U#Bk$4ks2jy48(({UeuzX^ z1-&gODBvACcl`t~hAjJPYs-V7P`=Oae@;XYu?hxe2>8v+?aX`$8AJq^OM1I`OIT*+ wPgo%m5pof*1mGnR-5?_5cnV;gh%Bu51N$r8Pg22HNdN!<07*qoM6N<$g6#VpXaE2J literal 0 HcmV?d00001 diff --git a/emojis/1f405.png b/emojis/1f405.png new file mode 100644 index 0000000000000000000000000000000000000000..df7e90018dd86c703adc4aa0cf6d37efab3df207 GIT binary patch literal 515 zcmV+e0{s1nP)K~(L*KWkG_7{KA*d(OFSdQE$2y{4vEO`G@+3wBT>M7xNC;2LeZf z01gfgg6I+z6h{&47jTJCq&SHPB5D;YHA7nmQL7SYl6&)dV`!-gF0MWg|NT3;cq&U< z;M=X^IsXK3^Ti@Nmsc?PkT;E(27lr9>=>f2i~PiPZloNCfeWUaftfjYvc$&?U6hLj zy=4t6*5KFb_|2G_=lDv(?H|^?o|Wl4j|nFa($<~Z2&13Dvt%-9E>F+OdC$-+74RDo zJ&)%2cI_mWnvq_2-|KRBEK7K{#2PD59D(IoI4}au7D14L&3%v$Vet!rXSwQG$+_w$ z2FJ2sgf*F7@GSKEFx(G^3NX+EVH)ZYl=8Ga1CH6LbJ>@`D}*bE+y<;QjFWH{wgj*# z4ZSI_28@BB0OD9H)=1s~6`+EWP(bzpXGrWG1QAxX0OJfD!aHEX@dy0?LgJ|iQ=m0f z-U16E@&Fj6O+H{CE=%sKp6xPI#iD+a$kg9phufAWf!%C^^9m_4GFFCJ7GcK zIj{}ov}fhL^Ng~p1;>rZJvyqa6U8`?8D}X1uR-Qf^anp>dO&Z4EcpNc002ovPDHLk FV1gLN-pK#} literal 0 HcmV?d00001 diff --git a/emojis/1f406.png b/emojis/1f406.png new file mode 100644 index 0000000000000000000000000000000000000000..901ae6d762e8803d034ce767042ae9c09213aba8 GIT binary patch literal 513 zcmV+c0{;DpP)5)XMDYQukmpTYKcM(OQ-9=ogxaltX zHxvYM5DIm0Zb5YQ4{%b1q8Lb zw>GW^p;k6Gm@k2!AZoX8t2LDC617{n3kxXEV`AA{yPUj(Pyk+n5}@i7!u1$%GCAV! zedzRv0UczJc9&>0!ks@qWWpf4=D4;p22(6sAa-*3AF-n0WO5(T`jVVGThZx&i37kh zoYZAz3%H9yoLoKz1mvQV&A$Oc;1dvQ5I_I{1dukrNF8JhM1U~!9^@)BdmuLqj^-F^ zL6~arM=HUTW)Gz?#FpQzf!b!K!3pX%@SG_tUqJW?SPYodjVoJ<00000NkvXXu0mjf D!BF62 literal 0 HcmV?d00001 diff --git a/emojis/1f407.png b/emojis/1f407.png new file mode 100644 index 0000000000000000000000000000000000000000..7494da23343bbc83bfbf8bd60175c070925244a4 GIT binary patch literal 511 zcmVE;>ZEW&BUa*5^@!~mg=!a87m_;33yY6^j zfB$poXFX~+Z2ao`B6d~2Th5D-C_gm+Eq)$?zhy{5#vD#1OkCTAP@)?T~k?4BS*y8KeD!Tl1wBLi9{li zNVHY@ms?NOCvE6|CF{$~8&y_4XrmG(_D$r%s$|G}I~s8YqgalYxTod?+(!Ce8zuJO z%;e)o&B&TDP1EQa!G0gxsl-uS3UMH1M^{Bd-m|3WGgC49LTCslo%dy#ZaG-B)aG>uZE_SA8 zhA02{>lp@o!m_1HR^Z3t1H*#@)0prHr9`eA9@2Haef|24MJ90*=Wr6k776jBGd=Td ziMZcBcsgZ~N&Jo*m_zm6JZAA|q1Ipie$lzB>mBK4mdr{U^y>fs002ovPDHLkV1hiy B=b8Wj literal 0 HcmV?d00001 diff --git a/emojis/1f408.png b/emojis/1f408.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab22aefe90d6e9c91d379701a7a1a34640579b3 GIT binary patch literal 474 zcmV<00VV#4P)LQ&GDM6Yv6qL6XP2p;DEkO_owHc04{Rcrq zV`EE!Lv#^T2H|oCLI@2(3Zchwcj6W5-Lv=YVG-#QF6i^|f91sCL;h{)@Zusi{YS%x zr(SSZoUMKt`BbxnU2{63pG$74PsrDUzl?D<@+OYe^jWN!H^u4jjCfb4PYg}WydHf7 zi)JDxvEsqj)LQjYl5a=Lziyw|ygm8o>di?mZryTMywy0+(9qD((9kfMb{+di-(36c zjXOI#!_M}$gVSBp*36OUd)jDeX=!O`jYoM2SB4Lk9(`qf8QYuw!pqW=0ws8XB6*ST(Pxe`Jjqq~_&3o~O(B7*}z<9EyC0FOgPNEbsQZ;)BCF~v_p4>;@70?56H5xHEwq2; QRR91007*qoM6N<$f@$a9zyJUM literal 0 HcmV?d00001 diff --git a/emojis/1f409.png b/emojis/1f409.png new file mode 100644 index 0000000000000000000000000000000000000000..a8865276edb6b611db2c1ebc7787ee0735badecb GIT binary patch literal 796 zcmV+%1LOROP)nbRPf=WROVyU3*7Ah1x z2!ePhcql#e-dl?Y5kd4&_28v=>7IJ=Qo&QD7m>9hbloQ1>?He@%*;FU&g0ZhK!p1H z(aY~G;NPTWyy4ahmxySenH3SfW5!Q-207QZFvBUsExVUmo#v`(nF5)?=HQG!9K8wP zcVvjjB%*VsWmZ(A?#QDrK8Kv`7Tv30ytDr61Cb^vy1h1*Us&!Q?A^Z}$MHELGD~x% z@0XADR%JmxQYwBRD_-?&07Zl7Du7p17^7^~QLL3vtvh(aDLKa2AA^`y+Dom~f?0UH zxxRfOn#6rM-Jg6_u*{}qnRxB+X;cp_V$He%+nLg15ME`;aGZ zc&+M5A;n+FsYsG;Ob;f<4PhWxHjt?`YFlxleu<;FA*8^J zWm*e6{`l-@+c*5JA?=RFCn~l14~Yo5u|%$Oq_eg=-lJ;0@+E*OGPYx*bENadU~{l) z5G{KRZ@#_MZsV!P03J$!@PyZ>M_!|T3*d_Yoky??ITL+jH30000=?-p}6|_@ZZ1Fk$RbfI5Zb7R*o$! z1KaG2*6y!zKoWZ8a1GcFKy{!B%mb&q;JFuk7J48E1qcuzK+tu(DR>D!7YROqV!(i) z*R&w(8Y`>OBZrelaTk#@Bk-^fTmf!H=TBVvdbCnI+uGX+K7QMzTm`BDzX;t7iOv-i z&s@F*%H2#SIMWa03 z0Uq+3N1)fhI#b=<9!tv=2K|&$xy0`GJ!V7!f0}^b13F9O@`8#)b90*4^!V!*eB;Gd~jZayYG1UfM42Q$Pcsyq64fxaW!g>t> z0t5&UkY{;f?i+C&9|ksYt|v*-GPAdF9G?L;gx>uGIc=Wtdnai800000NkvXXu0mjf DGV8#r literal 0 HcmV?d00001 diff --git a/emojis/1f40b.png b/emojis/1f40b.png new file mode 100644 index 0000000000000000000000000000000000000000..4d1d09b5abaf829a2a2bfc4778dcdeac312ef309 GIT binary patch literal 540 zcmV+%0^|LOP)}+_`uDpkoc03oR%N3*5G7QL9{p2rYzyR;?l; z=sQHvBKJX55Mp5KzCa(KT?B;$qb;&=Y}E0d_cV};2tl_!5C1=zxx2)1ML>`O7#ET2 zE-MP(JTuF&iQXaFBVZa3;G;$nq6krhC_)q=ib@m}#DO>v2jUod2l5FpAfo!rt0)H& zh&Q6eMX(vbP<^j1c`Tyq{PB|*7c7)>(aIHKT=fi@*{l$s1GD_iY}#yZF|9W4iOO3b z0x|59mxHn@q7&XMToYK0<)AL=Kpp=$IoR1+7Uy59^ACZ(?GNrVWEKja<+YcC-F|)h z!z=vQ6xsAu4k0m=w?ioBfGuE(Ayv2IN7@r=7SPMLC@pe?7SLiyL`t7#>$=nHzVJ!P z*x5@YMU&%7^WyXNM(4Zk_Ipn(gs;wfTH})>l`2OORnkiSrq*to`n0n7tGhXGW*z4} zW2Yy{8zUgXVbpn=Cr+(}5SEg(iaS6501??J2YbsRGUbxwTvpVzT5q7<w73L?>LZMWZB`O#T> e8p?8m1HS?Fgs8}sy&!G?0000#w2~kpN+%y^mx7C0>7YeHK@?F3LEL-| zjxIt$925i{1W{20p`(MK&Vop3rA0)EN^P}Cn#5i%?Y%y)M~05w{Qdav#MR>u$@dK2 z$YipUj_se+40&Bj=Gh>9YiydJN=zHyCR!wD*D{WmM#@!ke*DZt8RxDu;XcAlxbe)a?NvOVBED=&jvETNQ8tA3ZDLn%J} Y1L{TI(>%2jnE(I)07*qoM6N<$f(^b literal 0 HcmV?d00001 diff --git a/emojis/1f40d.png b/emojis/1f40d.png new file mode 100644 index 0000000000000000000000000000000000000000..f710c380e7199a303ffee8f642f2a4654aa95c3a GIT binary patch literal 575 zcmV-F0>J%=P)uRUgvUjuE{)4%)bA$^<>&} z_srD(TI=JrSGHgy7BEL13(g?x{SV*ehQV)bePI4-`|C`d`TfCqI#YA*%wKlw9gs$* zu$Oo?`G`DJGs6vA&aZ6W`StR<%iqVssn_l(3wIVf_6$fPOQ`6f;9!a$YJ@eHr^?^R z4NLjWGoN1m%vF~*JT{R z%b3PvHHYMlL(y?!6ot%PUr;s zIzznEJURQ&*-*{~TQR@|d{CNrt2EJ;CX|S;GW~nqw**8tW!rAhyQJf;8u N002ovPDHLkV1ga45H|n- literal 0 HcmV?d00001 diff --git a/emojis/1f40e.png b/emojis/1f40e.png new file mode 100644 index 0000000000000000000000000000000000000000..3b640e30190167da44dfe5cd6fb7fa343c3cdba5 GIT binary patch literal 701 zcmV;u0z&sU0Vlzsw1e>bG z*MLDmY>%q~v;*^bxT3Ddmoofv-;n8NsbVyN#c#16VrDRpLa z1%UB@gw9Vde0g&*`rgDz|MpPd*F0oFL&~_%nK_=q40~^=KSnx8SCC0$5<7TS~HT1N@YUSsvlu7}>z|O#RHv%&p1g1;5$gIMPdTt9`D}-?z}ZU0+Dr z_jX=yrelpTz0wHNs1c?#!jwjs;@9EM*dgs?0M}QGva(%xuKs>?A jIi7Hf$K3!vVGM7cfRV@C zTtsTMY??Mz_@t7$kzUPaUXH$I$I*^@dg|s_lM$A^7COT-Sneo}bp{YraZ31n=5#Kb zC6~?85lqq^SYkeJGq-UVr(&T?2O&%BB5braHH>#2?_L8Uzsrm4*ym62O|{_{MWhHK zg-JC^sdW(zTe)yBaGz~UZab5?9%9xUeJ#V(hzd^dG$5!()3mpS5Q6x@1NUZ=3$>2x zUQBNGHkOUEq5Tb8ND-iHG_#9!;GrIicach^WGU~AsdDMjyEkL2u|x55;YM4NB1ko> zzcM@@9=S6y@qWbkIGx~M8*cH%;En5d`!5VM+qO-8G@6J;BIAjfss4PSxW6PdmVd6S zc*VjKQ0QGfy`TUEC@@W*7qmhX>2%t43Z+=;d;02^a5Ox43qQs00000NkvXXu0mjfc2fue literal 0 HcmV?d00001 diff --git a/emojis/1f410.png b/emojis/1f410.png new file mode 100644 index 0000000000000000000000000000000000000000..9867fc5f4a5cee733cb9085b3e0abff9f40d819f GIT binary patch literal 513 zcmV+c0{;DpP)JN}w<$}T`f(VqfUsw6-4!!Q4=hIUn(s8J-mu{UOU{h~j=dqz9J*SEN zi}l7NVxAp@+ZPV|C^(ZlJG~;PDd==bhcb?eEQUn472oQz|pvjJO4^(&w$yI*e(M(ph_x4ifCp0 z#&%-+Euz(HpeIt4kP61MF$YXyl`;R5r+~%834i?oYdflvnao9+00000NkvXXu0mjf DX=mMW literal 0 HcmV?d00001 diff --git a/emojis/1f411.png b/emojis/1f411.png new file mode 100644 index 0000000000000000000000000000000000000000..539c024dd64b1a8ff27898fc013a657e43a335e3 GIT binary patch literal 496 zcmVnc?_w3}+?5ud^ z1R2}Hv#(U84yycyeew7l+q&JnY&KR1gE?|OJ5rE!;3^{T8Nx`%AsvTCa)pEY=E(Vc zXXrDavuOGV=fF8|4x9t$z&UI)sE}ljPe+CFow3#`Ub0CidlHwOAn#sNY&<3Pg0r9Z zU%IbiK7ejW+N(ht(`Tat3rAwFumT+VGB(d{k$;LJ%XBm2feTAF*&&+LjJic&!^U3W zcC}hPOkb%~!lZ3-?hPhw6SQBVBD8`F?55&PC9-!7k!cHDOyZaU(H@!JN4#Ww&@mV4Rn>i zQ#Jf-4X87k2Jpau00Iag4p;y>{MlXLo#j_=fpy?KPzRm?J`jOSfX)M-fG6}>hPwqk m2krsO{Gexm8Q>bwr0*MaB$LU>e~g;|0000a26iZOzFE5h0~oR=xh}pxZ@^NL})DR{6NhbGWk{ znVx!dY=5hDw0V=+$uXVP%QDlSzy79{y=xn{lLO&|^e*uw`XZJwRIXKCzq+)X2XAeK zOe@QO*s{5{u2$fLZ9n5RVFNEqn`%X~YquCMpjE-aF1N22myV~sN27#<%nJU(JeS#^6GSI%E}Hi|eIMLdQX;f(YJ z4&Y;i9a&ZP^{#ei@OuQMS`?x7Q&#z^E$MFysL=3_W<(yz^bw(OWAnHNXYCQQA=R?* z|Mue)`6OC)%j^)N=oWU%RC^O&OJ~ruTUZeuz_&#vnPielGJ|=vF~AS@h^L5!Os^F7 zhyez85ciYM;Cu9K>*6!%-r!;p2m}JbCA@@E#5}QpyHMKpiF69!rKvwgaZ-RQ6Vt z5;=1^Y3Lo&M_`sEB(ARB*jOK>`%-b7)0XD6%=Ri@I4i6m7#4;wgdq%J2tydch-B7) z)SBozEw^h2=6z-8e{SK%{V_@<7FAIpH8mP#QR=~!SMl|(Yu{QnoWIx8Lq}&P?(jjm zqleOn#Rcoe>;+=PWsAdGt2R%c$y8=J(caE)A#~$IEk1w`-~;#ozO)Imb6_0`0hh09 zd;NWO=MhQ)=N$8_MD!x65g;7cZlq^G2DHbdC<@6eKk{|cu26(j%mS^zDDVlWMOp)h zUseG%&c-H^;nBcl8=v4GYJhD(10eoLf?}t9p#sS8b^HterwCSvXj(fNy?odV90P8% zd>=qljyW>=fl-#Pmog_nl!+p694NB1LExqUX95$L05Jp{07hAy0Z)as31%pZ6j*2w zXo>UhFPTg3pUJMzyV85Pd)b7=YwskO!V1?~w<2kOz5w0*Y$26m%sVt9(z-nB}p~ozs{wO5x7YL zS38j>k=a#7j6}|=XE{>VFVWg;6R=COC18UixYW{f{*wZpV%*otmkG?n<}UsMUI2^0 zfEXvw7$ZG0cuc@9*Elo*JP{mV_KXz|06Tz|*nl{2(v?ji7rama|t6X^GPu)TqK9wQnK>Dx3R zS)LdV6PUmRrb&5eI<;kXD!16*OR>L~VyCh|r}h$gX)qNqfeB1F#+3*tb(~)H4&4u8 z#Jh2qm=ZA##6MOfBBA;kAqmVlR0I)m!iX55KCsDdx1g<#V`R5`KrY(`N`#DvIqP)^ES-Ar$1qlNPUo|Izipy0WO?oN;=hyO)+Q?T^mSk8 zIu#q87=MRS>ItyTF>E*Jvo7^sJS!rNk!bi_+827BT3m3n))-?JfM--;Sym(v3~bt- z=e^xb{TjaaU`PxwlUygem1UnXk1*y1pgE$TP4AYM3E0iyrm^d{uiXS11n7>RU}AQb zGG$pO`)^%s6{VIrBKaekO#WPYX?6N!v+I0kbEqzKg+l`Cs~dE5o>6@_dWT|ebSLIU zPsiM7BIZUTmQwO%=IdB~H{ULg<6)d;$9MPs;L}JnG6Fb2PDCQc7|Oiu9A(O~$Y(OB z+FIUEPGuJ7mqz9F$PkCz)|diRy;I-eG&|ztcdlrR7a(J@wGO z+}}e54QOBvmHK~(L*KZwp@902go_xU}gbOYjgbLAxC4T^HBBxPfiqHZ}BlT|XhRdJI) zSxJ#hOpIp4<`xN^-YoC$`Fgu>5_+O#*DRh&g&zkltjx~tM+M4ZI1 zWOF{7m2BRv{rG=;6q(t8}eRnTf91Zc>lp^C%v@T1lBdw0~UHjBWJ0;w=wa0wG9Khk<|J;+8o2G5jnbxQf^|m1CqAn&D=~OF-AYJ(ax>Q$! z?)3wRf*)WUn2j*ZYF2K&_7SkgXBNUh58I@OWs4m`Qs5-;O8UN`{J325y^}+NE$#3JGAfbgvpa2er}U*D3)|Gr?YT;=TX z!@feKAV548#f^k%5&oOFkuaSx7ZE{}yw+N&+0>5-vYCE_|0e=JWjq?Di4vJpfwi;4 zg9AnFDB9LG4SqA=dww%uZPU=E9mVkAK+#%xss!TUkalSaEZok$=iYpg@7v0p;+(6Ky(odx`x1=xxs)nCtEDolr81?8&sd+!nSBYAfKK+3JaNvo za8v^sl!NOHQu=2SXXPz(?^ei}fUh}@V*l=5g5CjKZxGQT1TqRCvGpcT$Iu9cl_Cp; z4}hQ@haK8+5QK%o2MQ}iIu4Dn`T8XY31z|57M~GGrE&U)Xv=0ivKfyZ*^Eavg*d3=L!0(J+RFF|_R+8>f<+Ca6^rOIaf<(6T;x zpX#v-B+?!;&+~k3=6RmBMB1Zj0-V3@vrSk~zyz>i{0dL*-efAj#Cp?WEnip*>rKm4 zeu*b{Z({rkEoCed8dwH<4dk~`Z;w0b?V;W@tZ!7XLaBz!m`E+ zEq{Rh8{s0zXjD61s;B#hR8P0dCpBOd$b+52@;k^p2p<7ZgZ1eVTXt*!0000LMGTJTrv581c7Dtyb$r2;ox*;TvA!4&GRo;Q~f<5n~+A^OfPAo?h!_a6K`N zX2h5+6pg}f%9sjF2Sn`G_GP~2$I_xsilWfL6egkI#|7Z%LdKKC@6O)*9TgM;?$ z9q@2pfRM?#EBrIIZyqd($5=Wb ziQ5qmtvQiGs3X~s@Bq*JX$6mQF=7@oSj8xQ+Rz|P;5?EIHRRedG;tYMP+$?~kZ^;r jj90jZQ&_=Ow6y&Kr(F(1x>bA;1Uf%;Sv@U4K)XX z6@^1nghM%0v`P@orbAHF>TuCeDME<`W@y4a&-44_qbF(*-Rou7&y4ezBhB^gH;N6V zQ$QzM=786NF+rJKg2Scb>@sBV2ngA$8|XF|GPox3oGK3i0>n{+$3V!xg}^w_N0kQx zguxXc$N%NbxM~Jw5SSTNz0|Iks(>8{wM!&6c}~JfNR+9OL>UAK&j2H(X=^*Q7s0S{YaS>PyfG5CN z;HRW1C->AjH_u)Uc;I>73(vgEW_A*20$%+AP9D2WkQgbh00000NkvXXu0mjfz^(Fn literal 0 HcmV?d00001 diff --git a/emojis/1f41a.png b/emojis/1f41a.png new file mode 100644 index 0000000000000000000000000000000000000000..aab26309ce0f474051b147f576b7d211aaa31c74 GIT binary patch literal 629 zcmV-*0*d{KP)ICV2t^u=y{;ZA#7s|t~wr7 zC{?P~L~0bziSkbE@m{A>O~#`=z&!8{kIjK~Jlo|RLcKxydV}~j3&q()EQ;qIa0PgS z%Wz-~SF7D-qfjI@oWxgeG-$Tl#3Erl0pJlJxC{qgHe0QQOm>~Ip(M6#CeRW+@u7*$18D?8QQxxs;cVv#VuN^O^Vqrq?@j;~s)@nvzzLgW%67!^=~Xe69T z4JYw+9EWUvlhnu%#u)Y~@b>)&R@c@*^(3kogJ2K>ww(bAc(VBoLVZDEgJFExUpaE? zc^Zu-uC$0?6h%=KttooTah#vI-&@pn>x_?%;By>@kDorXPf=X`iemWNLa9={TPT$| zI-bI|Eqvd9WGI!(>!d0tm2DCA_x?5*{Vu6+p=;! zA-fDj=@JYC@J)`VQPr=wjEEp2hzKHrh}0CG^N+KqPZ5vDICgZ3smX~w5m^usY~@f7 z6~+W^0)i_Zi*n=IRa^=@QPpK!HmV$=1>9D6B_el#Gk^swsp>OTeU0Z2o~7O>Se#~` P00000NkvXXu0mjfTjdv| literal 0 HcmV?d00001 diff --git a/emojis/1f41b.png b/emojis/1f41b.png new file mode 100644 index 0000000000000000000000000000000000000000..e19daab60dfc7c2b7e1e4bd557bade5f9f60bf19 GIT binary patch literal 700 zcmV;t0z>_YP)THZVDkti1>Z-?i-))ZFB|) z_wGLQjVK=g-||1i2kw6CVl`==osC!9ZhmQ1wZ9_%B_f{y3;siR;_Pc%dF>Z=&Xi@* z3!Uny*%jnzL0$y;4rB@f2q1s}0tg_e2t!U>{e8~<<%)l}+k>lm`BjM82~i1A2~i1A z2~i1A2~kmTxdi+K7+{=OH#OI$`?PKIh&A?#HHI~YHHI~YHHI~YHAZx8j~t#9xC5lf zjeT^qn4BAyBf6a);O9;3Gr+kC6_2RLEFSm8!@bq*O3lOqm`}9#_|U)D?9_ zT~Sxm6?H}3!5!Se9j=W3e15i==4+EN*9`}w2=W{VAby~e4Yk%n!UGChxi)?LCH-CK!zU5dU%6*9UU5xO|qvvrq+zofb-G~~i6g%@2(@Trx zoa1Unzc<)huBwYg>byB$%--r2y;sHMd(CEKGqM@kjBG|Wqs{FX>vsJ^w#@eJJD3@D zv+Aqp*0Qc>+UB(57c_-L3W*dFDI`)zq>xAE5}c`ZEkMz_AnYW7yacA ztM26>1&b`lGMGKnCABxY(k-QIVb@B7r!VlMrBB-4~(iAdcs$8qAu zgnd*IiJTQ7XAIA%5)thp+C{XBXcwuo;(p0=2Z6ML074K*t6wtRUNKC1r4X+a;*~u;pAt=%U38x(8X`Y81e;=shJ$nxjd$kSoB!sJ->5ib`H-k;`v2v zOS2}Kz*fS#>0T-()?6l9ZDO%}>oD&+W)gH-$aJ-Av9xXUskVy;D%+@p&6 zlAWi5bq;G3vr8z9ikH5(W_@ z_F1+)^B3?u zrCF7ez(pSF1vc{>ak0|IGweR3)xgI*bkooW{K5YO8Dx+_2HAN@$AM0s=oB26otKSl zWFwo988Sm=$P7mPz}x@`5D@s!T%$FaMP`v%WEN3ZcXykl1IA|}Y2!*IgP*t*ZKFsc z(M!xem+2)@L*6t-HY_xv;IAb94z_B*+IGU*J1Kv=-?QR*M3fM11S$mD2>hdI-f2|D3 z@g5a1KD~Y;}<(L<}pX_ba)BnV5?Dq;ONQdrre88n4K!}42iF>Y-vcM5D^^>RN91YGe#rx#0ttS}-93P`jovdRSN%VzF zY^6YjfO%pP^Ct}!6LZq-T%f5Po}3Nbif+v5(!WYiCDLE3$SpTSpKF3iL5ygrs=*1> zIj<%kQD_V?^}~5JH{Vh^7{C?q=vhzgzRdJMjNC&^w*!xLI3S>d;3gjEC%+3k4pj8Z zTkrB%8R<<&dnJ7d6n~|j@xXct;Tmb}C5MAKaR@Mv#LJy9gMqJYel)D>BX^YtgkOJy f@SD(e%v0_IZnElxv^3@v00000NkvXXu0mjfW!yUV literal 0 HcmV?d00001 diff --git a/emojis/1f41f.png b/emojis/1f41f.png new file mode 100644 index 0000000000000000000000000000000000000000..412bbb16d785c63a10b74b05c44f800cc6ab39ae GIT binary patch literal 610 zcmV-o0-gPdP)iaLm=O(zIJ7hy6rqh3)sST9 zB+=HA6tx9{Lqv;vgi{f?L==Hmx_G3Z-s$~&-}mm`UmkXG2(|b5@c&c$yL+f-;*E}b z==dNa-;r<$5dOiO9-XFM#rGdb7)}78()xpC+mlM`IsU?weV>|$9d#^YU$u-u!cdn3 zzrXBxZ-6PZo&YM;h$IkvLl~m8Hcg4-EhpyQS4wsAn}`s21uLJ~9Pmx;SzlQu@QSmD6iuaE{%J)bxUEUt)+9Af%q8%O?4^_<*3d}c z7vG^YdSUMM$o#Y0+kSSFdVVoaBpPEck&t3GgMtJobl2H|llu}!oR2TY@weBh*+?zZ z+?J%CNGR#m6eZtd$B^1#0-vQ5m&O)Q>J%c>w00dM8gHORL_U>D!KjzdJ^^}w^B@-K-`bqYWi~G7w>E#Em_?))I12Qt{zvbrXUE(o w%b0^&Yf}kw=e&Y{1<0ZF5FqTbfHOe)7oc0)UJUGUegFUf07*qoM6N<$g72Lop#T5? literal 0 HcmV?d00001 diff --git a/emojis/1f420.png b/emojis/1f420.png new file mode 100644 index 0000000000000000000000000000000000000000..2d42022256a344130d657c48f699a00f14b9ec9f GIT binary patch literal 647 zcmV;20(kw2P)1LeNVlSlAP6Li2&6+$9wd1aF)NAZrN#G#ahy|V zrEL&UnxCE3=?#^l%>t_!smb!2>r{)9#~}TbCHWlT^lRMKjsw_aXA;Lpb=rT(FOJbl z9D_Ipaf}ircR>0nvr$C&?hW3S9+E6${DD1OI3Gq`0#dF6MA|L{Bd>CYq zWzqaBrlAoVC&Zr@aXY#Rr>81x5L{Nq+ltnsz%xY@flaD#-Am7>i!yxgD`1HhKVcf1 zDb3B`Ztf)dFoV;w3A3?ffK2)(peaT74Y36+CxPbrDn)OrgAGH_8Zic22vC((sHFm? zuAVXj>;hhrBr^ur>_F?&l(jV(+L{bW?mNo!Km@nF6GSi#P5dQE-eWMPwV0WqnIndj^qFlzhS37bvyI5ELl0z!>ldYlqPK0?B literal 0 HcmV?d00001 diff --git a/emojis/1f421.png b/emojis/1f421.png new file mode 100644 index 0000000000000000000000000000000000000000..7a2e2dcda9249ba62539f8783ef028dffd15da10 GIT binary patch literal 603 zcmV-h0;K(kP)sd$6{z zKqp-At7%_#PMoW=&cIAP(4j}Ted-A7LS9U^mVeyowA#l2p-Y@w@o9R`CE-DPt#K2x z?Jfz^zyiMoi;6gRs9aonW~y80VXA#!=D%L77Wsu*wP+?qaZ7@$3&JLs4-NIlX6y0% zN^{G*#Ri+qjFq*LYLSyAK`=`ZMnaaSKF>%829nC?=$@c4p0iG8d^iu(63?cErDa~f z|H$d-gOsf{uik!eNB2*h*BB4??bva-7#_L>l%cHGXXr|ukUC+52qVK=Idx)+5CW+P z!-M@e=jb$B2h8*-U1oMCY}-32u~A~Ci1)Yo7Cb&NV>k5gR4#)m3^dtHzgRikV`jm?^=Bgs$hn zb>Ir%=;|LIqsuhLS&i|&&$3J2g$!uXBbXW+gsaW9@=abX&H^LACo_8}-oNnPEAYrL p{uC5rgJDULJ?W@E;V(G;(N8Jc;;(mB&_4hG002ovPDHLkV1gka8V~>g literal 0 HcmV?d00001 diff --git a/emojis/1f422.png b/emojis/1f422.png new file mode 100644 index 0000000000000000000000000000000000000000..fdeecd1b584ec4e66678e99732d244a09d501b72 GIT binary patch literal 548 zcmV+<0^9wGP)x7REfvY)k<0oQda<5OeH6Ne|J-J|n!3>gtwGP!xy{n2eG zrHJB)N?JiFMI6WIOrw+{>P0#TXU9jv;GSGwKFxk{Z)e^QytO1wYH<|5P2%Jmd-7^6 zT=0Ca=8shF^mfu~>~d%4COKeJL`K+i3s~W=r@$HDI712n1Q0+N*tXWb2V$&!g*9Le mSOeJSKyHkAon<*$mh%TApTWH*G6#kL0000d9^r!5!Su;}%YSE+OCC+@jJXO2cM zQX{+s-mnjQzORi29>_i57LZ`aIPe&Fh>&9siwUtuoWOqp+RvX7z#Whah;s?ZP-pN< z;FrKJL8Uwe+RtBUKNWupzXW~>{1OHefC<282g1$e&s!|cZ}3Z{0+k9ii}M>Sf7t@z zCWa0SV8DO@3?RKgB)wi_btR7$3T!XTvAr;d77DDcig7asmSQ{BkU57I{SR>8sP)2$71CVlgap7elyV+O#{Q!h;`X(Ve{2&AY|amadC0bz%r;_$6~f?~Lvx|AX_ih~uQMwMV(Rnj6d0fcA} zm}aWVK@dDrg8KqWm8FuV&KH<;j6C(F^|l}*Ko>iffmt-4a;3P$9zOwhY{j}Wg8d=@ O0000S->P)du87 z!+W}};p{Cb*^6-(n4*o~^3iRyQ2Kffp)v%FfxVzqen7*~PQdo9tP)@xILkUYNKe;e z;1Xun*@WUeI1gq=fHV9n1zg2!1T!!LGcW@)6mM9q7MXLW07(+hz1ttDEH2X`K;$&e zz!^9LXW$Gq--v26(@(9sbeJX)=*WeL3LA(VC)5E#g-{_>2o(iGqs&Vm$8$7=p>piR zPC9b|>nb&xIzc8u2S5ch3px@=l&NR-?Y{sv2|NcvT6quE8sxGxje@-cJ^^{4s9=E6 z^omkE2GsdmJpt!gl?DcZF1#-&aRPAyaROPngV``Q2E7Db;wmJ2Y@Q^GJmKb2!bF8f*=Tjh>ptq;!TPRTkON^ z4QA(dQLYZAJi{puDGw@P)2gvr{L11>IZW-a8RR%+!cii2E-n_L{oMVgz7 zgO!v2LCL{kJ1jRhYFg&N%Zy&{EAQ`P@2t!=d7gOw@Pw`G+0{64(o|4ZnV++-( z(E%Im!cF25hOCOKcud|QzFMcE_#^k=DaQP52-k^IIE^K1imb^RUE~zT{M#5gMIw=k zKJ+1Cn7A>(&pgD6&QlV!{SdHAL00g$X4Fl~6<>$|QE8_J1{Y5|e}??8P;_!hQcY zg;%(Sy%mXgBI~;3uue%t)a{41lMKPkzg^^;QE_#HUA%bd7yK%5*z z$y|0v{M1PBly z!19XZ6-nfWyiq+mY@R^5^F^Ux^^*%9->Uv=1w13IdXsWdr$9dp-1^mC6YCpSxm4!i*XS53hv+z?pTMV z-GHsneHJo8S2v3_YE^#e3?U4fg`!!IndO6p9__#Sgu|U<%PU#o$g^)dZvY7`vMlmt z<^!wN6=|vi6Tk-GOM=62b#E<$JA#!G{XmWu^NsIhF=8R`O9!xvKSs>~2gGj!xbJaz zNRwG0-@c5>%oJG`S>&$8m=R+}j2SUzq|sk`%+3P~G zO|yGpW4R9rB#=M?Xa%~+*dS@Xy7V>S^WQxgw)lXT%fH^M|3qy}< zrSbW!ZT9TO2iuZdWgqaBrsT@nA(pTk)DN^@(yfcQT?TCd-vK24dNR@u)}e$*t&APoDC5Wp&L^^s|dp*Hp8^^`zY@3J$*>ereja&2F*vb#8Xva+8V8P7&UaqmpSM znHG|1iKIP-I@+$Awr#W5QQM}Yz0Gtz8A`cQm2!oYD=5(T3=sxIq$nC~CZA~YMMR`X zglC`)&?vU)R-oRpEGolc@~I4mu`CN;9ngYL34(}p;VTXXQA&}IQi|eWkSr0oEeHzH z7SMpt&1Co=*LBHhK(wW_mJm=1OvU4I9LFIa$8m^nY~Y&$O0|}dQliU%SkVFQx~`j8 zSX?5Xg~cUY*G+)#24YHdnet#&(9M5S`YSL$IyOc=Bcr4E=C$Sv=%@#)=DCpk0ai6g z_y|4Yv$Gc_Cf^5IE?;7|@ySW%=H|ApRMAr$5CK;3i8EYFR)N9s0zv)xfIRd9}p=tNFcrlQK5r66nzis3(!u! z0Xw)zmtqyVh*kszDJaxV)+I|?X<|T4s+Y4^6TP1on@T7x8U1|t@8r~Yk^LM>rToIN z<3;|GRp2xGux?J@8NqN1I0x9kDi8vf0hb-yz$0J;C;~r$XCh2n7-oR0o0~1RzHf1~ zP&lco?BN2}qA22Hy-w(wf*>!PY0L{)KJm-T9uR98<2 zOBe*Kyjf!9^%7z5jfJ^cx}6R^UfRRY`xW4N;=-k=uZe_p-*KGtz?g^-{r*K52E2N{ zNbSQKx%?QJ(Jc8R1w;hLao!~o$uh_n1p(v-&?2U)Oq9wrY8&io)HawXl~GmtT41)p zpkM$)>?wmp_(z02p3r9@?7EBL3@`;~u~g<$qfSq;RHiQi9w5xnC->$T86aTJB3wkc zA|fY<8DrLfheSLEc?%f&EYvW-0L#EKaN8JjnjICOixM*ovN%{5c+U`j0P%c@EjL+e QKmY&$07*qoM6N<$g83xl$^ZZW literal 0 HcmV?d00001 diff --git a/emojis/1f429.png b/emojis/1f429.png new file mode 100644 index 0000000000000000000000000000000000000000..f3d92335f536698413994be03ebc8e9edea2bee3 GIT binary patch literal 699 zcmV;s0!00ZP)<0?@d>_>(04J4#ZydVr!=L&iKT{CjY~B zyUFFZPrVh-A33tx?d`whyhl}e;HiE;ZR{nT?~|lMl5|Lt4z+rHIc_vQ38U!m;LO>z zjpgMN-vZ{vr6uw_=gQUZ7z_psIpKNQ@a1V-RD|3XpLi4GLHA`{p0(PdA%4Yf*GH%d(@45D_yqH5CGV4irY+`PR(L zx$b`Ye(=iDB12oZc4oGB?#@#gtJmpuy9~u~+<1O*@%sGX*&8CVt;)|6_1b6F+VjAl zL0%LL^|SmGAXF9>o~7MxGt_K0$%}HudtEscPf*F7bDw5;zCk4jtYt{R@jw_w%+Ad* zYLI2XBo(pNUbEIRWJC-ihFTQ;#1n*JK*a%}s=lnMs47MTL}0GfykU&|z<(Q*r90D0 z`>z5{L{>xu5y2>+Kp2MZ_%rjX)|!ie@~=|8U)#QY=c~=FzkUU70&ggwK%n09&{!?% zEge60x+sd*_j+l0Z}wVdXCoik_H6RP_?{#^MElYRXd*7LE#9xCr zMx=vmV^HMx^1L|foL>*NZtXBim5+gwR7ChdL@qHxy}qlk0DLY&8lXI`4J3e5rLC$w hN_Rna0jpl`{sS_t7UN-2g~0#-002ovPDHLkV1jgMPuBnd literal 0 HcmV?d00001 diff --git a/emojis/1f42a.png b/emojis/1f42a.png new file mode 100644 index 0000000000000000000000000000000000000000..25cf8ab75c5119df3c22e767564171a6c815c8ac GIT binary patch literal 455 zcmV;&0XY7NP)w==?OvP6v!o{v;;W`IkXBc1qVWZf}=## zP%RFQx;1G8O^%%)Hyi~AA>t;TLf+tTcb&gJ?ygSg0>kI=qVnyz4@@1ysd8xU$l-U} zUi6&C6Ela;iSPed+uXPC@QLz^#IC+VKBB*?MbtA!aU8=NFHinFd-TAFm#7^x%%i3TO*I>ugP33`HPtWho`1<_n)4bO zgOrr?j4gfG^fb9>ZxLTMoo#CHk9=rLJ|$N$@!w`53*oI%qa-nF+nndKPA(5pNsAx- zFTH|OV;VayVY%@MKE}khbqpvb7;MSUxIH%hwux)FjypJk4f-}VY{>rhoy zRaGr+V+oJc1GS=7wBKO`k0K`{#)v)K#R0sA+Vwhu$5=Hr1VIo4(fjxfYfUuKgyelJ xVn1$~8aLG*ZqT0wc`{V(S|CeJ-zlr6{sIv|kPB;eLcah2002ovPDHLkV1meY$9ez& literal 0 HcmV?d00001 diff --git a/emojis/1f42b.png b/emojis/1f42b.png new file mode 100644 index 0000000000000000000000000000000000000000..a5aa04b35bf8b642965b66a53f3a468a60c12691 GIT binary patch literal 478 zcmV<40U`d0P)E=fMd)7V9yPwj8=CJwZH5SPuSVP#{R!xyez zfAZJmYfF!AS^Sb7##2`9Bi}XlShX|5bJ1gFQ=0>lw>D4f?AYjrd&CPE{`ZKR)k|%T znN8xT_V~iEbKBzdIhM!{ca#^ao3K1^S)36k@E5k@ad);oyfQFSQq&?AtyS`F**ZGt z!0;!&vUYz+4h=<7v%Zd>tV!R){-L3vp}B~U-0C;{jN|y*f9kY)d5XGO>oduRm~ftz z-EFR!CHWMunk6>Sv!kM-qGEOqKj3?uFW04{s&C^eRw}zIhLn_)l(^v=dJ4RQGA z$VH6cTh|%y$~{V}?VC%-^|pGaB)3ucf?Iucse0Wbv)W$QGmjD<@vO@6O1(&#Y7A84 ox3*K}vAQRdT{%g;Rh0kz0;8vl`A#>TXaE2J07*qoM6N<$g4GztlmGw# literal 0 HcmV?d00001 diff --git a/emojis/1f42d.png b/emojis/1f42d.png new file mode 100644 index 0000000000000000000000000000000000000000..89e25dc2f28f00223aa906538d665369744ab082 GIT binary patch literal 678 zcmV;X0$KfuP)7^0Y10 zo_+hDdT4*|QT&FFaos;1#&g&ce2Gud%%3@Vx|{eUW1v$~7uvjmGx)%tUcyL)qL6F~ zC12p#oEYwr29BqSE=e7e(JGe3yTpWh(nz0F^ru{bbzvgf1HX#lEOF{ss;Eg4I?mcTdK4#_+y*;bQO*_}1{YE{@a zr*t7&=Au-(r-Dj}xhP$TmN}(ut3rdREI2zE?agIjI@(JAuEcb-Een&;uH$S*8e8SW zrD)Bx{I?b^MQdhNoFI*71Y#URb}ZeTH*;l7M2HA8SH>*eoOhogj1e*dfw+c-Emx<; zUA{PKV|~rW`kKoZM_rv7x1&K^BM>rwTf})=x@z4zib9^}@;uj36uN5NcASr}7(oQ- z{d1%4b2v%UW!bJZ8x0*rr)_uZo2t8Z$+F5Cj^Mf-`7g`Mf=BB0`tf?bez52$ZsgVK zV-NTCc|28Y`?^xKu(+hvY|gb>&F680m`G*(lrPNxd``*^VG&QP-MRB^tyUYU9XRmf zL0MPe`z&qTt#5vK`}XalcpabPRm$0%^rnctQhHC>8l?Pe?e~@PyM-U$exRrCmB20K zJNtTjXLs+}n=Rg2c(T!Gz9r%eX(he<+K|Kx5vK8j|L4(^90~E!A2{d>!rXc9SO5S3 M07*qoM6N<$f~DzC4gdfE literal 0 HcmV?d00001 diff --git a/emojis/1f42e.png b/emojis/1f42e.png new file mode 100644 index 0000000000000000000000000000000000000000..369f357d40c1054229bc4db9a75e7beb3914ab14 GIT binary patch literal 646 zcmV;10(t$3P)#59Kp6FT$Zv7C;hp zs)(ZB8D}C3Er_`ssx4>Hz{d5vM0`iuR^*DN`R~|A_g*Es^yg^cbq(?s02BYJ2$lGu z`{jw=;QmlVuYLybRqm~oQ@z*pr!JdscdDIAK?t19R6-l6YW7df6dC}^ZhI-wGi-d{ zFNpMZsSApQzy%Zwxn1g_yi3bDUH>9JE^&YQm$>cvChC+@Se&25#(D-#8|xV?&d)+A zg*w+av9PLL{kG;`7P{o;LX#0R6dVW1=_#Za=FpU0m_u@U3I)eO6A9S{;F%!8C|c-- z4%-eQ8jYbT8jZoWgU}5ftq2&E%oqTm00oMqg{$VFGaEYCMWF10m~j>+Ld~*K?C3^MXZ(R%IWpx9i)LgoJ7E3>}gU`|MqT84dvIx`Z7 z8HwXOmxgYl6=@%(dgQ6D0@Ku`>fVy4iC8a37!V>q{H&<0wo%_L#vhi!s~HaME8(>ymlm*>eh2%^69 z`-$OCTEylG&%sR_18-<8y;80o12OsQZ@K4>3@+ZMH5}?%H&In?eF{XBvU-G2DIv1& z0sTV%)EUjLlwDYyeMAbO(7qwQ`f(1gQ&Jf;vBl@|tmZTw&86tXKD3q;mkle+HM>iK zY)>bur7Bnif>$V8pX2ErMI^NIz7u`+SwcMTNxu%8Q}WO)XNjG)#iL&bN^i~#wSK93^18`kfH{0M?GFab+I zB}E2xcRKMnCEIGrzsjGq!;~leXwR*uwQSeE2~JXU+_Yk?%&N5w5NgU!FMmVmgztnzwEhYp{jx2(hp* zuj}rurRUjhA*IBol%lWyW8K$3kO)_W4;vkwovWKep?D&h+?7ftt(uw|!5S$g+v^*| z&TTEi^m_Q)(AgnrgfnL=rRne(NUPIl)wM-=*+9AfD+gXZypDn!Mx%4umbRsBXJw&9~HAjm-&X@RhM*$Govpiqoe~*?VZllj+^orgzzWu;-omc}>&UGB1%- zVcT9~5#fcYu5NeIi^u0|=sx(}2u)M8?a_m+4G08Dperl1|$gt+C!(bW+IL?a53yX(PFj(Ii!s@!PN=c|n-o4iUn%o`gc@$601IS^r+1xY~@jQCzLBDjAT z6Z+utJ+9HD%j+%Tm5W4=jS*j)!)>(Llz^lLsk9Jj+iEZ2#6C>u)8*O;I0dJ;c0!j4 zeWHmPcAyVLTG*kM!DJb*80;THJVV#a^@OE*%(kU^%*^$KEyfTW7-G{R*<5C{lYpAr z7@=!r-En@Z&Iez$*mm*j7U!qxtgPp35dk&xngv+#i-vsVK``J&RQdy^Uh8F4Z&BZf z>3Z>K$gyK1RQi2z9mty?ZbG7d&*B;-yi%2*2Bv@jlSkq8_m`NSY0-7^@rV!K9_K%r zLix7)6!G^ zEBX6M&8zOl4(`Q-MZ_3}Wf4>nGfH^m6dJck7jEDhOBD7!Jg>>!=WJ*8kC!Ce)d&wy z<|Zn8ny19SPNR8-9T*0I_U}I;o+WtVB*DNiuGPrfzkIu@?Tr_#R~h`$E0sPM?K}_q zk$63Q;ghG>sj&Z1cDQQ-|IP4`!(U|ewW19V9a?5f{2B4w4|v6M*xpIRJOEN}}X`M6!)_sWy00000NkvXXu0mjfeW;2= literal 0 HcmV?d00001 diff --git a/emojis/1f432.png b/emojis/1f432.png new file mode 100644 index 0000000000000000000000000000000000000000..a78c7b20787aa2bf4f6e8af92701cc0e31ed548a GIT binary patch literal 682 zcmV;b0#*HqP)vy$xw_gP|v&4lCt3C2h;xz22Be^ZXZ^jyex}ewY7}$Q%dUikX2G|1_Dq74|NVpC)-Qc8~1h zG+8%^Utf#XnrfwmQj{6boU~CCk^PpNo}XJdwPADLx*!O4qbP~U5rs;i7y(+SlAFmX zK|<3#*ofAOD2l?_;@nLy=6xzJmd}^wOLt2PrAJ{H-ifV<9Roc6kRD6l4!?(2tVF_Z zbH&;G>*uep@CR${tDS>8Gr&43^4S7&v-6`M1uOhtV=CSOtf4|gm`IO57UUL7tgt*| zwCe8ZItSEHF_oF3P$*s(c+3*3Q7osgzweZ__AnL2!Ym)(kB=&)o+y6#0dP|H@my-D QNB{r;07*qoM6N<$f*@%*5&!@I literal 0 HcmV?d00001 diff --git a/emojis/1f433.png b/emojis/1f433.png new file mode 100644 index 0000000000000000000000000000000000000000..df4080dc2d5a06c7599aabcbd33a658d158db884 GIT binary patch literal 621 zcmV-z0+RiSP)=oF`h56ba^U<;6YuOB zk7s(1NNAs{V@5z16sCYG+i;Jbyw+0Av`qkmz!ks%SzsDi;vXWpe99Sdj#m=z79UhH zt$x@NJ*CPdDr2Y=PyrQC!6{ZGF}F1AtrYT+T)}i?a~G0t=AXCURu7sW90Ej@Nx3oh7!gj3$R)M58xdcXtOzevc?uNRN|3ryRHq}c=pHwojGgg| z{*0w?_(lIZ;P7WD;1=-Ks*b3tSk)+2C#VYp zn{a`{Y_DJ78OSRq>bBW(?GT$vE|8+GSX-yrMDd(Be_=pR*m8{q$8o~;Ol!^nLf!j~ z*DU*U>{MoV`-kQxZ_NctKys*K6cBczHI*RI8h=#!=37%Yk5DIU$8{Zg`nuRZuy?T< z1oxYxO}PDo`(`3BZ`d!DDf<;_)fz!9#9BoJ9M{3~nusN$B$9DdS=snnJWEI(1o!jD z)q5SC>GpJ2@^V``nPv-BUvHbM+q(9JHgWgLGD;P%y;@Xw|e;s*U!U<~BDu$KIiE4Ylg$Blj;16D2|hQ*Z5R z_EKH@yxf+t6UB`n1vnObV2cPjHaJ97wk4Umk!_p)x*1Hyw<_0XeD&!`aWw-tfUku2 zj>x2Tm@t-iGMvv7RW-&Hq)@4w{%buN&k<%xvRJ7xR}NSxS231Q&C}|!Uh-=+ICCoF z9vtm$CLMQJS>NPbv&W9_evPN|YrI_A)a9BP(?qy2hufzQo!=j92-XrxH+w{75}L7W znp|swN3+Z5q$BJYJ=}dfeWcm2?Dxu2kx4>(e-LT;b(=I z5^}8x{v_YwqLYpgil;k{dhKl^tDlS5dY!ho#u5HX6A~fS(>?AlujoqY2cbSM#=lT( zi@9#U6K}e>HaE}zQfy1Mw~tqrN=+sR*uzJ5p@=p0>SW?ddGQ;2m=~q40+t5a1l7xL zUrf23=@uH4mE$}^scBK_0V1Wk?=Jv-L}=fy4$gd-qx0kd5nq523k8h98be5wnzF|9 z5urRcF?sgH01>{3ToRE2#(*(k3>bs8_7x4ZHRhoR-M}qi-HO~Xmgnq3utni_zW@d~ VzjiaCy3POq002ovPDHLkV1gH!2rU2r literal 0 HcmV?d00001 diff --git a/emojis/1f435.png b/emojis/1f435.png new file mode 100644 index 0000000000000000000000000000000000000000..52e4d8114e129aead08e31db287b2aed381c0804 GIT binary patch literal 662 zcmV;H0%`q;P)0l zB`^hCM+j0qIigO2kZD<@a#@rm1*}kRc^CEkIHN{nU8n z1GMj>{D6w5D7zjFW!IzPDU=_e4Ii(3KwZB?(}{pUDT*trw03neIy6W&-Acoafphd{ zJBUY2iYu!GN^wMVN`$betL*MkEtR>D%Mwl4XsrpgC2Sn6*#5depcKDp%K+ABVpsz#+%3yNLGmTi5gtUGPRDm&fuhe2#Eqr|U3D>O>vaBe#?%qW0m8fwM z;wkV%0Osw1^B~X&K7)Q0c-2GOwv*lYzVuFEM>tM`tHW1R07*qoM6N<$g11m7h5!Hn literal 0 HcmV?d00001 diff --git a/emojis/1f436.png b/emojis/1f436.png new file mode 100644 index 0000000000000000000000000000000000000000..3d21c7fc3f77f404a0dd0b6f0411fd3dc802eb44 GIT binary patch literal 699 zcmV;s0!00ZP)Nwl`)sA3ArubU++t=AyM@CD6_T}o3eHIe7?ON ztrKQAGShqd?6Q)Q((Tw57OY$Sz1@ZJ@t2jBWxW)UtH2N-s-d~rYrrK12LKhRt>eV0 zGZYt>u+-dKmj1pTCf~oqCIXii;GicI3Uw=`jsnW#@o>DSkE-e#{^a!*(GW{8bo(YE zmQv7Sh~x~EI)tlj<7T4uEBTjb{Yu(4ZsIqk4jDigSLco{{-<+i7fXZK79RGQgzisw%r;b>mhMtMbu>QDvE@l}{+B$-&f=8=N)`pUKI6TlHmtWz^z zGOg38G!7Br?dul^u)3uc0j5)FYN{#-l$PE&)^oBKo6hBPIJCzzIG@XH1-4)-udHJC zp8beGd1V!gzR%}}D}u(L)&>s!=J7LJnfZKvpYrIZA`-+_6A0oc@QYIF%g6E8`=-ZU zWpL@5Z{JvADx98epS9$$&gGk8qfa}qjjdldl=Cegi+-BE==b@iSVB##-ND}|2wO_s h#kNeO9r(as`~hqDOckT`}H|}o- zUI7_?X#iYyWDxPFGsXoj8d$L}of^1jwzkhpIJ7C4hrlzCF$06ZL3Vrx<^&!9R}74q zt?ecWhu+%8^Nw!Ky}>#VYidZGye(Sa0))K|0oM&&Go_Mv@808QvV?~(98-9uC_#YL zb{Nr`3gOR0w8m;{0pADDi`pppVRy8**q?x^Bi-A>|I)oZ;DjD4 zEcH#aW;M6Lr?nOS=JVPLtGO(qHDak{1&mNJIs2UPnQ8nWfU=Lt7YMQ&1lbKtz5rz( zKM1%vGtK1e3u;De-~<)p=LT8d%;A6dNO5Tee4jlm3%k9I`i!g%Pxu`{( zO0d76tpq|y8(mbpBsUecXknL4B(zW~t(Y7~XU>_KbKXW$BI#n!Bdl>-8)9x-Ix9+E zgn-{rC82_c@)e;W`JG!IYvc9bPxr28WoRS;R}X z<`A;Rp!tR3>|CXJfsxT$Oiqs>2zA0wA_$YyV~mX6qSCy;LUDG^AbD$@L}0`W-FtKU zwxS5apS=F~oL3*8Aqc5>!%at=z--^LqftbzP$vlgA_%KgqswhgZH=ZFED!kAau@%} zua>*=rEddfsa)u1gD8wBmweWhOFmH;vC&FU>^If0(#Zy51ZyqpthI;{HmZh|P8)aP z%R$Z0P#3oenj5ls4O_`1T@tYrtAc8oqF*4t@`c5fuT*LQtKv>#*&f={H@;NLpKnaM zWRfn%IQ&f%g%te)%YK2T^p@49qJ$sfFQPkVim7ofRXji3BDTod_cp0T&_7 jDy5`o0Z=2!it=HYRDln)le?Rfg z!ZDQ6jL9+iOm@sV1)`>ueiih4{6%nBh~Py~p2GZADfdf-=IfWlbEX@jEKJzMnqz+f|+YGpdhU3DXES4%SeSV6p6E2Ao*_+ z5@)v%h61V3M*U?eQqDyuU+-9lTF7|F|B>+!>re|PU+;>faZyIfU9wN7pNr3m9)AcU z{vnL`Q+!tR>@yS3M%K|K8HJMw?}-_a%$V%Ca-+fYg>^Qz1BN!X1Ew#mbLB>ZK9S6r z!aXt*HX@`s{)j7Mi3K#5zGBIz+6bxCLWU}}kZL2OSn?UrT%?m)uyQ9|9nG2mMu_EL z=R4-|E^S}uV0J&)Df$j(>&(w|naf)sO^D^#GlCEkIw&86LiYswU*&jam*b~npme&o zH|TRujIsE30AUBD1=3=V0(^b9bh{YH11qh~+R;w6PPpr%nFg7C<1|0ML!WYWHXqz4 z?D=SxL2M*Nd|!H{`(U-G&1&8!8@E-fR3){%Gs&+WXE!>583BWI%X80O}6#t_r)a#nR?gJMDeF eeeeDh@YU}C?j&b`W7a|d0000jsg$1W>kny0AzjTVWU>B`t|)fI zswV`&^Hc!Y!>U#@;@aeS=4WT3J9j=V6${dv&9d}(nOwd|aj=51mX2&LPrkUGo=ldJ;R->Jq19UH+57H0 zRonQhF){l3wv}XCu`s}vS6@L@xp?U^_ZRNbF3 zmuvL(_qBi|ZG&Z>jiN`AE3?u n?e587!}`Foi+Xj4NmD?dNm|;00000NkvXXu0mjf%>!1z literal 0 HcmV?d00001 diff --git a/emojis/1f43b.png b/emojis/1f43b.png new file mode 100644 index 0000000000000000000000000000000000000000..98fbf70fdae1b347fbfc2bff84a039e2315d707b GIT binary patch literal 658 zcmV;D0&V??P)2rK4u9-RXdyd0Tk)yt7-ItM10&v~p7 zL8RFcbdMtZj);H=ehibyiW|tY6S)i!0x{^a1qhux%EKI~vV_1=OQ0+nF7GPCuZX{5-o=;P0u0MOl zl4mIL+ZOlEonTXR1GeAKY;2eUgX(Mh;(;CGAWgvT^13Lt&qqaBfadxLlXHvIgvz*j z@*qvoD!x(3B$E_8M|j{MD5{r1mNJux3l)tG76r}qVeXzfOpylttXfPY4DdwI4nQ3- zLV>Gr$xTi@GWq<)z`Av9xVf$6Z$>G~9B+V9Uo4wS^<-1CkAZ##rNA*LKPY|KnN(kP sCS{Ar&H0`7H44m^u`ZO`fG7OyD~4+Ch7%oveEcYy6|cE#dh4!bK~QQ>%aZ_oc46d zah;E=lAd~$Oq|JRnTO*DrC=UvB{HjhnCm6P4w*Fo?X-rE~&FpVs}%U7=O(!qlSLJ`V$EjrrUupO6A zK084$6z1IA9Pdp|vTf^DKxaV*m1(FRAdYYPe&$GCgr!$$Nch_D# z4X4hWVNKjn(qnpBKVXO;B3PEiy$r)ZM7Wn#Dp6;;*W?v@5!omUvMn|bsD%1o50lqkWnt}d)Y}>}NEPS5U zd~Y0j{k0`e>uwQA1p)z-QbeOs`qF7`EG^OA(ZSJ)2~w#Pb=7JW&(o)XDYI(3T8WG+ zgR1ZOP$;DE?da>{_&e`X)6klru3D{nz^6*diy+!G427?(wa%3*m5;R6IZ?)=rNSTg z-+kpxYC=l_!Q<^he*ES6VUqk;Ki*`8mu9m96rL-t#*zKpMEJIBoB f+ecijUH;}TA|M!|vB_XG00000NkvXXu0mjfG(e8G literal 0 HcmV?d00001 diff --git a/emojis/1f43d.png b/emojis/1f43d.png new file mode 100644 index 0000000000000000000000000000000000000000..2723d5e78d3c435856c5e2313e485e46e2448e33 GIT binary patch literal 515 zcmV+e0{s1nP)K~&wrKWh_l0D$2)mmc;?{#`C-GbAAql#&cxJgbAHAjOmviXaXh90Zpx z)~(dR4vnrgAhnF|v5rM5;$1U>2<7*Hp{NuP&*pN}8% zh7r47DBL`k%}xO^z{jtSfcDF3b^ZR@+ETGnY2)(Yx-v15U7DMF3Z(cm_PlB4pOi{f ze=eOq_IPpe8F0#~?XvNFortOt2!{As>x0dU;wpoRLPXWVdBYelRw~Q>TeGu;TsnQ@ zORviV^A2{S#@@R(7-z?kBngk>I6S;}m-^l=Z>z63J$9Y}Ssosg<%*Ql^)Xz{Mx9=- zi|1fpurFHlwMC1Ak8M1?UYBO0jwh+>XC(f@5g^$@Y~o6!GAPOr9#zxP^f-MnJ&qcU z;Zc+!5~&QHrVyKcTL|mwg}pYumEKwq-ri zqtUNPT@M1^fX_e&=l~ty6HqJf>@442S-G}aF2Cph@Ew1{mZ=bHH?{x(002ovPDHLk FV1ksG=x6`{ literal 0 HcmV?d00001 diff --git a/emojis/1f43e.png b/emojis/1f43e.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb4b11ee8ea9d04950ac6e6f4420d6ca6b3276c GIT binary patch literal 529 zcmV+s0`C2ZP)b{+Pz!;Rv=qAl5yxNdt@4lY}io14GF zUZyy6QEE3@NlNmgMO)Gk&B2t@mXu}9*!jHJX4q1`o+l?)m)*298%Nfb=g&^r-H_Zl z+go}j_BOC*f%)l`H8)+q?Z#8nn9ei*QFF>tURv3?{o;HY+ZLGb%=YHuWZG@CwH~<# zKmWS4d#(Ctn#=yf?7_9=`=-$^n!bw985g3PczYVt=^?K*Julspl9G~=8jUTy-}H~h zdr6-YkCacwH2V#2gqLVSkf_I=!X5<3( zrB`t!$yfBPQ4~c{6lE75Hda%wH$Bw!RCy(G2fi!YIk$e)0+G%oZ{m!7-N4 znrf=4rkZN1Y0DEh_Nj7v>yJ>5PTD6r@)ZoEhL{U&nCDlXe z#fxVV1hI!4q{j-L1TT6J#DmydK`+&tAZQf=J+#H3iJNSi-6=cC%zLl1VxR`Gzn?5G z9phhw))RA$&w~$3z&7_`AMZ>u5&#uhM7Ri?LgX~?8TVnWjVP%x(FaK~b77Ef*gVe= z;ZsG|5V^wt(4xr2nCRl%+{xwDVZ*jtk7A6aWIg^p@11z>@ZRCQ!+VGK4(}b_JGAuj zZ1c#wnNzM@yG4>TS(twoYb%saiRu?3x~OVJ)go%1tXAq1jif~*X<;K9lO!`PiekO+ z+9D%rW8%sC{`#+feIHeHX>z*uMtY~0H)rM+ zrl&gbAnoE@!AM-SY;R?#^6*$v`3`s*p{M<=>|`Z2V+RjU32;zE-uiQGrS5&fq0R|Z zEqmIX3A*cP6PTtX$gVze{J)*|MQ&IVwTzlC2^5ClOG1VIo4rQ5yne&O;S_b^tePsRcW-~{=^ zsw(?A@6HXg{yW)DYWQzKL_buKt2P_v>{p4+^MP<81kXMx@Kf;NQl1yzP`V5HWc~|j SknGR^0000}(!Cz_0aPRv3K6OyBKM%Ep}vP}f5^cLoc#vo zS*AmDQPf;ZLI!p&wb|0UsSC!sRPh5uH0fKHgvHpF~p(uR@SJ zAd(Sp;56ZVprIpOeqIl#;w}3Y&0BJ z$n*TuqiWUT`FZvF3x|BfTCKL=$>O5w%#3!s?SQpHsZ^R98XAhlV$tyMumir}t?13j z*^#eFk{BHu6GHGu6wQTi-?zf<&)u1wot=AGmLeq zr|l49nie0Hv*Jo*5?gqUT+ez|sf^=#~u&;rJOl-zNthOo$Gi`u+I-iQ9MXvWHg) zx{o(D1>J6U9VpV-+*~@Hd!*RNxNW!GZUnlF% zxC^0$#jm}e=NAVG1)~?(WQQ&VDDb$;T_dMkoBdXso&Jd|(d0Jfb{1U|Br*=B;(}Z4 z_11cC&CT(t$l2uDMi&s1N>Nr-;d;^8(dsXC*cn^M6HOZYcss(U{wuV_pV1d|u>Mmq z7RyuWu+!Ob!e3eL8Z}Lv5+QE1w>0{6O`~WgVPI}&iH8R<^EtxdF!u+CSl!4lvuaSJ zYZ~n>zGfk~E&-b+C4Uo(#d!GWDS1P&mja|R)q{5*XIGR`6a}g@WQm>XP!G~#Lt1Q9 zhkB4Db^-@AiV6jTiRowr#gHx~%dzE^OXEU3KN;}3gB}Z$@dDAdi?{+Iie!l$U!_Ly zh=o)p%j?NVB)PV6K}xo?uFKchv9!LG8lGGFR;vjb&K-4%3Wo)$Tc|Fxa^7p9%WE(@ zH=ld+{=>agCff}p6d(qMN7+RH0U^Xy=K;qlht29yD3#9UzN9m`mrAK8K#W~<{-l6u orPTChD$Qmp&A&+YNwQDB0O@+rERo5IhyVZp07*qoM6N<$g5@(8asU7T literal 0 HcmV?d00001 diff --git a/emojis/1f442.png b/emojis/1f442.png new file mode 100644 index 0000000000000000000000000000000000000000..15158d254ca4eb8a5e078851af2a48d81add8958 GIT binary patch literal 589 zcmV-T0QHil9~0qM%JT5Zysgo7UY! z7tqdCt%@RWBkf&;AmYM4EWt`?)N!0SAMewd(45rYPiCg>a=#%u zCEz{AG?3D#bo<6AeeNN=$kw`J$?^`Zc8eaZI{Zld$k(G;;2~m*>{7%)48$f7UUfdT z#yX$3@r{_uWR1#X4c~}KzPH()YhK4}8W?7mB7jhk2ceS>rmG#Q*M{)J5jx<|0f(1Qq7ZXq_pQZ=@&WyjU0t#L=90C5fA~95B^kS z3=g?uZcJ=Y`}uYmAZ_B*9|xn`pJm>?~3fm|qI!an<$Z>F^8H;5+& z@r{^0@r6MOufg8Zr-T@NzJ@g5M`L^=<}iDXVDu>=fqzVX`Fez}M;u`T4YM3jLfIEs z!w7(K*gJx@IG{wzKCu-OdWc>jF=KpFj@$0A2z&5x0am5C`Hw b9Ejr&7E!^pr====00000NkvXXu0mjfqu>NS literal 0 HcmV?d00001 diff --git a/emojis/1f443.png b/emojis/1f443.png new file mode 100644 index 0000000000000000000000000000000000000000..5e0044109c00f87331c7577496d7f3eb121b7549 GIT binary patch literal 483 zcmV<90UZ8`P)>@<=R?@@bu%ml@D)Tepx7(UwnM7F?zUew~b#N z&mX*RZFj2IXRjW8c6x4XSzmlwzGJu6W^3xm_|~n-@y2Z&L*nz#pY0bvR=P_^j!%EL Z%O6$0k>k~6B9Z_A002ovPDHLkV1g}-*2e$< literal 0 HcmV?d00001 diff --git a/emojis/1f444.png b/emojis/1f444.png new file mode 100644 index 0000000000000000000000000000000000000000..ea5cc01a7a5736ee27ceb2c63acbfac3faf22d64 GIT binary patch literal 523 zcmV+m0`&cfP)yR2y5L_IZ(K>0JT>J}yi=bPT zwm3Vf|G>qMK@@_Z;HIb`NYDnSC{nDbZM4UHobzZn0oxF|ICx$BcQT)!VVDZ8nx8oi zG>9FHL>~h^hPc}cXV^_s25x~Y0s%1}ct|8?ffhR$8wxfQY$(`J3Pz;{vPjGad}1dt zT0^wJ4n`3a5jDD?R-YkM=@S8G!C4StU>@N)Z~{e8aG2-_=&BkyMSjwZ9X*V9XbyLv zNHRM?U;Fzez2+x6^#<+NZ}+qQr6v&%L|JlQ6XBD0sqR#m9;fTI2wpwn*V8++gKff2 zmp+^DNc!W9r84-L3|`3?yS06~^3$uj$&R^RY;IkCvHp_Aw~w^LE_+E@kGX7-V}%M+ zncNMB$jWRwzi&33Ki3I+G+Uqf(Ar=l*yKkypfBb5Sfy$LKk&`{yL zAVI>q3+3#zl(W<9L4j)^7lFv3fEMJOwvZxFc(Q~)8S zz#7UDa2HSpoU)68+(Wr9Xay(}d#}hE&|`=blo5JB9jG%PD5Dtu(Qid9m!`3EGEo2k N002ovPDHLkV1nUg+R^|3 literal 0 HcmV?d00001 diff --git a/emojis/1f445.png b/emojis/1f445.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3486656b0899ddb43e620d82e340f56b009390 GIT binary patch literal 423 zcmV;Y0a*TtP)4cX9Dw2X_s?BS8{~#Awdf!sQd%gu2o55plY;J!4uWexNXLEy z{SHbOmw=;#sJIzgLm?26^fb-g>jg4sP%}9BJpBLS$2UIa0$3humiD`A$=mA8gP642IKSZewm!r?`} zlzAK&qnT1OrDjUa&{f=|I?9Nk8KV=FO{`%@*%H4!#bt39vszx^*oaO;@1?Rv?nym! z?z(~U8Z-KOh&?<;?@Z^oh!^A#b7aNeW(<`32FfSAb*4#>?|5fu&LnX~5Snuz3@!N& z%^&sA(2B{v_@zlmNZ#Xz$-atx35lkPD#~Z^$Yk5fH&s+=Qlvkerxur*{5c;GAIj-DN9VqYn(8dY+K+bN={d(9#hVf00000NkvXXu0mjf Df)bm# literal 0 HcmV?d00001 diff --git a/emojis/1f448.png b/emojis/1f448.png new file mode 100644 index 0000000000000000000000000000000000000000..b9c082080597ac90bb671ba3b34f29707fd98ae6 GIT binary patch literal 445 zcmV;u0Yd(XP)(hEgBVt44{BO`(?)>C*4xUkPkPBLOi!(*6-R zGfe9N2Lc=8Bkl2-iO#Lj;kGZM!)-09B2n)X<NpI&?NgkU4y;NW2z$UudEhzS0>#z zDf_)WydfG1e31Q~PrUduHJk6QOZ2zS0S&xg!^}j-v{04C!bSQ1#4xR_VOm+kw6cb2 zWmQFzfglciUJ-U-BOVKhjqd|LfgsMRZfxx6=T*bJUI3~%E4s09QNCj{SIPqd2gdPr z#!U@Ba;071fZ9%{zUIFPYS_`wFXOQ=sv-^Xx1*${CsJDBpbiHqO<##d0-t5Srxkbv nelM>U*HW6kxS1OFLq$nlDft1MI z{)9c!9?Xiv_{d0_jnWpYoqX&Vd(dP*Ps+ zz=zG{&f)N&KLV8U=?S<4o;Ce(XDy;HMPt_~@+cY)2bxxA+f<;0FQ#RmX?iAs3)8aq zg}Kp|X`qB3WJzoe1%1u9>lb86?7^L`sKyo!$y9bv04i`-Ilq27rKm;@2M=(~?{dkT z?1rXia^&Gj-ejZv&Z``x4^7J^AJ4?%(K3*xu#32AoKt`|ab;y?NsM>2R`mfg4vLzd zpIA7KQGk~Z+q<{7an*>(l4u0{<*&d4kTNZMZ)W9WJ#l4O{9EsmV}2OMbCZ(*0000< KMNUMnLSTYmzPgnF literal 0 HcmV?d00001 diff --git a/emojis/1f44a.png b/emojis/1f44a.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ae5b29b485a637eba2f0bef4dc0e41db15fa74 GIT binary patch literal 496 zcmVpf4e~6np@e z?p&5Wfw-4$)0RRhl#(vnPMV~dx##}Q9SByKDy84&eZ|egUGJc~dAK{pDbiB?^YN+PV}<)B^k>dwTd ze?Hf3)rgI9MBXjLSBPxs%H@+Y^JlM(+N*{6(+gMTPcO97-qJUOf`^ta?#;B>!b*gE z-K^9i`}8kiv`0oEA6P1zoiuF|T3Ro@D8#vNT&@+vWh04NHC#XVP)te+KZ>|rNpBd8!l*Bs<#_AskIyjmkAeJ&{8`Fs@L&ES_lVCB mR`Lbz%P^|`-wAo*E&c`#FsIN#E=A4&0000DW`K~!DAPl%Ld9KiAK?|Gm1o%em4VHhq$=f4iw@rZ_2WI(SmsO8#2p&oT(?*zQ9edw{qtjVmn+B#lau|36I05=5 zLwm;T!;fzafA+aMWs=|s=s$>@WtGkP`bub+8hF0k67s>8kzh`R-x!L~^wB%Q&w;qi z@`<=v{oXITD@(sGJOC67*=8!o|LW=CP-J@Yo@lZj$)~Dp1~P#egdJs;`*19dfv9Nb zN!+YG3w#5p*%dPjY`woKKh-072Dm0dSJ0;rUh_Q%N*PpbRAxC*Be^qbB(qw$3GF*f z_u?``-)*l2yMYm)<-I1Ve1>AnEFVOTq~dc2P6=w3vXhtHOTFcV%Q<%EwzRubcq<$+ z-!i0yKO=^ZB{bt@JNHo|F@ThvoVZ!V=MG=EzsH^!eG%b^3F{TY+bf$9d72x9=Zg!= zd+|!xh{dEqPnM$8RmmY4Cp)lFjLB>`j9DG2+43PTc^O<^N3MLS1~2t&3WVp2=l z>G|lc#2~0TJ)mBlkthI>=U5}CS+wuC$)pxvI1q6r4J@jkNFYB*U@#{-MF?zU9kB+y za+9e9M0Y14&{EauL+AQO51q^F=FGo-04%bOIt3Bd8KAoFLXSQ$31Us(!{R_svWBiG z7(lp{*P|$>eqCJI2h0O67>0hFUpWRWuu7d$8Be)|k<+auKl4?4@ao)kKcnb-z`@|j zmv?Zb&};QjPB&t+2S~*VVuUsR_~?A`=PwKH{i~&J0}cqXTc8y@vUfWkn7i&SW_|zl zctr+@H7U?nIE(im;{5BQAtxtl=8LS?Lb(QBWXi}s|ks?Kk6e&}Ow$&pn9sOdQC$^LqkJDbBE?yx4N`llQP~p@{i;d z2?>d=PI`;dwN;gC;w{`WTwnV6=+}M6w+{{PJ#XrAo%Hu9znSVXXy!J=d*mf?(OkRG zJ+l1xii52^b==FaEv0K$lut}`VlJ=aH8Z>T5P#zRbL*pw4kk|a#?GxRAx}s-)tMPk zJLD@>Us7Kv`-s*y@XpeM7xV`cGqq-}DW_f~AE3m?l6@_-6m<{9 literal 0 HcmV?d00001 diff --git a/emojis/1f44d.png b/emojis/1f44d.png new file mode 100644 index 0000000000000000000000000000000000000000..66f41b44d7c69095f010debe83a64d1ef006ca06 GIT binary patch literal 523 zcmV+m0`&cfP)AI%m%Bb&6(cHu^kz^6(}HR?c=-R|dVOz!nj!z;}+pudkiq zuS-A|=ptPM9&-$i#BUL691;s4j>E~BMu~KXLpe4ea~zI1a058UAKQozpaj(XhZ6zP zZKnF5cTvZFwK*Egw5P&$RO*Kc+coDK;x*zC@ZOPVbeJ-rKYF`ERDnt(#+j%xd7OzV zBNyGPOZQa7MMpJ65;O8%O*xpym*$WO#8d=Gr-)c^l0%IV{G)Zg%kHynG-n`?2~5a^ z3L|y>Yq8w=;*-rWspnE*9F?m~ae9vSFVNgS2Bj$Bk*BdnE(Du_uYs!U{PUFf__?Sxy$0f|{T z$fKIxm6Irm83D0Q!;v5uGRuT7l?tt-3PV{a2^F@^iOfVW#YZivm*}i^!GrK1T8P^5 zkt1vGT506wuqMsrP&Ur9Y*hPWn%4&)kO`7dHmnfV%eRY_awg|11t4e2=;M&y`epJ$ z2bn;e@c`2T#8M^z5lpdeqTc&S^KFb*PSj3RK{SrCnB7>|S7wkgAQ*DSfquC*S2YLY zF~$!Sc4QqpQb$KB7$80%e*z3L=HT{%&^8l&;HHuW#mbEHKf!NCYY@ByJ~1&*#5E!u z2OMy~0S6p#zySv%fS?AR@`tpB1QJLffdmprAb|uD8F4D!f|!T_7nDJqdJhbM1JD~T Z=ofejz2uH#QUm}1002ovPDHLkV1mBt-9!KY literal 0 HcmV?d00001 diff --git a/emojis/1f44f.png b/emojis/1f44f.png new file mode 100644 index 0000000000000000000000000000000000000000..2051be034b230fe86a6f004813d499dcf6cfd13e GIT binary patch literal 742 zcmV7zgnG^Stl-UC(!JIi5sQsR5%PST9vkL@2g&DP2k{6e47B z5D}*gIw^vKgH-}98AP2rs!J(2iJ~GMT1&ynShY4aF=>w9Ip5{Icv>PjG&R2;{djyc zmeWi~?%1eq1K5o|OY&n^xV=V;Ni30{ZjbRUu7zu;-8kU1okEtEnE9)XK4av75c-Oh z@{kY?Z%M%g{>1`$Q5kcn9SM?n4_Wu6HTD1jDXPg3W%^swb(2=pJ#D-&2-96e?v6yC z(XwHp`a%Dr!Si~q;NnFO-s*5aHZr~0x3OIbhkDr}Ti=A-*_W?W*C&x#T zrP1MhfiJMnqy_`P0(v%wsCmQiysyg_Swq&m7Kpw=uCF1CCJ@KpBaTZp^%ik6`n9^Z zr8yKRp7$VX3Zm{I|2>6>CDdSmeEKzD-C7zN_|7HOO@;y(3LqwSt^TB(H#ga5;SGfV z0p&~%)$+l$v#60j?Ls69s^uYn zl7a&P?}G^cAjOak4@;{4NbO2x-8a^ zc-H+~&zIxmF~ZRVs!hnJQ}`c702AJ08;2W`DUryF`E-izZ-0XW0dF{jGY%_IvZyLu z+0i^E8|rlNyywzi763^g#aMy6QqN}Sv;NxPl(TNJoXO6n+KPBf10)H{a=52o_HMIC z6hxvR>%OaOsh<;xJf!D};`L9j;0lXnJa)#8iK?fi%QfB=j>eaZKf3e9pXJrg-MOki z5<|6pkR-UmS<@-6x?E4V(#)YxWZDLOB!iZ~p(SW*h|(L}5cP6T=hypmE;t0bIraJQ|C7zv*Fb2X%w3up zzjGyoTalZDn=%^bAiBj5udz?^#RlCvOIr1+gm zbhiF@@aflAQ=f55MLz`(;be`hmqd7dh!Sh2vzqB;lvq>$AnPSAoUDO|qMvGO_VisF zH0@5_`$IHcryLZ79Y=Xk+!kX#i!*I1n)#?aC~kxuM>#046OL>rDNNIDTfDA@Q?&)n zy$L5A#cl>7Epg^5uunxI6C;98J>i6-+|P-oY96nv29d3xY2OEN$Vj=D6LuVjVj!jx zb{yqi&PWi4n5O-R$d*y>Rn>O^Wki*K>;k(SrRue--m8&75F;DFI+bX;0m_Ktbp@|0 zfT9qcsdH#u3>y*%7Ozx1=pu&u63KPYq2~Gu)i;cYY>SmU5=n#7zf;v0D4vSdq~uTv nbb&5Mt!c&@$1t3b;e`GI2hPmEv;I7s00000NkvXXu0mjf5Y7Gu literal 0 HcmV?d00001 diff --git a/emojis/1f451.png b/emojis/1f451.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef877af3df6a37e9f045da1dd5e9106bac8011b GIT binary patch literal 554 zcmV+_0@eMAP)Kh;v_7D3$2pBe{iImnEhq>D1cqgAA=fh?007YQU9UryK1~X7KobRbMxZ7Qv}hYG8la$ELjDG!ME^w4 zF5J{ls6`-2!#c`PQIZ@o(X>*ZbiaJ15e*Qy>Ky;S@aXP!f6&$3kh{@bU)7@^CQopi z_}nkjGu=&oh%pGEAGeU&6|#0*!w`lL?MQ@3h=fRR9)n2zF2w-x0ud2WB1^~;vIL(bhDDV0`A3iD%R1XRGA5iYm@seSB6lN?cF7I%ax>a1#xi zpG&=b(P(a=-qG4dUJoib(0s?-!j__5TYG*g5DITaS>N=B7|63nOhIC2dva6sLGbeMcX1)F^YS* zpNcjxOdLiDTF^qQwYj+8cb_niX-s0%j+E#pd5mGqKT7OTVvoK8=XZh99C?7Q00000 LNkvXXu0mjfgu&3? literal 0 HcmV?d00001 diff --git a/emojis/1f453.png b/emojis/1f453.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8980671fe204d0997330a66a20e4e3ad2a42b3 GIT binary patch literal 580 zcmV-K0=xZ*P)#tt*S-PB52W~NQyuyBw=ts!GdzI#3ToCnmmr@?t~iy7lGHsQCT_+`KzHJ-Rry` z1|9(shpPjw12e!Pi6DRSG>O2>o&%>OO2A7FH)_TMU|CWhQ1fl=9VEugY%msAB>O0A zPZ+`whA@O7tOPtYV+1GxpPiXuW)r||XB53t-*J%ovxL1dNXa*P$z%H9{6O;iAa}dX176VoGH6l5j1H~i+RsmK6pe56FHq4FOpsx7@ z<{W#~ZPwpCcID!mCnS!a8NHRecn#keqBthn{ATNKABL5$g%&56%ytiv$@i1Wwi0BT zsc-8f)sz!x3N)2!%BjAslOWSfD%(mX-%qxCh{U7=eW;X*;($1+QeK!|0*XMfyfD2K zM^z50lollP-nX`QZ0v5Xj>Wq>c{5|@#~0RK-;b-`Kix$(4;IJKugdSW<#Au1vD(%K zKj&XiF1(tRbkBPF2S^+Py9(+B+XkjVv;4y@0GB`^*rH_5fGz9pJI_%#j_42Qtk{a6 S*dsRp0000F(I(D#?l%QMQqkT5PSdl36T((BG7Uvn_-&u<_@bzEmn_OtT%URq_LfT_7$Z)`z3RVO%wu_-Rv%dNIOb8wVvs@eMS$^JMBmMmwmnomd(>Db34u;++ bieCN$9H)!8RieW600000NkvXXu0mjf3%K>h literal 0 HcmV?d00001 diff --git a/emojis/1f455.png b/emojis/1f455.png new file mode 100644 index 0000000000000000000000000000000000000000..151f87d1a6a36042292fd70c497a6774fd0197e7 GIT binary patch literal 444 zcmV;t0YmQz%e)g5;wpd zhj4}H($Em(fDmXSCB!)P{>*%MO^{qzusn~jp?mGFcj@J!OZ-e@n6W{O?blV=N8>R< z$pv}%a?(@PeUvA_eGxMn-njj)DvSM47E@NN@7zj!XMFtS(*xC*1Mfx5TQTO1JbL|M zIy=d4vcX@->Q+mTh7P#1PoV7>iB(fmzPaCO*yhUp~#Kip9i;$hedB=0HJvMJMacRpZ!R z-+TVGEEca~h~GgU(}u{4swkc<7xP0`&403TiV$f_HO8tuWyK-k_5#70000*^Y-z=S9 zd4RiGI@9iHZNI;LM%exO$^P$Oy1kSB`SSj)u&8rx^@_HrV#VCYH?N#qT|<~#NsBtF zN=ro!{ohbVg<`I@17@`6Ah=!Dd=ftt`ieMVi^`wsQ` zgRWzBut7dGR}~Z#BqJ@o{@{79KX|Ss85I;1bV4H-X~{HpD8dbM!AMIbkw`tPYYSsx zY|*;ZlSnFoK)8fujU8-b8#@}y5iUg#K}8@0Lxjc_rkG+&Ba&eXDO3{a$Vkgfd3NBy zfdez;nU-KAk#s_u8)?iUJDZhb!KNrP)Q*ipI#Okj^l@F|Wu?5U6}6&L-r=Rj^`xJu zB8kYWIAtyw7qXzBkjYr%RB$y=U%Yt>@d;0`6X7f#1+N2v@K;7y&-57g@B-xztUisp T(}`*E00000NkvXXu0mjfM#|fp literal 0 HcmV?d00001 diff --git a/emojis/1f457.png b/emojis/1f457.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa12a000a1ff5610b55628b4d11b0ebf81d262f GIT binary patch literal 506 zcmV)srYgA^j;lXEJ7v;AFK6dZ1Ysn3{3<^<>^Y{s`=~KtIR}IF z-r<3&)iTuYHR@J-J*w(H{xGJ55JCtcmV)gUd%KHuyRF|e`c0$N?s&epyAW)LI1@q$ zAryfiStPd)U+yo3P)eoWYxH}Kh@z@02Y)?3P5wkKl1L>7134JXg!~@Mz3!puQwxSN zQ)U{Po?FoCb{$#957LaJ1nr3U2A?=`a&BHJm7!Lrqt)pcic(B}xZoeF!luxvMO?up z@6ej+_!n!LE*E@@pZ$M#qxi0n4fzFr_22zQUX|G`6qIMu8g8TO{kp0@?kEP)}zsYfyaO;7eXFfKh6GfFYH^2@1Fiv2NCgTgUDJT^-cgG?%q*_qG{9-V%;FlgxP$kOlmVs{P{5*O1Yv@d zcL_mYSl!rU?!`Kp)s0Ou-Z_H6kg5Ozs71&O0LMsq=O6^{66W82A&d%a^Dcp~kJM3M z0H_6Q83Q6x-X*k~4VsNQVN{@(cL})&7$apB5U7wd0bH0ki47xqi3l&3tMsTSys`oa zOp+^F|~|tX|qLOQUHr$5XQ-E#vSHAC+sT-kr6U2r~HhSdb2}c$hL6>V^#F9 zAS2`&ag#^S-%;w{gSCcCk~r#(Cchg^`u4JIMA2a@$T(ogd6y8k+Qh9k|MD)OhY66g zRzQJgz#-5BQGe+ZaFHEE{iP+)BOu>_4Fzu%7Jvo1#1zXz!@yT|P%IDK0Qm+uQUX}v oFAfpUe~5?&96bVdDPWiW0Qp$2?Q`GRP5=M^07*qoM6N<$f1r;P)DI4NB7>LQx%^+zcB4O!7!~-A( z34=+5Q6e1;7U?7r5>LQD{E5Wi&(Pj;&i#GdtGBdb^Lpv{;S20E)tOzMsAd4Iv5S|* zh}PI47J5r8^p;rYEivC)nx3d;u4BJ+&NyeBGtL?8SBC50X)s{Ggd$J`il8j3lS0o# zybA@PAQXfG5pRW_rJ_0^2XY_>X@1XsMr`PGs(&pyXSZJIaz$dXlnw!J7zzOb0v!cP;7B;GDhp+yER<288x|1 zHY8)lJ_#8R;#%GGKm6GE_K2bBso8U7lo#3JY<;r%CDl!b5sBATS>FN914=1f+N?KL z8JgWQR|6Y>j2^TuUoe)+vSlpitX1GjJ7^6w(^KC4xTY%5Ya*|g0{)Am0LeQ{`$A!T=s=gU;>1>bjOov}1Gvyb2G zr$rP825#=vZJh>#0V73GP^Id7it4n)Iyoc!B`~1`HTN1R@ZD2t**lz-6EhYyvlh5JCtcgb?BP)-sI=Q|B|~m9#EucyH#0uzWI5x zp{k6C2+K>$KilU{Jp&R7+?|{E`6I|B;7z(W>~tCz`L>e`$enJs{n@2C;<~$za1Z#v znA0ISu?P=ESOemyYN^+b(`?Rqa>IcVRV}&mDDPEyit0-sbG_~KTCG)i;$w4_F=K@j zon!R(Ge#;i7Gs66ScLUKUvKUG=&zaKK{)Is>6MTvMJ_T-xX4fxGNqTKm$Ot4jd5nf zd9%8kq@e5rUn%zm<=1YKVyvwC8N1DW%>-Y&XtCUB+C0=+5Zo<|Q$1 zPDTd@6IU?a7FoK;z~UuQBtTF^liq04)6?^R0)eCvraq56dHRflRI9ZcrBdn9$Vh2b z;S$i{0Cr;ZB)ue?8WwA>RBQEXp63k$IZ?gm>dlX!Z-5Fttd}2PS5B1&iM5TX)VF2- z@ZSm&MQq7xCOsV;E7Bf6QH=|^yQ1zPXv`L?t_woeYlN?ZS96oer8Txil?r}7PgJep z2LY+iiyWGp&$rHv-LGH1IOgCM;0$Uo_3(D_`OIW;X^m}htA%TaAcFXo@XrQ2oFlXF zmBP!nQ%2;v_!fip(!u-kO|RBqPxxyc8w6~#*(}|91J~)WC$aof2FeT5noMB)mG!f! z?<+^yrBQ_V7B7=#hX{#cfq1h?ugv_X^T{tij@bO{hY6fxkN7_6p&@$tg#xJ3%e2E} z{$2Tk@iv=h_@4;-h_FxCIc=ot#^{p?JEsijarz{&8#gF}^l#VzKK)WH7=+*SOK2LD z7xYPy8LQUbL3LH)_$nf!s0Kh1@Bj}GK!F(OAW{VuRb&>C$NvCafv3>dVs~Kx0000< KMNUMnLSTa0hxMoc literal 0 HcmV?d00001 diff --git a/emojis/1f45c.png b/emojis/1f45c.png new file mode 100644 index 0000000000000000000000000000000000000000..35b75737fb1866ca035da90af89f960ed611c44d GIT binary patch literal 459 zcmV;+0W|)JP)7Y`#4Yowm`xt08a$zk0^Lnbe(*3eFF)L^Skv~=qvxoAZ zUTzetbInHXCXmplJ9Dq-tAQR|y!@i_?8z~;+u05Np;-KunmPB@j~|{|m69vKa$u8g z+p1m@?$&idEgU}R1 z5}FD?iQ$z3P-1wc0DNV5?Pz>M=nXK&-gFFie*@W=f@aa)U4j4r002ovPDHLkV1mHf B$I1Wz literal 0 HcmV?d00001 diff --git a/emojis/1f45d.png b/emojis/1f45d.png new file mode 100644 index 0000000000000000000000000000000000000000..0157070ac74c5cad411a5168a97cbc0c4d943a0c GIT binary patch literal 359 zcmV-t0hs=YP)@9LC|#`*TjUw5i5H(?pIMO1iiJi_vZot3hHinC!$QSj?_M zCwE}c7`joZR8wt}{ySflkQlVl-ShAd@k1`=yG${cHGjr2h5^D_5H%Rl&HXuvaxIuE zzaDqigM&_SrGS%|z|2~bPJnB-P^#=?ZYy^d^YisWdZXQIiwVq(w^ls~TtF0ea}TvE z6MKV%UyjETyfmH}MgzvFHlFZ3pOGbSfdhOQ=Qit|F|wEnXm*7bK@~Vk&u17{HXL>!)5TGFu`x1vBpFgp8i*)HRbbKipl=w68=>zM-+s|=I2ZlD^fU^)JSr4S*^G$FuXxKvTY}+pC(p@JNU!_86bl|ywh-i(aG=iy254k+8Y&`5D*3k#CP?` zuH51M^R3VsUp*SOA+!$60-b;Xb)XJ-;7M@v2JS{(Mug0=e*gdg07*qoM6N<$f`+D; AR{#J2 literal 0 HcmV?d00001 diff --git a/emojis/1f45f.png b/emojis/1f45f.png new file mode 100644 index 0000000000000000000000000000000000000000..bacfc115f459b2a3d89b168bc349d09c8687a038 GIT binary patch literal 298 zcmV+_0oDGAP)eeT>T*iC77#aBw+BmwTD4EIjlXSjifiszILB;?sU0&No zN)4`!=v(+53;D@w=PoW+Yui)R`jx>kaKj%QvO}<@01@bWdwO8Jlu)kBM!oLi*4RX8 zb9!#^!r&a^9{2*~2y;M#f^4Zp-}`fi;BzYV1qZYRZG;CrSO?g1K+FKOMiV3oVju=q wfK&I`dkH=Sh7l=RbqDK{AKolu2(k3@3q3(X9f)QbR{#J207*qoM6N<$g5bP;xc~qF literal 0 HcmV?d00001 diff --git a/emojis/1f460.png b/emojis/1f460.png new file mode 100644 index 0000000000000000000000000000000000000000..5035f7734ebdbd083dd36e1328abca34cd44160e GIT binary patch literal 522 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|>89 z;w?RB-*dlMhW)|wuRrUGeZ907y(|?7oa-Vn;Yz}aB@!Kto}CBPbb2p7^N%v@4wcB% z((Pr_y45{HZS$7C(rTv5zL;Sm)$3+lusQbA zq9>}HP|*2t?$cwUsSEEunDS2f~gx_s1myKTK)H}m||hre@nUQXGccw6q|!bgwA zbfdOpTwHY2W4B1m<@+%Oe?NzB-uLI)rM~nNwt^6FS$TE&oqf})*6fnky0`b-Q}0N- zuRCmKrmB2v-Rvm9;%LA(yUyjTn@2v&<8S-OuKv=wP+sn3=9073k%!kWdBYL^Z<$_Q>gR**Yj13; zpJcB7ad}3~-Mjw%%C`Uewod%w(c?17%ldENx|^7W^anfZs{(wzs@!&lka zSYDfNox!s^*Ei-TFVj4q)t4taUDith~gIJ4iSVtnh=jZqGh&_4o?lfIhGu z%5tgd_Fk4>yU#;eEa#7x&#@=NWP>5yc>Ct6h2X?Fv_6u=jmAVRO(&w!^g=Y6-VKAT z`OU%NX?7W(2-aap%PbRy$}A)MvRT1LA014nH=E*fcZSN?RXfodZ(g2yv6bhqiadX) z{Hk)^pA?a^MYnge==M(8haUSyV~vJY)l8&1quyUrK-d#3@XoN;f_sFQS=t9~xG6Wy z=UgqX=*u?-i%aaVR7L%L%*NPetYe{In@|$$sl@J?w3B0uC+C4lgoK}DO{XeJ4iRQ%=ied*rD7sj(2%?A%&c)f;#g{K2h`Wp8 z=&FNX!qv&eJ##H{5BlL~yqWFd<(PybTUG;D7@TIN-#fDKG&p@E`vs$yp*s z7%(E2TC5O@-ww&;BUXs{i>W%f#joNhRhy%Q#JU&8-3)u|UAR zinztxc>jR${sI4}18*#|$jmS^%nUQb%rG8At^|@ zVs2aU^kjC-U+$lAKDzuN?nbA()zLA-%aJ1%R>=MIddWB=q({_Ek|*(^b|yJF%Xmopw&Wf=-O>6{ zr&F`3)4s@Gi3uNI74PGm`nmiW{hin$ZXulw8D46wI&yvXmSaYg`c#?!W0DKf#tbP>)4g# zVGGwqe@J~1E>zAX{%Adc?`$(3T%HTUmy)B{;~zPM<5&-8aXS1K1VJzeg1Deoamm6Q zqyI79w|tGLsOa~Jvz0yR^!%u21~sTb4Qfz>8q}cv270ouJXY?3UH||907*qoM6N<$ Ef(S4AOaK4? literal 0 HcmV?d00001 diff --git a/emojis/1f464.png b/emojis/1f464.png new file mode 100644 index 0000000000000000000000000000000000000000..72a1a15fa75c5a240755c04f84d92e674fe305dc GIT binary patch literal 412 zcmV;N0b~A&P)O{fkz!+QWQ5gTxWj+;Bq3c$q&kbM?+b~}3 zRv86WSkr~y#JvpHft7W|h!NumaFOA5CR}Qf7AXyBNR#8h1%}(9+?0kiiZrBQvJAXn zxUV5k5fBOr3i>U{EntOhB-|%HCPJhTAVB!#bKow2_8z!LpL*!I literal 0 HcmV?d00001 diff --git a/emojis/1f465.png b/emojis/1f465.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd5c38892a718e0b97cd5db40d0061ca6a00d70 GIT binary patch literal 514 zcmV+d0{#7oP)SSJTR zfrFEXegL6^bP)UoBIuxE3QC6JqEt~V2CGTTOV88XzEYw&$#vQJ(h?&{nLS~;JU*E% z01@a3=q}LYryzIqI3vu0Jpyv5iV5FkK+009ETFV}$_g9<}`$ZrL?9{imbmG(kVJgiayFgDj90r|E z+p25NSH1Tafeq-_s)iDAw$o;gCF{lIO( zoB)T!bbjVx5Ckj4I6RSIBAcU660B_43q;Wwjzl8K{ORJgAV@r=Piky$Z|3B@2Rz^b z4|u=>p_!cvHr~AE4-1p2RK+)E* zh!|AABJvS<4{XrJO|yK=mFF@-N2FWQgP2RBJfOWkAl*;2fko z;Y2s=?vv>0hF{x|>VSL>zI=o25-6uok0YVKF&2i;LJ*M1WjWGyk|P7B;UI#jyakG5 zXkdh>e3RHi5YV7r5hJuyuZR&a0)-w3!&~IjFATZN6ouX*#XcHJI~A7a*Enu@evQ&j zg+!qj^4WecQx0SgBeXbY=pW2*T>oGO=L`uE4(XnK@^E+)w1C))fCQmobfQ4R=IQ}I zKh-Fl3mBa!5QK&%54EIMq*4`3P?2QE>k3L-FcB}I!Wh|sbQI*kq0aY#XzK;Fg` zmGyV~q;iH--p~;3c%qVL{7xDhih?cyN}VIB(zJrJ*KBC-k58pJ*z!cXN<%R#boLr- zAmIHQsd|mnqszrbxRz;&_p$ya0Hb9325|YQQt_uRv~qjF8X` gU=?e=lkTM5A3=Ml{-nk#$N&HU07*qoM6N<$g5UiFRsaA1 literal 0 HcmV?d00001 diff --git a/emojis/1f467.png b/emojis/1f467.png new file mode 100644 index 0000000000000000000000000000000000000000..91ac83cf24e6d59df3bb3edae551e4589b16db44 GIT binary patch literal 623 zcmV-#0+9WQP)yVzyVJLRC>2Dwn6LUXWFOdqM0JfvnT}r z+o@Tm%ZNOaY>M%gW?iM;$gN&oQQ5e?Z{zm9%Ieh>^+s;2Stn+<42PSU$J@z2-AlH+ zKl@KYVD3U;?m|I8a;UrelLrqk`TbFfI`@sdp)B7v+fW(&(f8+CN3nQ9t(jPH0xqJ*Zy)zzw<;TUz}2FMPu7t_Ifqa$D})vfbgbD zXN%>fq?`)1R#a<6&*|+aovmOjyk#VM`5eF9GxDpagO1IuE9ToDn3?_v3nuR4TfN?o zQu-QakvY2*Li+A?BMl7E!%(Hjb4795#9!#E9Q11r4oYO${ui@Hr4qX3ZTJ8H002ov JPDHLkV1fYqDmMTC literal 0 HcmV?d00001 diff --git a/emojis/1f468-200d-1f468-200d-1f466-200d-1f466.png b/emojis/1f468-200d-1f468-200d-1f466-200d-1f466.png new file mode 100644 index 0000000000000000000000000000000000000000..309a9ba366fd884542f8b4fdab4dd407536f85a6 GIT binary patch literal 846 zcmV-U1F`&xP)%YW2)EoPo4X1;6ie|8*v9|cz>45ooVQ~EWY)WCvM&xJM;&;6xe` z@kJycoup!?S@j2CFvDRjV0j%F$)b@SVCw*yzR})sbYBoZ)HtLYs6KWC7bNPVmKrIt_{Pem++o7?ve*UE3~mqP4ZT83U3zK`OTo|}66g_D2YPbUr^ zO}X)XjBua!-+!InEw_3WHZT3Myy4l|Cl5Z-ODpdf{;qPJ1FY7D+IdpHduRRSim|YL z>H9a^pP+ODJ(VJM<{a&6Ma92rr$}K4Rc*9xx3l6arAFW1`-_?uQi8yYr zh1+XkI|jeCC#jL-fFwT$1?)r|x7Wh$wXhw7htc!YNTShkyL1^d;b4UhR_I_R96tTy zB3%M}_UHm;!odn1tkA(sINUB>rc0w^t3AqmaSl75!OmxxFV3;2#!*V4fU0(y`QjXQ zK7*alFkhTwhf^q}Feb-RjAVL&lPn&2bh+LT(;k$nM?{e@;*HX^c;wOLdP7|Bpj18L YA52Iw(xIL|b^rhX07*qoM6N<$f_OiS0RR91 literal 0 HcmV?d00001 diff --git a/emojis/1f468-200d-1f468-200d-1f466.png b/emojis/1f468-200d-1f468-200d-1f466.png new file mode 100644 index 0000000000000000000000000000000000000000..4c1de049a2ebe9d9b8a529e36d22f865cb7c8c8e GIT binary patch literal 752 zcmVs%?P$@M9a+W9b zm%v%}C^ZFY3ej&Hx}|%;4Q zvn+5jFyz4f5_pf$Jms?bpoi*_5f~n#xVA+(?gQ6B;y4BskG>RO^0@j<+-#&I^oL9s+#D@rr$-9|RMsO7ji#ADm#1aRAaWJdJ3(ErU5jAH zM>c*UE^odnQFMxy;PxX@jucjyf_X-Uzd zi~$jXU+xk$Y&dG!7?SQc%TZIhmRgB#1c z9Bm%plb`3uSIT3{v}pdbQXb>t59j$py@$4Ku3Wy$ZZ%}L8gk|1HLxs};~BYl>pUyv zG4>cb+^Y{#(I?pUS2;d6jM195<8#Ao1!=B_r&PmF(Mi+APYj3WzZPK()lk~~+?OZ&Rrr7sYRh6mEcPPs`( zvk_3-tV3@P1|rqD`SIR%0Ogf{lXJuTt+59|A2D!qiLVSdv4HLJkA+~Xe8*cUoZVdyut!qT|8(LTs?}@y@a)AC1FLtFj`!O$ zvF=@r)-K_n8@WoQ9s6SE%uhd;2CRXNZ{OBe7cUuy6&17hh%`4Bp&QaY_Xr9<)dg4bn3c#k}vM#iasD!*VSg zH-h6vuxtaukhoN+5oa-+#&RtjH-h6vuxx{0+D}rW7cDCfY30{&TpiQ5FntTh)$#M| zWaS|pAN)Ft=|nMo3)8nSohTn~yiA9-rXJ&u%^cqCJeg6G%&3WXJ5O!g%5LBFVxG4ZvRu=?KdwhypM5ZxK2DEZNj39bbBBI%4T# e%%&l~?eP}`jzZgf8~%*|0000pVIWe56WN7`AShKTxUC&aPwmp=B3IvB847EqYPAU#g?5c-}b(5Uw4v<46k4OOrEjq3Nl zB^Dia^e7GYh(N#RQ{Cx8GLDJX`^#5m6GI>B8$K^B=lNT|zba=={sd^kqhHU=g)h#` zC8%%sq-G*4UpWO@?;9v}8x3Ap6U$1xuI8B5o$jaFS6cfD-RXV?Xs@e@WhGu$g9ZkJ z+a|5nO>Dc+{B`%$zT=XZl8hB6?ilg$yI4{Fbyrm?ciJ278~ctTJT<|I7c$>*cz9Eu zeC6GR+~a$xcXV|75}8Ufa^@_m?h<-f zzJ80>ubWZYB<71WM4DRFg9igL`AJfxQKIYZBF7T*MH(Vat?I#p0h#wshb!DHt`(?+m?iUi;!<&+Y;Y# zD6mO^O?=0}wk09oBIH}xw#0WF3T$GQInARdrzxy%lU}?UPCL^nt(uy4io~)uk(Jf$Zlqii+;G)v zaY4eR-VyO1(1>f-5+Yd%V=cn6&Gt<_6_E3Q%@=-9XF!buaYSZ-zfnA}Mz(}5^Q{e_&VkwnwIh6HUIUJ>N~x{D zR$$!Xdw~|P9jJMS!1x^z7sX+k1p`p3fCv_=38IUh~V? zdOjm6ySA#4qwG-?#Bsy%}22NX(3nM9D;^4sJ-e{^cSiYG<0A*U3T~U0=6ker_{rm}j zH$!4?j1Nv=Zt}%X6F|zEod5Mcb+d&Sr-pCfTHSQ-8N^r{0Mn$w{2@f(w|&gseMPtu z;?jTn2h+LaJ?ad;O6QWCe0Uu2FoGejUYcU1=(19Dxq9Ilm?lBJ#L0)pNavEQvS^}9 zRa(g+w#}~5IF>SK*fknQY@1dmi|g7nGiWlv49e5EbJGl@A}rj|EZory3`KC~rcs_| zvrN;>>^*Se9ACXw8<|&ING#40d{ZL4GfX&c;yqYo`4wCYoaMe6K~Su+XyRe8{iPBErb`5%LN!4(6T-!)3y7S)Dtc_>%uBg7_HZ zoH6>M!Gsd)D};Q9e~5V@t$Cz{;{O~Qx?P0kO|(8I5PhNK+x%P1hIR*xLGd>!A)SPL z2K;T<+(xL#i(o=PFc49YN54uVau)gE4&&adK&V zH_u9U1o9c0dwrHy12{g7Bt1f{A?WlB13R??_M3gMhjrLJxM{Qodzk&cWXJC?&^ZXG zRrWy$6i{EdH0gx_Y^?>HT`2I(LFa}jj{PF)&5MK~r5TUXjK|hmK&s@haA^|45J|uP zJqCJhgPXVLwGD?1##|Q(7nIee-e5pCLXsnba8H9VP;a29R6nFRc64{Sdj8lk&!sKw^O(i{47gr%@jX(BUa zv|nRr?avRs(XYOC;rAA&OJ7VxA_^;&CNfh-`!)LO5Bc%YM?xuj#7@kzCq4Yl9<21p z77BQCF~q(8bkuaQPnM}m4}Y@0?89G{NIYmJ(Ap)r?3+?aW_ibjbb~ByTKfL zcyzQ!r8S40u!*}-;%*e%QEWELbhL-$(Dlc!6LB4)fkQNKh`0`)-9G~eKyYj640hZh z8aPA)2RrVt^y>u%B!~R4#I@C{*s~ez*$mfKud=JAK=6zoPO^CWGO^hVvDplZw=Ywb z$3P0y$%z!>Sr-`PyH=Kgcy^SRvQXJ-(e+&9bczb_ZL7$@PI(l{V68pnFFWuoHHyOg QC;$Ke07*qoM6N<$f*gR3u>b%7 literal 0 HcmV?d00001 diff --git a/emojis/1f468-200d-1f469-200d-1f467-200d-1f466.png b/emojis/1f468-200d-1f469-200d-1f467-200d-1f466.png new file mode 100644 index 0000000000000000000000000000000000000000..45346941a6b587fd1d7b4344d37b5707a26833be GIT binary patch literal 836 zcmV-K1H1f*P)mPW zqDxn#t_X>Vje!YOu!n`A2!TK<14#bF0>qjH60#5b>R6$G@_G~PoQrr#%kp*ot6WB|7g_feyv;=3_l%5qh|FO>-UC~ zkJ=zW0`=VOOn5Ye%I=WsxjD}C`VX|Z#E&#v>$ooI%VE-&LsWK$MA9a?+Zk|OG;HS! z6xba_Fs@^F6{nOM*q09JeqRmv8%U>t zdtA6!FApXj?yqg_S!wHnv$gIP_dF1T)XyrCvcRxbt5dvzW!L zT0%ZOymx>2+N~Q09dSMN@x0d~(IZhji&@;Ng|oZEx4Z8NX{t7%m5bEG6jo^fJ2tV| z1d$al@|VtnF&bdLutY-(W0eN5V-uTA5MDO1{zxK2)Bz3SoS#64GlnUlIU=O$4BQ!x zI?GHYY6Lo*F-%FRn5FNYM@zAfQ}~l$P{-#O_#A^^P{+w1l41`Ke82f3M!>}982B6m zBVe+*l>-FYAsG&i7HB^x5KnoCr#!U3EKthNlPAMiRXxYXqdQD2#h6%%vGM2*MLh$W zK;Aqk5-qLJ1MIxZm|MBZ1n^4inEdKB)TIbVz~`M=#%kFa$b!E2H~#>;;6Bnt!ch4D O0000Zb8CI$wkYzz#H0aXa83qnFFii-G1NMho+kz+fK?bzpB&iC%oL#kBq`-w-N zEq?I&l66Cv=4&995FBB}*R@ukqj3od5fK3&a_-#+W--L?D7A^^S9$Ygdz}|)W*EAk ziXgbAm464&NV$$M-s8DIuON&S1n*1!FA;}xk7wQ?k-UvJ@@oJ5X<7P?%=39;060%ZnIf(=<-OJr4-A8)rDDBe3F1d+tL51y&4aWYBK7gxoWq z##0A`Kmxt;y}60N*BtNo+$b0Lk9+=|C|vl3ZvQSSptO{tw3Om_$0t*=DBrsbD!{;X zzeR)Rz*x@28)}}>TKQjTJE<|vA>C6#>NFsgHVAqeG|)RmQmcQ=rNV6INn`Eophap% zGCrSvXpAR+Kmd}TM1O$V+hh2b!|+d+XfelRISYpk%-OXEtJ9T7Q{&Db*T>>rq~Ar= z4;N0FjD7!f?eSrKt}(41-%<75l%PX2?_kO!=yVCp2`#_rmw$d+eSt6~W+qGI%2iaW zN%ZgPM_&hTzV$|B!1dCX#YjYAX0k-CTt&5-jCQyAapw~ulX^gEd4aZ(rP=Ucdql2K zAagB7^fzZA!GPqei=2oo&4vftBXWfTndKPATNjWiIv@@uoVv2By6ZxQt^Y};gXuuqXaCSw)+S{2(iiTV~%-@>*{ z{DXZa;}v9;IVy+q%x=`k-zpLsZ0yr=iqs}9Gw(UHDkUb{HS)KLga#Y?47xLP&o3cw z|I=XV=oQWYuc`>C)+%GbTCUE;z9N3K!WrOI6(QAH#RN+6Hva-^{zySv%tE{X0000< KMNUMnLSTZ#n12oc literal 0 HcmV?d00001 diff --git a/emojis/1f468-200d-1f469-200d-1f467.png b/emojis/1f468-200d-1f469-200d-1f467.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbc5d816e70f3271e748a59190ad257b72b5e0a GIT binary patch literal 767 zcmVu#F(C%9z?@7_GXS9agAQbaZslh=NtSo_8P>P<2 zfm{||8iKAX}mn+(>cbcGaNn*7#dHoa$^Fl#f079TPJ32d2JzCaPaCb^4nv= zO6e^Lg10&0uT_XlT|(z3$YeFPZqZo{{~Y7oc_+Op$>f_ao-$yb&1(3$w--ghCY+Bjj{p$&aX^PzsBAJpPtF3A^e?9 zumQRFE=|A48E5R;$Dea*UtM5N%`mn9gm|gL;Ohfq&O3xZmuUPhtk!PxXX6T>IAiEz x(ab*!NFBUE8;CYNdfcrc6i_^;_#>|9_b(>XC#bit2iX7s002ovPDHLkV1kAyXodg) literal 0 HcmV?d00001 diff --git a/emojis/1f468-200d-2764-fe0f-200d-1f468.png b/emojis/1f468-200d-2764-fe0f-200d-1f468.png new file mode 100644 index 0000000000000000000000000000000000000000..1474b1a41a4b8c43d1c8a43e9455ab9f42f49fc5 GIT binary patch literal 727 zcmV;|0x127P)NeDHcW?Xm}d+GD(_NSFWaUD{^__m{wY7i=Da0zj%uaP^&2MO$YMyN zUfFI9GIcIAEAtv1+fZ?Sz=Vr>-_NdWDoYEh&V}2pK}Mrq;mBeb00Cp`YZvpId$D3n z=;pdxvq%4Y+{~osCCuJ3^Znyu^DT@CZ|=pqzIHL^w!kuR^3%_R_9oE7Y~AJd_6aCp^`XY!$U zGv{#J&3TjQBZ9u!+DP#!*oU4elopwhrV(%Pd zHp#8u8qH*{efRpOv3Ki$0#`ywp9g;CwucjS7l8W!DYVk;?316w&0^P@rRUyw`^&43 z>L0xWWgq|y(D0a&$9&;2c+9)N3BUk>S7ZMgL~(mmOYCQx$4jbWnCS1esYC}EtMacZ zWBuJWmFOV1d~^MQ^0(Vd-sUQnDLzd=1XQ_$2tG~Nry#0g{{{mC3d%$d?9KoH002ov JPDHLkV1gMGU0eVF literal 0 HcmV?d00001 diff --git a/emojis/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png b/emojis/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png new file mode 100644 index 0000000000000000000000000000000000000000..e2850f098bf268bcade4183256c4758f03d7cdad GIT binary patch literal 629 zcmV-*0*d{KP)efA|OGRBei5P*`kc6NVB}>8@b6IPfU$=etecG1hFrn8=UY@@~C+l;3G(GqX7!l(? z#3Ht#ZUM`p{Tm2NbTFgcgLJaOB#@!Wdg?B_GPa>61-VWKgSJS>iiwxP1WdiU8h1qd z?8{e9V4xVrw*f-I3R*Qx`sVxtT=xRd1JvBqp+NcF5c`Q`KAs7Wd|d+qzy?lw+Tgl( z=nxvtvGt`F??;SIrn^jNIG12ojAG%oVh>S1PIdv4*kp%EY~o}W5aqL%qQz(sVTTIW zNSGcQ)LmNr9^2#k#%MQb716C@lpw0Yhez+w!i zvj^C$ctoOxvGE~9Xj5#{T4d)j7gR%fFUGN-kslG$Ka;7i*UdT5W-yr%gd9$bS^Dw!pUEaA(Ik1oOlr P00000NkvXXu0mjfVP742 literal 0 HcmV?d00001 diff --git a/emojis/1f468.png b/emojis/1f468.png new file mode 100644 index 0000000000000000000000000000000000000000..80f78fb2eb1cbfa53ae9025dddb09e1e169b872f GIT binary patch literal 588 zcmV-S0<-;zP)BX~ zC^4=Egrz$hT_g@Lr~{)b1B04a5-5R|AMIhU-`)FqJ&RrwjXqEK@vD=z$?2W94>UjO z>@3dUb!5S>gzwbiRopkBICH9PEQTP&&#d=9N8P0C1o?!)@I&?D0&dt+NXghBpO^EO z2>#t})!@2XTo(LbBuWXnkn<%3|E*z|E=xH|Srj5EAH^Xdu)j;$G!`Q<`Uj_^d_>9$ zX=tQH2xh10?q%;ZFV<+(dGeI$4!xIbRIK&rZv=A3NFirxwPixmoryNpBAs2v4o(?s z?;vBf$1lHSG4^DlHxF^_@CW8*qoS~BVg8<_#Wk-iEv{LZzh|tylbKF%^5}csI-;c$z)Bkp0zmd~M3jGaYyrW(}XUo}($H}~0NjB{}*mCybak9S+syhZlQO;C@dEE3$ zMque~W$A83KsM>7WL^jg86hP7{%y_X`!@Z)&Vxq|&ukd`xxrkQsge+=s#}JGWF#t^ zlua6q8+dN{DT@zS?NL=!6{|h&KV;>Zk>`qHL0M9k3L)6?7?;fK`P!Zi>+7~DOJYF& zLh#s@!ox@YlJgbq)*ITbkL{QWw#%yOnkOsYm{6GOnvn1b`Fp~rc-NnPB41Xoe{1fw aY{DN8o3oG0WclR)0000Mc{K~z=2&2QUe0Knnj``XTCJ5BSoq%8f)sQkcbfX zaYy3FAHb0_QuqV7z}SVhr_xRuB3+AA=t$$VA*qwPi4*%Jp6CY8BOZTwyRcrgzDnBq z`@nVJF-je)aQq!g{X|3vLrCp&g!~Mc2cCl3MX{s5T}f;L3%v3kLLfAw3fu#>fNy}0 zd1W2MI)YDhV1X+_fMvpk$AkfV07&2?{>wJO8-P;iT(L};xdCwt{%nBTgHRd3JAfc! z=#WiAE(2#Ba88jdEwI~3(97L~M4bAQ4y{-k<_r95ihP#V)C~1u8uD3s=OcEXjbLpV z$&`)L8Zx*Hh_oG#3)km=%R5o!+A}{G(H>wHVfljn?;>_?d{?Cpi2aZ@-WCt50n42C0oKG#vDiuPL?ni-=im zVr4)`2K5kS7LJ~FKipxWlKl2aJl|iGK)fO${0o0Cjj(Sj{re}Mig)u55t@#c$zrUO z3C>!0^`phTKi=A8V%7M1F=ps!nJmUinc%F&=%CIIhhGT2bv}=AZ=J48;WUS^?~|V` zkh)``JsaI-!g{?#SEg{9L)iDp&lX5kELy)Upbvs+oXa~TUu%)@Kmn$ubJ8d?2&RcN z`V}&>Z4w?Rz_fIlCug5lPiz5?qbF*V!p{W-^7et zZ0+19A`#FW7pZMmvCBE^a*o<|m8NzJga9FMf?L$KtJvinb~#6FyUK}J0wK_cZ_F}Y zPIC;@dUHhDr5R)ihKC&p6>>SvF;MHx5owoZpalA1hkpRdK@O>KKGhHa0000!7$tV$0YpOTvYQGjsQaJ~ z&{YI|gorM>DhRslCW{t92kliW3zINUTh7zm=C=2JpSDU|{(fTg)}iKOExy}9pD_Zs zfft~E0*`>_{N(~}fVc)6049Ntpg*X-qk%XOVb>WDlw83PgJ@o3=zG8=b{z+fgSf1K z2$g)*kjYWvLh2FF0>nisd8;9}4O*kv;q}122B`7E+yZQDfz~b%gMgsSr661j4Pi*F z!SXL8?GeV;0;C(7AyC7#xkl1m2azWJ@zWS4>EFk6Aq0)}q&JF;e=Wk%!$|x-63IN< zIg7GXB1dMkz<;VeWQvkhVw z2}UEey+;r}FGzzj!(W4UV2H(+%Xm^Drp#{4u_z@%@{c(d<>CE{yj{AE@cVgicZ#ia zk*#!*2X{;`48AN5@bLZx%&{mtBo&0v%%*zCW~zw|G@+zKNl9#=iEPHhw_p7Tp{bN00000NkvXXu0mjfUSUQM literal 0 HcmV?d00001 diff --git a/emojis/1f469-200d-1f469-200d-1f467-200d-1f466.png b/emojis/1f469-200d-1f469-200d-1f467-200d-1f466.png new file mode 100644 index 0000000000000000000000000000000000000000..34dcba2678d1c81f3f51b95975d144e490aeb7e3 GIT binary patch literal 781 zcmV+o1M>WdP)(*1K~z=2y>A<30Knnjdtc6bjxYXd+$Iij8lWK#RkI<%P+9~LQbtsD010Jb zg`I(gzkrdQs*EfQK!!qCDiXd#EDUv;H1zzPv(ItPzI*XSK+E%p?T?;YxK^@1PA82` zzyh{W>LF2h7t}WAgo&nofY9Cpionmn9!lLeu9uyAz#>n)i4dS0Tfhxa-+}lPc!wv} zfpvs<*8moITG9r8z=R2Gg3y4sd0JA!Up`SU;59%HGY!aR zVKxV?4m@t4vAoD`$Dubn2hKG6Kenk`S$Jlie@s)zQ%_xF|11lIJiU_pAs9Mj&YCrAOr?s#Kx^Q#JLlX2_Nt|@rZ?9L^`7pokXA%bUh4? zT`&!L-!usxG_cDS_LU@hKVae>F|SWptum_O@ru&U@wPA&MD)|pSHx!+4m8;fu7A_u9OLz zbq4znN_z*_cbIs={G?=>26{G!xl$%<)*1c2&)0u^D2#@83G2p-w8`VT0aOAC#d&hq zEUc>kY#3R{tE+TH8rKb=5>P14lUcKQ{M#a$)Z2iDoRK(A0>?=pZ38uqkb0Y8IK#2O zhMbW&P6EeCAZ>%cdS!;;3|b~pV|;i(%F!_ci5W;zj?Vb-fJ~xB?5l5I!A?ocKw<_G zJ0B97n)ie}PzQ^%AUtUTyO?py3uhlA2Kj00000 LNkvXXu0mjf2!UWt literal 0 HcmV?d00001 diff --git a/emojis/1f469-200d-1f469-200d-1f467-200d-1f467.png b/emojis/1f469-200d-1f469-200d-1f467-200d-1f467.png new file mode 100644 index 0000000000000000000000000000000000000000..79cad7eb3cb2d5a1951d40a1410523c42127d95c GIT binary patch literal 767 zcmVmxzU(WW$XW#wmqYvokBYyq<>T1Qaf0!$% z`+y1j2KtCp{{s3c86gZ1Un9g*hA}=>h{j;3t)ryJ_P|%d*omZ6YvG^ zRe%aYJXF92A1YWdh?r8qeLw=A^C8=U=mNAx@h|%lEHA)J0gg@~=!4bj@f`&pH#8}84C;-uzDVCIH|^n|!tL=;xFdR%=d?k#_V$SHEg62{gxNvp}Q z*6^y0+s_4>ZR1DJFci6B31e%Uq}62n<~2_az7wh)u3+A~$r&Y@ehjrSi)(8XD|yU= z!BwUTA7A5)5=}pb+L*<)HHtU$wD(s~mg)f#>#~It2{M+g&_Rl&di+gdUAAx{LB_Hb zI!Lip59#LXOpY5kP7WisFk%bG$uT)<;O6VN`8t#129A@%h%JoR!f|p;jvBc6I;uM= z(|%iKu5--N9gj@^(IJE0I^B^62-LGD+(e61ZY^_zRnV7`)hSw!Q!W002ovPDHLkV1m8NWP<_Sbw0j76gp}9OoZ_DhkO6U8 z0Rwn-hoI49jUOS8fCkM;yo?YuTc92a-rPg`!2P z*`}jhFlp3Q`A;ZF!JJcn;N-XPruY`6$_!Pe06#nfy(Jd2eeimOSPtVzY?7AjDYXO5=-F97P%iNFTpNBN&s1sXTr|qZ}uf9V0tC&Ke>4EBhkD^o^6W+X5MmaO+x*mAcJJ z-R9QSEckqAv%&Pu6J%${Sts!b`||{K5p7xQne0aii4u}Mll^GRBB+am{RO-v9?8%G zxDNKa*9?y&`0&8t!vlxmkp%X;*WfxNgYWTDczmiI;Qrzj_Ev8b{j$W?T^s4JA1+~* z4W62pSX|kMm%>9MNmW2C?ZyNGE30%^xda`lfZ%gb;Pnf7GXx+ywmS|00000K~#0YziSgw0KoC@d-pE6HdFQm|GkC`bo45d;w&9mGLUaI%A) zU5ijRaTgb-ii?XP;-Y^*v0}mcgKD*DP12Yjm)zZZ-r1CBpr4O0OQ$!00!Dm7^62-w ziIv9c*nJQlLf^%RvmnkR%uAJP+!#Fh`Fbk9a}8l8fh`3TNeDBA77PA*!GI7XjJ(Gl zBQ83Jf32j3t9g2gl0GJsf_<1s=IJ9z*=_a+L%LXIKh9{G|D^1;WNK1U$Tv_{hnRQ# zD>4<(FEhT0JzV22Wpyazn@mkgg|ckMM(u4m&>TLXI+pLNq1Jn+@^&WBfwGC&x%!8} zQy-@pAM=glgukkxJXmzI#3Wr07niM?PZrO0?BN=@+0|=S)_-gbHg9K+e!nR!4W8@N ze6kN0mo2&!UAGoyRVJ$hL7)Md9xZ<>t@tV{_4t*%WUJhwTy@c6U3XGz^sLELuui#pgp5;1c-KAA2eV(RnSM620wb!qcZMjJ`jF$D9#4R+0gIHrw7qO^HP zt}M?qvTj4FXHPF>_(#L9<2oL(0eS|AHT*iRbuU?#UiAnlIQN(_tD5BpVB7F6i TXJ-Ty00000NkvXXu0mjfSw1p~ literal 0 HcmV?d00001 diff --git a/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png b/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png new file mode 100644 index 0000000000000000000000000000000000000000..54b468e5783216ee4db4ced2f510841db32d0a9b GIT binary patch literal 692 zcmV;l0!#ggP)lR&wb0p_nkV ztNs-r5B4(H=hQLBbDh+)i5kL6j;dH+u(4*{R>Tf@dnN{{W4r@jwN95k(W(sCZ96}qGib3e) zudLIcZ#EwqEhQ_Bm0&jOQ%5%~gkIm9TS$_o%2K1)K$LCB9{cDy*`)&ORJ!=v>w9C6 zB+Ukfs`ge$`A}Ykg+&yRw450EKJ|Fub}CbGou1d%(BV<>9Nexgs7#u8afRT=GzQOw zj&{(Rnr&?`I)Pd)9nS6_xe*1CMF)4xmJF#QeTZwQG93}o%mRwO9?+UfIbv?6%xr#@ zpeqNiqZ)e``%}3>ze;=B9Nf+9TmS--qsxe6XgIYWh0$0G!w-H^Du%oqohgIuR%>hdjAAN=<&A%)aq#)84Uc@a-2>Pw$UWS_-KVY7BLh2%c{s zKM%i)B!TIT%2AxG6wocd@KYKkLOnwqgVtazO}=Gtz=5e5s@&$}P*@2pAyhv6p;!L@AOW#9%FiA)84OI{?S->P)d}rnOvIt-q-u?as?&m^TcQGEjh!*mFKJVtBW&l znD|llwXo-3%1__F?3t8j~lH4CFggA zzL7#8gm4$@{@=QA7h$9@ahN>o_W zI9Kx0i*!52db89uPfs`*(*KJmd(_Fu8mbcWSkNk1y-GDB=PV+OwOVvqayyF)Juc00 z|94VezV<|H@HdT^Oh+18@9Q2txZ!B@`?Y6Om z!o)$Jx;Bwhi6b1L=h0&>^oa1}_O^7KHHs?Ce{`9gdGy$+A?i|5^ridyCl5=I-aJVMtHGGTwH%kPjuBnyc-~a#s M07*qoM6N<$g5ZJ>{r~^~ literal 0 HcmV?d00001 diff --git a/emojis/1f46a.png b/emojis/1f46a.png new file mode 100644 index 0000000000000000000000000000000000000000..8ab628c17666e57bf2ed5213e765df59f79ab014 GIT binary patch literal 746 zcmVB!{0KoD8^Sn>juJ+lrYt7gf+3X`J$w+)8Gl>i*ao7pLg-Ar= zE)oZEaCH%j14nUka6t?gA61t47$eNA?K-J;Yx}-^pU3JWn*M&`{)N6{BLj8Y(Rvuf zMqnOcCV-1Tfj>ML&VV=ptOKTyB8Jf~)X2tF*U$zK{MC*T=YRpDtZ^_}l=M~L2>(UV zCJN%HqMF|aMH^gwP?Vfeq$~i3spPMPd;yF>@sE@cY=%e(l4+Pvff2iKje`(^GLM2_ z09spMVG$AwNZMBuoA;7k(*bQ^-o}5Bbo~$s0j7wco^Xg{eT28g0EB~NGY+x$B^c;M z5^N@sfr4!)ODC3D$~xflY9qy6gn(KvOO7O+%u`m#mq^U!K!C!S%-DEOqb@;e+GYFL zT7Jvs?z(oN#yHLfWf$q{3(?irL~7clrOVIQcn`Q5MbW;6*L%!fHq?hDcBY7#d5xQx z-)&0HURK!8lGOC|BZJ*E2Lw8!kpT&rpIGPjH%?NwYV*Qpy3;eRke}kn%q(bau|gj%rC%xb8^ziSV3lXLje z%}l)-B>p_g3L*LHacVuMpB`aCoI=*sbN%uZxvWDj>u~*294w1B-*$6j;t=uYQT|a> zm|bonDR=V2e#!7?8%kJ|4Ue|5ocHlQHHr|1N{TABR$PfiIXke#%!49jJtH9=Pj01D z@=#4tMF97bo3UC3Ilk>C62t9R2l$qV;FUILLnTF(p^g9@t(}xT@$lQ1-eKqkdwP+Y cM_;M*3-|F5{P@Q@r~m)}07*qoM6N<$g6pVWUjP6A literal 0 HcmV?d00001 diff --git a/emojis/1f46b.png b/emojis/1f46b.png new file mode 100644 index 0000000000000000000000000000000000000000..5edf7b0de13e195ff6ecad1528dd3b65f52401de GIT binary patch literal 855 zcmV-d1E~CoP)K~!DAPiz!b0KnnjoA+jRy3^8y(rxLMwY1j4O0Z4DHZcT<8cB>oz>6_K z6Fq1|jR!rd2OAO-qb7P5@t_Iu(t|{i5b)rpf|zcbqO`?YbvvbP+U|B{cjwP@i=xEu z6Bpju1=2JLYtMIWH6QG1wVnXh5e$R=7|Z zr63HcYeMrOh)LiF;41{1`CAWh^aVQJ0jwBA5kyfxN(?tuZhJx9sS|U5cQi4L6m6?H$xvButmPGNZ0|(_Fw^Bq~<0 z#!JMD6}Y(!O1anxD3#w2EAec#6jLq7i`eVK*dEv(vNZG>;eu6Z9krg(+N5E>#Jkvl zKaq+M;j6{9meTPXCq9}jZ)tlpcVo+`slmlJE*;68E)1PLT^OpU(pocq)aH@$@UBX< ztl&@BBzi+pi=B1fY)tRX6raq`cNw3}4)SfWFFUyHw`|5)>jU!g$_FO7yWO{g1#h|Z zo!{+`2ZSp=O%MC$oAyUrTe{Z=3>`<`%-z#Hwzv&HGr%VWYP@;yKIfzYM*PXtD1v3CW?_uj*Zq(A9>Y zFVSAON?iyj>PDulvzZqTWMy%3?DECJgx9u@>7B>TBlhlUuJNJL%l7W-V`$ExxpIAO ze*4ti{Byug;6>oeAdDuy&re@g)Kzpk*lMm2|xfE z5P;=q48;c1N@(sN_>U^A^s!;=b9wZW^E32jEyic6{Bg5(tQzP%bq4VtRi+dq h@uS4iP|Gva{RJWzMl{s(sZRg^002ovPDHLkV1hS@n;HNB literal 0 HcmV?d00001 diff --git a/emojis/1f46c.png b/emojis/1f46c.png new file mode 100644 index 0000000000000000000000000000000000000000..0034b8a2008ef6bde61bb7d7ca0d90beca9fdc60 GIT binary patch literal 816 zcmV-01JC@4P)5`DN^IxmTkU8jlsItd(A`B5h zLBUrad>Vb|7=pG>G6o96hdn3*Sswd%1S8n0TEmFy~a(oansjhNe#K>pv z6As-Z975yyr}5dqt=?oXS6z4L%|>;Eyh=Rg&>^_m8y8Pj*ByE@5l~nqf6&IK;7RZ# z2zRDsdX<*x;WWJ>Le8N`P$URB=QL%pWqPzsuY#`55Y!;3p?$a%#8vv@zib_wem%Ep zy`5j-qu(al-lEc86FfR5(1i zd3&}&yVjV75jjhxdRi~9b{S=pJ@?Ag z%p>}BBVdbw8?9-LAbUy;+RJOL(?>=kXEoq5J&7xZ_0v@UjnDBpfQE15-sB>_T4{*T z!x4NApy9jpgLh^BzRi^O-ucWqIyN8RbAUs@ZG4~1Eu6ybC^FW@EJEIs{gPnE+&v;@=HKHr{ u+}q75#a<%X9mlNK5PIN5B6IL7e18GRQ7FPl2Y31a000046 literal 0 HcmV?d00001 diff --git a/emojis/1f46d.png b/emojis/1f46d.png new file mode 100644 index 0000000000000000000000000000000000000000..525e6b95880aaf44afa56ef436c73226571beb91 GIT binary patch literal 865 zcmV-n1D^beP)-BnfpT}l@Kk>tR zLtsP=yxJStl<|DlYI+&iN2n`k>Jt4q)~ z3<-jecnKxYXz1@DSMVWyh+HBKnKYpY2YNcmm4QP~kxQguAVbI?q|xB{Sm`)B_dTqh z76=0VSHcfURyxkkeGe<$0*VSyAS5~54;x#L$mQ|(3?hp*K_ZHtFMzJ+(De^--Oqxu zcPp}3?(7(6~c-u|Y$U@8ON*TmXO7?$@Qe8~=2>kor*}Ro zmMv@e%!AbI{CNKB&nHG^zwP~I?$$GothvW*% zpE8H`$08B@^{vr?e4!6vL^(40+jq|%pBwD!|L3NLZ65{3Di7PI^;k1{tQkGlOzxM? z>%b&1`R{|y>vhMc?)cOlpOw1<)4&+}_EAYJe$_8Hmx8~$-ZEMZ8mgP-Y31zvA({hL z7J5%RRgZ>^vUP4{zUR`wv5l)5sGF609dicmxX?J@2@OoGe73e`%oLZBxAWDGvzitV z@-!{L)8zQiGcU|-u6Iw1*{P2)lq<67)eCKXr5oOkJ|a{8Juk112e!Cf7ZIFz^h8^G zai&yE9!|EE{;ZVE*Y+wcUjRxTe{PnL0(?TU!}kbD%l8RI@Q7pkgxXUDk5D4H>nD=C zijbs1@Pq;c5Q!-?$zy@1aBWb405m~^eDlg94yU^!He@W;+D5y*?xD1oz00000NkvXXu0mjfqhgrR literal 0 HcmV?d00001 diff --git a/emojis/1f46e.png b/emojis/1f46e.png new file mode 100644 index 0000000000000000000000000000000000000000..71f791512b3226495cc192687374a6bc433339fd GIT binary patch literal 737 zcmV<70v`Q|P)L#x?154L|sFjli;r1gLl$g@7%8;>>5dh=#{<`Ag^ZC42i!YYcV zsu`gS_~8C43?`Y827!bS6q!%*!5)-J#6*O`9xTmDS!-y!ZD+cz+vSFL+uVNl`}h5H zd%Y-Dn?NjTZnYd~Fw->xhy?Ffj2{6M0ki_>An>qaKx(wpSGWrxi!%90JdT!xp1PCs zKHtiV&L&?iZ89vamH;PGh->w*EniI`pwMgiai z81B@Jjdg;+3`#)ZK0BT(e8+#2JQ-oeZF|8uevQ- zrLitaz41~_-R7kEg75f)is4ES`Ru8a`*&5p*4|`%cxSG3_W7qGy+rg4N$nYC{%luo zwX1>dAwM8uWea`^CzLtn5fv zRDme>!^l$C!m|H;XRG;^QfdZea?6291WoaJQ``_cdV=}uZGXkgGbq!gIFhK* r!#jJz`I)>kd*#OJ7fSIoKv?%bilv4vmszYt00000NkvXXu0mjfPM+4l literal 0 HcmV?d00001 diff --git a/emojis/1f470.png b/emojis/1f470.png new file mode 100644 index 0000000000000000000000000000000000000000..3566b8bcc403816a07a879b7736bb131877318f9 GIT binary patch literal 694 zcmV;n0!jUeP))_&`C?f496!farvz5D=Tz*_$lbDJ=k34wzh=1&Ax7!!n?Wq&? z=0`_wE-jNwM`jNuBYR_vyaH|mD^&FS{5+L2z+F51)bKxC#px}PJ4Pk;57OIr>15)y zF97F&XXLbP+nCH8N{8uvXV9sS`!zUv4YCx-_(NeU&9-68dcV_%Ym@i1)+dz62c4z~ z#&AQjxZYU4j)WbsYG8SwG^H#>h9L|GG`vZ=hi}!>lp7+PQN}Of*gXZ71x+846p{o65qw{VaDcn< zhG55nE5dPQ3^U|Z+y&QxJ-digSY7E;vNfHxl(;?$`*(wFqoOVaW0+CEI5{yHI5sF@ ztrPJ4@d{gBJYHd~6M#}sa}W%baSgcS3<7aNVQPAm#mjRH6GLI~@*E;UDNZmBTU-UW z6qEx|3_(aiL`VWd5*S2;QV>EEgIH8t4Y=eodz8|b?=amaS_&Av{Y62J)NyC)@MVpX zvZ=Tl@X4jMNlN`q`1}=jb|?0p$QkIeh02zM5+IivwyVr%jV<;+7+0WFGzLzCQ%5c~8J zL5|}^Ir;f6VLpvFehV# zZeRo$fuhZjq-KFX2?!|X!B=4KfEfU552Oz<9|UO(O^TADNtz0kB=q!hU<@3foC4RS zDb%pH3_YHvV$mQ8(h#H+I@60DqG5HVK-sI&up|V-;3pH1Rd61OodP>E zjvT&7bbyAX#dS6}JlZxlJeC&MX>w117@fc#8plqe5H=WH0t_Iio1V)ucsfeknR9Wb z=dv7<(m>Ti7$njIS^WXw0xhYLI1$I9m=7rC10s$^Y9!7fQG0|4*FYmNk~#z40#KmC z{+4EcOVg!*-hPZO8gvnb`9q6`h&;#i+}`;fASDcrDjEuF0Xj4cj@lq9&yW$17KKP~ zr1k)uYfemz{95)Y7c~uTza%vk0nASf^OzWI3gUFwMub=6sqn?vDR+uavbs!UX9n1& ygTnnnmv02Umk6U*FwSKfDW`K~!zQPi&KA9KiAK?|GlM?b~gx%R1WCfym}0t{4$L5KYjL5d3pRLWl>^ z5KMNFNa9W&;lPEkKq5>}nrIAqKuMMuA;fG^qKSlr6lUr=x+$BibZfh|&-41erY3dq z^O2K#o@XN;;)x~u%1@cZNdj-8#))tRsIY;4ZK#iS?t;wOi4Q2=|6uhJUFiVt<$e zZn1ey7tNeoG`K~BvIrKzBCa6k0q@rCD5YM70u)f{RovPgCEy8iULmeRPzc(wJ|UBc z?BZb~OQ109l8(lBYhWv(Pv-L!o@lc3YK=fvG9A0T{;nAU`rQ70LcisfMt2y?3pJq} z7gW|!TQq{KIjt4jo=VWyALn1Gfew@-Xsu|uasTV`#M-h!DqkHSq&Mk7 zH>GocqGhGfB$U{!X=8os4~sBMKzlo)wB&&tu${o{T!pF6R|xGpm|$>AoR*v@$md;B)Fc!TwLgJZ{UGk*Fm^@dO2EMRC+whp!qwhp$&N0XNprj-&d zoETwmD#>Un$;A^RC$MH1Ofr_YP)zPzLz-03rd3Z0g+jdwg^H&h(u2Kt z)T3AR4-f^xlZS#QJya_NUwY`h1xpm#;2}{-Q>msqJF}U$-(!Yu=nMILgaf2$Dl021 z^KIM4-i$z`an9WXJWr9oH-2NEp@9X1)w*fkFU#_{H;ckBB#OdTovt-a^=Ty8C6Sp7mZ_rVHmtlQ91vv^rz(aS0dYhTEtH)SaO4zrslyG+S7>~5u7#4)8xqj10j^v@@0f0000y~ex_Ip5 zxnsw=dFoPvkdcQ-Ou7U`crYf?%l)l&Pdlw_MyXQPhWv8z!hGIOJy94I$P=(3 z`9UCB(D=)!^C6R}dyL>w%gSan6&maQSiIDo_u8(6Wc@6VHwBGT(D;BO#Z1zjK=9a) z;E{Bn;Ycx4(D*<>;}|N^F=q}}^8Al08^oM<1kwa7fv{PfJ>cX3;dALco`yK=zQC0Y zc9b;2*HSNz6iB+09B^`M_^odpwz0?S?;HcU3n(B5of&)_tZcEz$`;Lb8iNNY4Q5$8 zLig{1&KfWSKmrf~>r0Ca4~?@hy~3V_=@o{D##vulq(TKqfElpVFh;m|t%LT?7<)QT zHWRM57$elO;E#d~0!@H>s5Qc01lqe|R4D;#;Ex)RERY1osF9u6COfgsKRg1GAX!U= z2aEuhsdDsOn0<_ZdIT)uvuhGHuYfaa@5_9dEf70m+422TnU+k5rglr&_OUayG%AewM8(S$>l zIaIEKxZS(UbO{(S_J}cdx)uAgtyasB3WDIWbFQpD zxuvRi6+9iz1z9>uh|G$}5kNu;4%OcgIcY?yq)d_|#BuD5HNT3;6d?RR zL1aq3zqL`XyN&fahLpATm@1R>$c71-(9=td`8`RdSf zLg(ov!U@-+%FpkwSxKud*yIXXtvd60uOt@?mL%lamWLtDsu*UU5TxO{|eeW7{`AE#)`) zcPT@&k)WRU)I+n8&^B6Zu&=yIwH7@3V4#7!@annlFQZZ7YmEV+IWIgd3=EEHpk0{G3!-NsT@)sAE3***42Ff>q{fU zPc~g;&jV6xs?37?2sl!{?&UyRWkVaO(1yaj98<{2+x0R8{~002ovPDHLkV1lF3S$hBg literal 0 HcmV?d00001 diff --git a/emojis/1f476.png b/emojis/1f476.png new file mode 100644 index 0000000000000000000000000000000000000000..a21fd45207c0459ce62415af04408def61686a9e GIT binary patch literal 615 zcmV-t0+{`YP)$_RCEYM!wyOaEfZTBB5VnQh)CRB!o@*y z@Vt|-MZqDk&8e}eZfR~krJ=H^Kr%4I&b;%zd*Aozj(f|uqt8d)ER54keZ4%=m&&!r z%>{|bJBeA#V&s7TFjM!2_)9>dGUj|Mzck$~=}4Qc)&267>VY$zyxN)96Mqe*K!}O- z*aR$K5oD>g&9>d63RcvTmVpG7y>f?oIxWe_1JEq63i#AmoOuG018i!_pN{d0RlMUW z2uQ@D#s*md77+zeEPNk49R!+%{i77rAl&5qs}n^LXVNAyuvTYq(%Z+(Kfq4Vnd%z{q$H#UqFPFW(ut-b09j zE=yE)BrX`vtbziP0qmQ1`{}>f4*X;=JwTue1Is@7QoTK3oa3mo#`wfE!vh@&~JN^Iw002ovPDHLkV1jun B7WV)E literal 0 HcmV?d00001 diff --git a/emojis/1f477.png b/emojis/1f477.png new file mode 100644 index 0000000000000000000000000000000000000000..5129bfb4386243b9b4ab01f53f9a5de7acb1bb16 GIT binary patch literal 715 zcmV;+0yO=JP)&-T`7c zP-{>S191XchS3D7P0-c5{Bv{7V%m1y_O(Aa{plp&8B#QwhX{k~fpZtpV2*-k zVz&^5t1x&1gC|7cDigZ}@Dwzd!$%kKV3CL+554P$SJtKf&c=pub{jlFVK<8Xb2i&5D(%(+;eo~D~8gp=l<+EPakAF zeUNc~cAd2ADQNgLl%693B3O*@TKOE>-&2XRv+sU9D!o-tE~**Cps4v4vF9M;e-_hZ x3lHWCczHu;eL2#|4pRtzhsHMq%{f5X;$Jn{_dFmL7B2t*002ovPDHLkV1oXWKidER literal 0 HcmV?d00001 diff --git a/emojis/1f478.png b/emojis/1f478.png new file mode 100644 index 0000000000000000000000000000000000000000..f49d021343e7e1087735dfbb40a7511c47453b85 GIT binary patch literal 616 zcmV-u0+;=XP)FDO5 zAPSDIif)RdgM-keOGPNsK~O}n#g@{vXB(Sq>iv4pT$+m_h@X#mbmu02Yg4+=rZiTs z*QZ^#hSvIhk;CmGhwu1{nm#{HMjI&tN|Q(V(=V#7JHa2k-QBf9^zCYb`hqZq9u;Ae zDT>yuoQWTlqYozHq%5VVMd5@o@?(kCZJVQq^r*|?IX%}v+()2Dh5Qx*0uWfh zJushvS9C~@xgeeZIsPvP;xXXTA+aowashD3j5y$wK?wfAMal&%3q_I$5VK^eBQQ1! zLO>9}j}{yS5XaE|2}weiHnX7bDxd;Pk~--^-KEdAp=Q&kHEivGw@1e$P?10Z$TLuY zx=U(xxk0NLl4&(VR+k$fC5(?k!KNb*q98%gl~ZI^mbUP=+hn}$HY-b8^yPD86qz6- zGdDj)dDy185tBM~)?sdbioPHuBf)6E5QY$hq=qX6EKA@wG=4*4S%Tq8fvzBgAmo@a z5<>ul7{J>j<1aR;ISDlF(e9s53~RqZy%f?7%XB9S?oXEAvJXU1YLd` zynT8i1d-CnKw`cERg8i44LCC%4a}5t12bj%{KJT~%^b$ibC6)Qlt6$K&(QiD@Rm4v z$=c={2Fp`aolB$++DokOe8N#z5aI^LTm)WQnD7_cd&qyTy>q+(0000IAout#KaU)u&V0<7U)TLJ12(}GW+b%^k ztGEzKt5n=cH$_lTbmPt-&4^M#nnhdc3rbt6jR>WvA(5eEZq!L;?mb`cHRkt|$#2$? z>R*}N)n5s|0NwXxjgP0D-_=#Vg8sQ+h1X% z9?Exr&#)6%EvlE4S5|}W-21NFFX#EZ_NPuf{tp9qS-){Ji9H$1m5GCxDCYUe3oaUH z1)V(@QnPsOy4Kv-XOVOj>DY4?-;Q-JFkyRostCOBaNt>k?EY;8@2@hszNtLb$nrLp z4LQrFAGLF<*81G>tMI7KbAx;(NN7B|Mui`Nl6#n?UMpbB9$WM*vqg`4Gp1fE;2vg4 zlvJ2h)qcC8w|YWgw*X^WBtM%Wyq&{04adv&;0!R`jiC=q zYEC>4h*RtR?k@vy-Z7< z1~I9XEz6d6puf^;+@akGY&FV-$5!X%*@Ki==OGffS3j6W}8lqDFxj3%pO2DH0yH9=+&gE&>;U zi$EeJOM+*gpnv!fZ|vMjECugUVVFz&K%KSuJcA#9fbLz5YR{tDv#9ngx@GHAR6jWi z){-7rkLt+r$d=9gUMcb2(1$oyu%@Sny?fp!Sl)%+@dBn?Wr>c)3;aU}qS0~O+xjqx zp=tNZn@JZ-+_-%k^B0PAb#+qv^eFMnEKAf&PDjSZ$qp`y#(yLIz&$La6tBGc8ta^Z zj+PAHoGs9poaTl~o$%PVv$7GVs7KxPKc~)$iTj^kY0KdsERvaJ1e+hDR4S1psDN-4Oh7o_C>=${Lt$t^l#Mrp`>RJj|63mCGA-ltc{jt8kM_`(&(gH|RFR=$ zr}?~5MInAoSw5r5bJ5o;KROpD$Co3wrV;FR+IVQ!op^n%U@T4Pd>eyzE0Fr+p9d%d*&Njeu74>@mT?E&(AU!oEm7Fv6DxwumAu6 literal 0 HcmV?d00001 diff --git a/emojis/1f47b.png b/emojis/1f47b.png new file mode 100644 index 0000000000000000000000000000000000000000..9eca01f5af46b19ed3f9aa8c04e7420be8041b0c GIT binary patch literal 637 zcmV-@0)qXCP)7=H@%A0Ok! z_3H#dgyG>~Zr;3g)Xds}9$=p*3}FZ(BQ`fT$NhVEdGdIOWs{SW#1GbUwz-9=sgF44 zVn7HS1FHPi%U8*Y0xe+}<{hl7BfdXQ5Qz|r#dtA3#_YFm?Af)G>gs9-><0D%Ujs7C zI3UpnY$2ntu#jcWIf{ykxYpjz!omX4Xq1diz;S+i7l5`()(;erV`5^0M4|(iPE+5| zKvUBh)>5wrb`B_Dm1MG?uhY}a%*^mGnWVGxHaQkCuUmfPo(DAYi@Jg5WR;edl51pS zgxT3yvU(xiY;JMM11f+I$Swe{$U1fEG-YMw{E@dYkI1?RS&hh|$OwQDGxx^4rL^Ry zB%fvZ`T2At5{!;M($G_2k>AQCiw20*x_~ZV1IB4!JK{C)Kv){12GIzN0neo}K~z1#PiP!v7{KA*JM+!X?q>gG7qTTaYSR=`6Vp&osi0y&=}D@Gh$0r$ zK&kCP5J72r@FX5Z3TiEobyh!RS{&OphszKTemD1^u#$BzRYqpLXQq zTO@7G zeS1~VDd0Q_147RgV52X(dFig^4@16fWFmZ04O3;!AD_Kce)$hzLy;>Wq|Ad`b95k20envYj~Lj z5)Q5lf{W@yq(tEELC9t4%I9F$5DX82ap_Whm`>=@332Fz5OoA7AOgcf&|l{A;woV~ zCTz!CUR;Gz5k~F>*CkOvt)Lc%|5@M$gLNntNL@U)La-eXY)4!?w?bFehrv3D8z2@0 z2jhY9ES{OCR^hgp6O)vyKIN*<%!x_v=r4hB=P|}&491oR2;H47%4}A*4gsSiDzz-u zDyd2>%N?rA)GD(?f8YJsA>K`OGYBnm0#E@p93# zGXi5IA}RiSwKH`}ku!}*oSI{g_Dg(3V3dTyRg@2xH@y%31I+mX%ShcXlmGw#07*qo IM6N<$g61w=>Hq)$ literal 0 HcmV?d00001 diff --git a/emojis/1f47d.png b/emojis/1f47d.png new file mode 100644 index 0000000000000000000000000000000000000000..721a9ee948c04c6a9c44afb855182c090fc81c43 GIT binary patch literal 610 zcmV-o0-gPdP)V#vbO?*64r0S=jzLg_ zVMdrFQgqT1Ja#BhER;?PCHUvAQ?jA&ga#f0N1G(bYwx$MZ7_GJo=1(pc}IcMm6cV& z6ICZK1E%F4^>e=<;K7)FZ;G}*SzcGSYQZKglGC%n4CgWf*eB_*Wo z?In5ne3+vKV_cg5x+ij>FjK2vN%-$LDWEYfVa- z3G9&473d}s`ARa8AZ>ju%<9StY3plYa!N`|=?Zj{wPT=|0}d-Z9v=2R#^d#pv$Yvv zYcoQQ$LpoHub&E!hm=E6GHW7y0cL=kHMO-24ZmRi^Cx1lZ=7#wB`qG0Q(axdg^QOc za=FNwR-!gcGVTFwfVary;!4L=^4$rBDDWM)Pl}-c1u>u#*e7dgae?iq#dg$Ud1;Y6 zKY>mKF$EX`2!G52H-IE5ZnvAM$qA+=Cnzp1CMyZt0_Ft}z~rb|pbdE2;Panp@cGHJ wu7m)vN*+@Qg~Fm}2JQkOGF}5CqS&XvZ&GQ&DsK@LBme*a07*qoM6N<$f=omQJ^%m! literal 0 HcmV?d00001 diff --git a/emojis/1f47e.png b/emojis/1f47e.png new file mode 100644 index 0000000000000000000000000000000000000000..4181acae7a18a9621ce7663c351ca05761217b3e GIT binary patch literal 619 zcmV-x0+juUP)ayo&>KMDrdw4CS-0NlH@_od=ythax(Af73L=H9>p-A{IZ2XQe|!$M{ZX%tNFnRi zB?y*LF0QR?9#Fz6cn2k{vbM5$U>W5i1PKC7uskKKf?v7-S^%a1rT|(1x`=ryGCtD`;q zr}L|$J$d#znfjya7EQ1@L$_;)BnitdFYpaYSP_7hnYT-Zp4(6r%|ztZZ|`^d&9Af9 z$y7lMN|-|l!*7P3tKl6o1WMSPs%THDtPxpKmS!)L?r_}y7Cr|pRo2q7q@-srllE}j zZ}<P(N?UO~8|3C?IhU5O}S?BP}jo&_5Wcg2&Fg_gj8)u!v?I839 z5F`kOZl}5FI!Th60%!r~;*TzXR+6Nq+;km7x6}9=H{Dvz*?;4vyM=df)7`2$`)}NI zYY=1zl(0Ef(VqN=-dPZOw}?RrBdVhP@E>}oLFf$-`3XNwwS%9QC*}YE002ovPDHLk FV1k&Z9Wej^ literal 0 HcmV?d00001 diff --git a/emojis/1f47f.png b/emojis/1f47f.png new file mode 100644 index 0000000000000000000000000000000000000000..6f4ffd88dd8388f59eb5012a7e2b567f666fc5c2 GIT binary patch literal 533 zcmV+w0_y#VP)#lR!wfLEsAncA;%ONc+gz zv}@M`RI~`oYJ$XyG)kgPwlfEB$G;h7f>Y$C?+XuZy?cvqqD%OW6M`$4L0#7x9@!6f z@ft@I;(b&S9K~_L8$8EF^!ZZ*4TX3O4{;VF*eIZ>YXr0CbFe}$)iOqOL1l4Y4J%k=Dv-Y0@N6tq2k`po9$riqDT#>dALi$xu~yL&!;`fO!oReyiK z>FFtL1;Jc`89k%big(K&EG;ejxU%ZZ>61EMEWWb6wXIkz8Xc|3nNCpG)0h}nuT?E9 zELvaxq19>;qwTG2gM&v*PM(scshqLIU(&QBO;a&O!^1;5VvN!>m8Pk`C0Ij4PNg!e zBTY*>s?|}I%CLXXw3r3R6kyH&#E53n583bdl!LfsP)hJY+Ss|bH6kAZ&v&w>o7 z5)|PsJ|hY!9Y7yG=Nzg^IaS3uM_!*(y^vGIIut?r0W&}Mir4dVR904U{l-n&PMzk! zV)7$XFJG{`yGvJh58XXij3E7@yfcDS0PU+QD@A1<`0Vp-`AmC`>e3LqQ-Ape`1}X8>zKa)67+8_dIzQI?jzVgr`rCr%O!208HH z(Fk8YesFje1c9Y(h0<@_;5Q-2&xDLwUe*8r002ovPDHLkV1nXB B2EqUU literal 0 HcmV?d00001 diff --git a/emojis/1f481.png b/emojis/1f481.png new file mode 100644 index 0000000000000000000000000000000000000000..6f22fc3b1a5476a1a13a8a26c38d0d01fd400936 GIT binary patch literal 605 zcmV-j0;2tiP)-P%Kbha>-{U)atOfA_2t~3fpGG`)7+pM$Z>Pz}@RJ zT)j7pq(v#hRQfE+GNF?w2q`C}BX=om1%`FQXL|X=z?Iu4kd^=g>?t7Asr$4@fdMWW zKbTa_HHU=df&pbqBFpnWnQlpYr(&Jw@nLR=YS4wie799|9M69XLaT4(?s6elf@&2y zGI*s1IRSiuK-gG$1?39!a|5ipJ85x&*Zd~G>b_TiVPOgC4T2v5)u~n7=?X#tiz}F# zix(z{qh>#yeAAzso=zBdgwg_S`+G|FbEz$zee3n5($k(92FXQ3&!W>g2(e+Fp&o00000NkvXXu0mjf6|Mrb literal 0 HcmV?d00001 diff --git a/emojis/1f482.png b/emojis/1f482.png new file mode 100644 index 0000000000000000000000000000000000000000..51ded2094adc355d541872042b55c353277a45f8 GIT binary patch literal 491 zcmVONHQG|Qa}a^WxAZIr)wiKGJddl-6wWRRbD+0xprfW$g{_LT)diL zw3z1Z()dB8rW*(y#(0nM9^?IPrDj*wO9}E5Ddy&9=$V_JAwQ8~y_BF5+7;CA;yrke zJ8CuQQCL`hlet{T*5mPdgRQr9B879uIE)1>uVoHfN6iJ)(_?4PUqY-ytixFM^?O4; zzuz3XGMw^uWK0>z1$?X~dGtEh*bD7VvF@cH hRn#vEx`rx0`vEb@iI^FuhxY&g002ovPDHLkV1km!+-d*- literal 0 HcmV?d00001 diff --git a/emojis/1f483.png b/emojis/1f483.png new file mode 100644 index 0000000000000000000000000000000000000000..d8a9a4f4efd92a1be8f58e95b214ac3f1be53768 GIT binary patch literal 599 zcmV-d0;v6oP)BDd?pAc@fP~X=AbPBvmR<|ro%`R)i|5p140~;<3O7Bc#Ho7 z3U7*9)0LE(r0cQPjsRDHIm$SU6oI>J@Um@uo0-W^#qHc9l}Ly6cV3U)j-(o|;s>i# z;IhLWfBF7=b6TFVw0aO?``6|IWZJUCRj2d>k6NO)au*fA(=Wbz&3_s zsJsHg+I?;iV`jy2B0pX_*L=EuEPkf0WBSHI&)T$q!D+xY0(}S@Oku(w1%yqLx)?so zK3;iW`s!O$$DLTAOe;c$e}q3&&*om_Kd?@W0D=Jp6i`4L5Qc#+DiOH{DxiP@iWAE( zs9Oz}cJgP&8B*o%@HGXp%ut_)yItsEEXcZ@5@U^54_=0c?(UK}#7%X4`!w7~u zpbr6UK3Vs!Bhz@_#CQ#)fKC)pKmi35WU6<7GPNiv8;_>L#nNF7xQS{vh6yTgghH7D lFcx^FB(Mw=K_&>P=qD+R$n>fN{pJ7w002ovPDHLkV1mZN|11Ci literal 0 HcmV?d00001 diff --git a/emojis/1f484.png b/emojis/1f484.png new file mode 100644 index 0000000000000000000000000000000000000000..140e7c1650578e667318c798980a183b87b6e956 GIT binary patch literal 412 zcmV;N0b~A&P)Oa;|uSLQ6Ij-^> zH#<$6-8Gg($N-*ujz@$pGyWc(5)OZoeLaChkpMyuqyj8akhcUE^tT6V7wrWIMCsLcYIU!|Xq0b|8cki)x=K6<*A0=rv$2LDQ zT4x`ofjM?i_Q7Bk*x`@!BnR@>^T^q4ysb zfl;6bc-=~qsf{RHV;BC&+jnZBx20`MBDQSk6e8omcQGCs?fXfqbt7G0UlMGYzbLo~ zLFQ3ikSvhoM0|mgKykhDB&tWJ1er&4!EjJsqLB%Y4n=>`_P>A^)V1G(xti#&V1f@q#D~ m&;CgFbS5GY9t?0@Dn9_{(sO*dE)V_y0000z9UM$toQQ)HgD$S@ z?wU9-xwx?Dpo4>nBpRa8$v~oF8?=Fz(voKhz1O?*y;46y;_oM3J-*0qXQ#3cvibBK zws)RVZ|rU>V5b|Ab^5Cda^&;7OPmg=8H3pMFLM#Sn#vm4hgEp*v1_uZMLj}kW6hX`YtCB;KP6sMgNT*<81Y$8bGXaGhC`FfZ zP^m)45R!xxzXct-P8UH4x;zO(1vr(5wg#glAK2Mlpr=-8@olY%=~zt1@@=h2tz}4s|1`~JxrlWh)_FL@h;eE$Fp9t^l(CYY z459sl7OCVhf*{7r7nk|h{y~dW@))5E2qKarj5Yj^v4*350hpZglD5fQ!2kdN07*qo IM6N<$g6sGz^#A|> literal 0 HcmV?d00001 diff --git a/emojis/1f487.png b/emojis/1f487.png new file mode 100644 index 0000000000000000000000000000000000000000..c11e5afc942281190ca1d9079149e1baf2c35f4f GIT binary patch literal 751 zcmV;3uczIx~G+O-GkV zkB3|t=z9aSYgd1&AW#5|B14KfYH`j3dSPN+;kUn6Y!mbYpiT>ScmJ|uJV4N0Lb%fq z4ouhLN6r;{KL*AHodCY%9s$&)DH?&G4%X7b0B=qCi4h~}3*i@`x?4r$oT_~r%kanMts8w@Kupd$;}cIfSfR1!p3vL-&e zacyE|FdB`$=6T*L)oQg*j0}OiC}NJgtoA5R*GRQTaFPjhT{opat7Ov#rc3ZwdDZ?c zBcGqGZQVIpp7o6}3t<>OX@qA%CtVs&e{zebUg)8#H%(>6=d<^2aOm9v%+1k|7}HHx zHL`pv=W#XXd2iCf(6IO57V_)UG%atB@cO{xEK(LdYQD?%$@?`dT__u4ct&Lz3!1x5z>$FNsXP%YW7WZ`!_W@}inlxY{@d*+2CELCbr`w(7+>Goa~SxU|GFlYgD&?K$MY1& z^R%ii%#w^PZe002ovPDHLkV1g>&VDbO} literal 0 HcmV?d00001 diff --git a/emojis/1f488.png b/emojis/1f488.png new file mode 100644 index 0000000000000000000000000000000000000000..53bb57bbb6326cb086b20a6dd98b0249cfda4464 GIT binary patch literal 596 zcmV-a0;~OrP)IMg)-=1zm<#exQVcf=CqJdRsT6 zFrvFI?5030FhMghso5x^yC4dp5Gva&vu=dUGp%iBx;Kkq$3xE}H*XK~A4XA0X|TAY zw3om1b+q&WXm5SAg7}RYdl2a#cSMD`Li*cw6%tQ9_QY>B#$CCb-PU( zDt+X3w?TIsZt7>+z^N!;(0{^9IGP|FwYfi&Bs`nsc)7{`onG8j&y|!6iE__*n}cBZfc8%&1OC_fAt#v&Q=1QEwt_pP+#HW>8AwK3n|>xKvND* zsc0z+Q(0IyhKLPM;BRjtr|UG$Rk<`*W#OiX$8j>tiYS{LB=+D5)~!)ugCi`DOyX~A z#CP-%Zfas+lz+4&3JdzS7vw{JKIz^b><oEu- zdkcb~$I2dp9(%E#3W|uF4}}mtm_meN5v8Sg>1w;^cJ9As^&oVC_4%-t&OP`Kg3ll9 zm0Yenyrp9|%E17E2m=5@V7SeR2xSleb_GC~Kz$&XoIv=ORKZBZbhBfkt=ao-ZZ@J8 zRj&>EH~<|b++FFx-_(Bkn(7*#9EPeXk_`x*smyXVQw>1FFTAC`9)A*iJ>3?4Hj##= zDJTh#zrao+%CT(($F*o>jWoW@qjEFSX_#;x9?9d&^bW> zK>$GjK>&gE9!`)XrJ-sH)^qTpkZ9-?xu~<*h09>9UjQ|70)yd_u$0&y^VZdP+Vdm*$Tn?Ie$_@UHwMjk4$w{UOdtw5lOug|WafkHI$9{I2>2AR zPylR4Ltd=i(jzp+(<~AKG)=aK9^YW9cAbGn8DR3oWTWhegk7PoU1wz?OwTP~O;bFU zM}6%f+Ez0{_{qLE+z-Z%5%5R=4Wfik9o+v!@wls_6|&#W7@}3-nd!NOKz_CG!0F&4 zSf}aDOgqOK)@}oXC=pM_lZ&4fPoH5J+*7&XrOPSpwJdAcwC#BYVTuSK0*C-8p0Ntk znz#MFYqsCFV*7ny_eVzYEtBik4C9tda$a?Ceja7uAHOW4xNYb{0sggxP0O4gm5)rlE0>fo?Fk|0hR$Hg%j>RFv-81q$)56h!hT(A)WdbfjK}7 z5CBE8IZ2i8J+s!wco{Gb34nEAnhZ(D`})H#_x9=s4p;(=-`vhxy8?Jp_}G$qwb9+H ze=C3%fm?=T2t(wqzYjM@r-r-vFt`SYLwwJYcaIvK-8TmXei5h)#6Uz}?nZu$=4v}S zeQ_wxhrv}q^jTub#^deI&f0!~qa-K`>k6XW&65-O9&Fe4qtU71I3EUO^Z1P?%}%q{ zE-;utWy8JA&5n#A42wO@)pit?hPoe~?OtlUZjF#lf^)gq;y8c!p7H7B*QmV}o1hGc zY-b$DIEP_YHMk3Svb6#b#|aFhiuh>(5ChptfJkEoRe=Eufa9nw(0pKIGJ_>do08oI iND^l{rX+H?wsx@&*Oi^KiIKhQwCP8(NmVl)aV&2ST9bKqiFF! z)m1WqPET8%Mba-0U_=Zgj$@kzyCf&^xH{viF1Jln=9Fv|H?iBwf<0;MQP#C3dR9xW zW4Gm%UkcNhz|FQ08N)uyd!=d=Ul1IY>@4}%CfSR#78D+0Grr>vE=b;E7`HK^Cp>C# z32XiGuK!y%R&g~YD3qQb{n^qrxq%V$Qg2&4MT=X?{W8xf!E%;WI zyRCAH+Ag^-HtH#v#oJ;AL+JOXYmIu-cC#vtnZz0k`Y>d9ue(`eDw?LRBwkP_@YUbF zq>eOA_pa&dv|`@4s^^l6IEcpYKH~~?9v>v;v=)me)S;B^75g!WFHz5md*qWP+UP7% hVlqrxB<7T*egbmKeA&95MUMag002ovPDHLkV1k(N#2Ekp literal 0 HcmV?d00001 diff --git a/emojis/1f48c.png b/emojis/1f48c.png new file mode 100644 index 0000000000000000000000000000000000000000..37a3f0abb5030a2739b0efee06992ce54cc677b0 GIT binary patch literal 494 zcmV;P0!pqlhA1yC0J<}qZ3G5Ar zdtbl(crLX$@0AuQGa)U)ewJO7FG07Q=TNIwm_#!OX?D70Y19nstu~NTtDb|ThrIg$ z{Q=pHMaVML+DDi!F??_vN>en0kXENl!x}_u!MBF>RvU8g-n>UO14h)R&yWLI#)y26 z*?4@HR;P<^4O$C|16m8dHME0}!d8br_A|&b#`0#Htsum=2Can=#UZVQxeK%GluMjs z=gc%-eHN{SF~t$R!8V(XIw#p|)aeZd9Hltql9b5BOx?WB_T_nw8!TSp^vYEt7vqwY zF~tFwq(m;pvj(k&3&pA*;uPe{Jw_+-I^r@2{%+DWs z)kxv{Uv8+fYi`ia?;m)@9^FGvpE7lDfA`|Sx$cbradW4CnRaIiUIf-3WYV+1`ar>{{RCo3I&{V78n?voVB%fkm!oJxisPgB}Yd2r}bz|pa zdvtkl%T%H9*&{cuAM0*yza`v%bs)HQUpx1}0q2h$aF_1X+K>L_5MK9>!lqqEICF%v z_}w1Oy_PWRUb9$AB8eoD=#sdtJX2~JTX?(IzBJPG&*BX%SJfK%+C-rUBr%&76ge!oWKR@QmU8grFyB}$TzrvC&OY8G*jiMu~mW~2!bH1 z#*UikC}UYS_HZfxB`nxg*G#m&HGOOPmQ}3dv~pO53Kc4p!#IugKDpetrf*GaeQAAZ zeQn?)EF@NN96|6zVg(EMuvIo%PwVO2?HwG)^GW@HE5=Ts!xvTcZrssTl|8ocg5<04 l5>6WXuJ{C>ONQl+zX48;sS*C3%y0kz002ovPDHLkV1fY93M&8r literal 0 HcmV?d00001 diff --git a/emojis/1f48e.png b/emojis/1f48e.png new file mode 100644 index 0000000000000000000000000000000000000000..babec910a38a69fd9782c3c41faaf802bc1d539e GIT binary patch literal 653 zcmV;80&@L{P)atH-pUa!iO8mcu|C{-u=Vu$GT@mzk|i8eLuVM;3cphYJ0H$c;K66wVx#d7+|w}SAo?aanKN~ zAvUnI_Sxvn&hckyWhcky-G%Okx z4U2|FV|!;e|NGJKN35kQFz~G>Oh=hojT5UBghqj!{YYPYsk>`=;*KX0yL^7IB4?F=zMMsYS zF@d@Ztcs4NfK}S)i3=|6f>PJRsLmKoCQ$b|G$uNDptF@bw9$ScMLQEof@6eUM?$Q~ zj=6P<&J#6sEYg|V3oi)$5ugFFHCBiL-5C?olb7iF-Bexsz0WH*j1F%T}}~ z(n*Ygxu+X=RiDMz1vb|z(3b_U(PL#1$is${H8!BLS8ELCvqLcyzT zdbdA7^kz5uUkDCCL2whj6cn#Ew!7hE6GPb?YO70=^hcU@$;mnI`MN*~LGXFh;=4Zo z#~IOYWPR_dQnHGmLA?WV14tM!xv3O=Sq;S~M}*MV)SXk4dH1_dUYquAJ={6_#l!kX z0_O#O0-6jM1}<$@USA1kKaN}N+t$YSE}y=0=|XuTJ3E?Yx*|8zyBqq`hGzvVLre;X zzLTkA3p#d}y+UER*J!X(8%@pydHS48M!#Jy@I!0QuJ_CVLrjRJuNT=Y1D@~mQZ%VY zjKd)_=HsYVw}(v_q8ZroTE8*m@g#ipYYm$SeK+e}9)*tLKa7V%f>b`su3g#Cz2sC> z)NA>DGBZAv+a+#Q_c<7k_}q37NP9RVz&-;eB6)LpD*x?Ub7R>cZsYDeW^JQO@6pSY zqj{(uqxYb}>gf{SsFo8YNm;=!3~1nL#yEQEc#adnamE)HxpH=v=dwpQT&N{)-x|w ziboKE>(x3pHlJV%E;ehp`@%lenGnZua9vZ{+S>k0;GO_#`Gcv8z?VwF+-N!p)SSQo0000uZu8zUCc2UrM62(9cK7P+tkiA!-!V^~u-W zBQwR$%M$7o$T?s)s9h+zZ`ytzOK%xH63CBJ`~cN->`%7UM4^*qsiGu{#~eWuQGxlcu*D@>wtzb*W9C z(6+}y$yFudOQvCI9@Z>}m0e)l7>t1xT};H<$)qhT*Cjji8t3t*ns_Eo#AK$2)7y%D ztnXG5i%}kT$riHEkww#RZSWP7vp}kqSVxu2_IHP^7WbAZxToy(<(*20B`k}{$}HE; zzo5y`(0{g%MACrgQ)hQN9}0V&gER@}feY!3P5;?Gn)G@cy^Ol><9EV|DqvBX?izI5oXS;!agaq}r)_^nEo?eyqZJV{s5h~>W9Wgl9B)b002ov JPDHLkV1m33G8q5> literal 0 HcmV?d00001 diff --git a/emojis/1f492.png b/emojis/1f492.png new file mode 100644 index 0000000000000000000000000000000000000000..5ddc9e8f7e84955f0ecfa4bc6ae7eca7192806a1 GIT binary patch literal 737 zcmV<70v`Q|P)a_6MU99F5tUj)jTU1vGfpm(ne%_1A!86p z!RL|l7rOZ$#`C&Vk5K(9Rku1Z;dwtY=TBgu zYVgVC*s~XPqWqzv-vZZ6&E1FX2q%HVKojr~Wqsw#djsL@%%%S}HGs$ff#r7|{0`Iu z4}b(pwE=DeK9FEeKPBerNHjK?6=!OiB0HP!cfz3tAOZNmZIjREdqpH^LZ%DoRqH3! z_sRV`da&%dIZ+1KbmqA@&TqMBBpI!(T`8{HYOU??eZN;;>^?-1LW96#l)~(*S3f(| zRcD-?Ee-*Dt6yiIj&y*Yb3$Qbmc-Wr!vsu0EhWR0L^d`LR(!e5>FVyJ=$D^P%k=%h zL7RC)pa2Y0VwN1-&jQjS!s47#B(6)@hD4eL7@K*+hYAxDvFW?_`NnIeD0Sl|k#%e0 zqRNNl@8(wKsm4H)POLIn@zsvrfg$#7{_TTjJ`a8wc}WZP^^1o>1uG~RJ5`F!s2~x@o2+3 z#JCixDn%lKxGv#UwM3iN$82`8tuQubP}^rJzTS>m=JiC@etwKVE;obgx`aYuuKaoy zP!1pJB%jaY`voHLIPtx^DBrQQN2jJSVK~$Z=xoZ?*0LJ0p`^{{0lb8b(-D(8|MS`Vi)W$+kEF@?lTE-)VjTTmk z!a~5S5JXt85JZb$mHYvUNFbG9qtPxY6fahjRd;9RbwGpU(yY&;k<)!qxzsVRwbWh* zCRh{g1$GGCkB0~Qsz49;nqjBmC4V8VWmo21&sa%G^*a>e9* zp)@zyc_?notm~HOr*(S--9h{}kqfeGz-wAJExQ&hzVK~#Og&ubTS90%a%{n-*_*|dY8?hxdE&`pv~4rI)e3>1Wp(hh=n(ZE|p z1bXo*iFE2BLN&#U9{m^Q4`M2YBBN|$q2JG|z+n6CJAIzA!NEOKlh}!6tQa<-d@TOL zpZ-_RPMr3i{nSOwU;@jLpKzA!puQ`09J{cBU&)!`={WXKcW}VE-Nh%7L1{l@+PVqM zQJ*C_*rdM30mD|snbPJkZEK%W=bJKXv-klo@V)mbM;j(>Ru(XcRqyvv!=h2wd&|D) zhj7=sEjF@X)ZUhMyHa0BKO*_f)^0Xj#fniMQm6F%qv~&?RwO?*y)B7LM!mvU+Sn|P z*(@$fd)%r9O8*A;Y?NGxyi_iu8FsHK-&X5d*K}^8rs5*%$!yY9$)?=-Q zRz($6wS>dCkL?xn71!{Gb&FM|TdOCnmDWmAp+beqgUIK&rJU5?IXp?_JQxOeD1Uf|`8X@|AA`Us_^z?ahdiQ5G*6i54`1wbhKRmLK+#$ce z=zJ1?(W}#`j}O>Td?C4sfh9b`R{v{1oy5kHqZn3A*y^R^*d*TN7jO6TP!vT`6h+Zq z$3yGQ+T|f3S&;0N?3a8XA=xDPM6#29iKo^S%aXg3cAI1c2NC>6m&gU|M#)ce`_)L! zW4rd7a0#6x7jej%UE~&GRj_X)C)(~&i{wGAnsC&5vEE@(@ql`1;BW8epXjrwsHmtx zZ+kyKlIH|L5JO$YV;lRIe(w#&;E%LlWA=ajP$xhizC~6I)Mzv9HK%i zBaP?+<`G3!>Bq$zfbEdukwQC}R9qS;VD=pB7Ay1+=>m`gD!@2!Q}EqOw#`hFVP7>L z_E(vE+0C*X(gETQ8>D z4medWq)1|ciAKR=OJbc)dmtNsh_IRn`>T{EGi*TC15?1^+UJnPF991g<$$*|8CXO7 zmuU6IVT=J4)>j^iadj+OSPEg5v1dKL-tahx44oCUtJ26@9p339BEx4OJ#tf6%3 z-qqbS`K?Q(RIWb0I31k;Hq#<0r-(mABnxgn*jWnWNxz>MGpCc}g(&o1+)`m9gIAEPTt(cc9e*nQv$q7e-&geGEE`O@ngYiIzE l!JYyFVww!9@7rTq`~u9ctrly#nRfsH002ovPDHLkV1kkg@i_nh literal 0 HcmV?d00001 diff --git a/emojis/1f497.png b/emojis/1f497.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0a4ba8507b8974a88cc9dad428c9cf10be8800 GIT binary patch literal 661 zcmV;G0&4wbyyI?Ix!6#;C7_NM|P|n@%Ef8rY{W<`lgG3~95;k5{jWDph_FA+dGyD6!?~ zSx}|T7V>nA?m>cJ2=uZ8juTs+nkK4LiJDC+^B-t6n`CPtZC@8Y;(~xeZwV?@mZzra z7}-hexC6RTC0badZEorf^;$?nl;{Ezy-u@wcvYiVeLbTwf2ikVD|M^URybfETU< zlZo;$HlL+`$99sLG^>)CH2piaWAj-Oa$MzvX@Ltg)3RMN{#gk`I1yw@esW^MsZ7SvQo(}I>mrjw`JV3|Z zG7`8MltUozKmfrxVXaxz@AuX`NbKBp&<*s_X4WT(Jr~t+&_&@l=SBFFECNS?b7p<= vDqw(X0{0M!Kv>K1ZxL`8cnAovr2N}Y`O?X~lfyD|00000NkvXXu0mjfhVCls literal 0 HcmV?d00001 diff --git a/emojis/1f498.png b/emojis/1f498.png new file mode 100644 index 0000000000000000000000000000000000000000..f4f10882d4239910a838ca621e301cb7f465166e GIT binary patch literal 658 zcmV;D0&V??P)(T9$a&wCqKfhQsxr|GoWxEf7+(@bgh!7ay@(ZhuL4 zu%WHbiZA!4e#Ym?GZ|gTZWISATT4Rq4*;KtdTUwhL%_1JZJXaZzDJvnXW}Otom8d3 zEW#ZWD*^#g>eS_?fx#sBY-^2=GZW`Zf)!}vx@-2echWOC+7nL2ZUJ8M6nToXj;KDZ z0aQl2u&o5qsWEC> z+6k1Fk>?ZdDG^RPsHYAJ2Ze(|PaAJ5&@8#^^Vh~V_%Kj)7>KadB0{%< z`x-$bXatQ=;0+(^UDc*5leS%{M7;A2?yHdk&+uN!>I%s=0wW^y0MqP19UQ!QW^Fy) s*isXGRub^P1X*E2V=m?P;iUPGUt_-SYlxuLs{jB107*qoM6N<$f~{90jQ{`u literal 0 HcmV?d00001 diff --git a/emojis/1f499.png b/emojis/1f499.png new file mode 100644 index 0000000000000000000000000000000000000000..3831cb0c850105180b7298f1b7e50f185082e537 GIT binary patch literal 363 zcmV-x0hIoUP)R6H&yRaeb1iC^r_?~7BR+$a2KD3QYWi?#FBlBk~@{jITS9~H-{U=`Kc@ql?PaI zxQmW`_4M%^_;J;sLr zw;}bU4Rj?c*%hnU@ozhcRce>gK@dh*!Iqf>JOiB1-J1KO&(FNDkhaUXc%#b30~qY3cJK%egcakX{)#E=XU@A002ov JPDHLkV1iLSpGE)x literal 0 HcmV?d00001 diff --git a/emojis/1f49a.png b/emojis/1f49a.png new file mode 100644 index 0000000000000000000000000000000000000000..e495bf7d024e4e7eea96bea1a2d73aff84349094 GIT binary patch literal 364 zcmV-y0h9iTP)U{i=rGCt0$++? zGzhwA)c;_3VK^)XQQ_dq{XSk0rkjWEo~Qig^x2gqoWNI%{Am#<@dMxeQg>c$m^!6A zE_DTq_*T43xofK8QP{vTMtGgLEj|yDT4~KYtU9n9Zi#cKaKV8^+^ljwl}m%x+{dcF zyJ)sErS3IcHNR^OOXj!Kuxoz1Exa|qH;p{Q$nlMO^1Nva`^C0n3fr}?u-`J7m?T^H z;QzhHmfp42Xw5is9ee(5Pvu5c##PZORA}s1`Z_+EZJ3^Q-6tKL);qn^J3Tc_vW6W; z?Ic-KhCvVvG>3hOewo@V^#CpM5KonfLk6WBRTDhH3sa@WX7~xEC~y95O{8l80000< KMNUMnLSTY9#-tJe literal 0 HcmV?d00001 diff --git a/emojis/1f49b.png b/emojis/1f49b.png new file mode 100644 index 0000000000000000000000000000000000000000..b325d41e194ab99b1ab15889c3ec75d5ed51585e GIT binary patch literal 347 zcmV-h0i^zkP)h)j z285!Uqv93R48`E$ASwj1yzkErg;;IS=A81IYZup7v4U@yI%$Y=_=z8mRrhhrk@Hed za05ep$E#{>+mZDBW8B3Wrg%*r6ki63^-}LJGPj2N>H7;PTsAkv7ImqYtAkPxF><;q z78_x^;ie^(y4A31c`FSEmUqy|zUA$=QqM7UcGHR%P1*!|&Tfx3Y0;7F;)DP9Ua}jV zrch?&HV*yUA-R*PS*kR16S9d<78{ez;&T&Cv>*t=xR(vQ@wc~;jWF)fqsO3}RD31Z tagTb0Mt1P5==@<2r|R&OyhLGUfnTwyV8-?B--7@E002ovPDHLkV1j9_p}hbA literal 0 HcmV?d00001 diff --git a/emojis/1f49c.png b/emojis/1f49c.png new file mode 100644 index 0000000000000000000000000000000000000000..43c6524420c274dba3460cb9e9d90c9c3aa97ba1 GIT binary patch literal 479 zcmV<50U-W~P)8<=nWE*804QWk09u@Lx^T|^JaAD)~N>a zI(5i|#GueaM41FL@G!wN55W)%^&L{g_!WxJ#%~9g(>5Mn0(*xY9yz4#^HB)6*lN{- za>hF>?7LEU1hkxug~O*KjYmfmziqAjrbNMKwZ)^iZw?F_y4eGSfrH&WnS47vWaI0< zG4Q0h$?O9f056x9Gvm`k_nq}mQnA|N&51iNz5wSrZV6C;%N)1$^!2?f+QYjq2g9c# zU6dCEqLim!IM-RD8oGI%DjB-js{-{@FQNk9sooFOmEt2+a;2D4XBQ^k03Ma|W)~*L z)wGk!>`3v93hhWSl6F!V72oKj{TNu`|1FPB+JpEsdD4qjq+kt-h71Z_R45eGsau_j)fOE(c5)CG zJL~2j;Gk;@;vhJQi*9BR_byT+inJjKUcKagyvDR?YD}!pBOEe2S)4$~q0|rp4pTe? zAEk-VV4r+lzDvg`kjKD0-~n}nb<5!a9cjcPlqDb!1i&lMd%zbX!lbIa1xobgQC8D7 z7uhpIp9kCoxePjMuvjCZ#4y4P$|xm}HOs%fv+A6T7~~Y&6c%eB{L6J?`>|74tP#BT z2sbAHC40WX*rfn%SsWo}_{~zht1jN$3A$P#L;=`B=0XNlh7w!qh91WU5xN{7q8f5c z$SvdtpzbjWP-|6$vx+lowKsS0b%#!agsL8XYUz|p78P0;VQS}5pmY&}P8oPEN{TK+ zNQyi}-GUH`E}imFg3zHuhX_mqM@AQml@eG=Yo_zJ_bFSkV*dGjq_3%!O-NmNxHD27 z>L@DqM#Y$Ee`&b~_yRg)`h@#!VL%;wRfd#@;l5@l=j=v-j@NA^^sI9GunQ-U; zP_;bvy3tS07;-F7N#1db3gTHQZr*>=Hq;FO)j$Gx4Bq7hz#r8SHwsO&IzlGc0uy1jsk-iGiu#p`g7*xtNTD3Aiz7|0&pE@0u-1~rB{TjKn-YIL~eqr%}l=S2inPt z0*?V9M}QU)POEA&NEnz=Rcv)tsRd#b5(;&QhypVptn#9}V-{EdwzIi3su_N<^>sn7 zao1(DC6u%hC>znmALrSG30903)z)-+4Uw1x%DRCkK)?0&?zxqjNSp;itj8EiT3fnI zu%Zi?MK!KY?*dut)ki+Kx%qQ`^3xDtD5S;vqT{Bbd|aG+sxSg9itw9Vdj10Sv-g0V zzyKiRsleb$V(Q9DVoF(qb@L0X61b+21a1Rcf$zX2ggb~R>#(Z)>jCf#I0ZZcrd8R{ YPsmxaBMKh0=l}o!07*qoM6N<$f-|58mjD0& literal 0 HcmV?d00001 diff --git a/emojis/1f49f.png b/emojis/1f49f.png new file mode 100644 index 0000000000000000000000000000000000000000..6980693620e1b9fe75d9f35a88d3713205599161 GIT binary patch literal 456 zcmV;(0XP1MP)4c10KoD8d-uv+qSwYki-?lt28DbICx=d50z#&`v>(7uet;~F zZpOhykWO}Mp+uY?tu*=l#D@nDHyg{VZ6IVmx)=Ai zWn+1@4TQ`uY}{CBDqV7gqAO%RlG<7dR)|PN2&VmBL>;$l&a3p7n;~1+`W@U9saUA1F98)mb z+h5n?2X`}z4Ki`V7)%ri(beE3%k9j7iLr6O(zE-{(wz6bsl@JlNQL*&xhg)9zi17 z+|ul=C!;ab(3hEAcW?=cOLzo{#8TO`+!uPy%gQ4)tcj+f=a^l0(1N0cN03M?m7SOU zp-BK7T)eDA)UYO+hMr?~-N6MEE$+Yiknr^ny+sRNRw80guxuLoFI+&-hyh!GAb_nnitC4Qm1~D^a*Oj^M~TF(rCp z_+&8%*V@+aFB=EA-XTg7nyQsjrjU%!P-fR1)6ny3SnK3vB?4gUXnS>R^F$n9Dep+% z%X`>3aN6zttx>_(`vAa=YNeDZB;!-IRbw2QJc2~-PAoiY6TFq~{-KWm0*p0qjt~mh z*53NJ=V#Vo?~jFv&$d-#a1k`wR*eyByYd38Wzr?uU$g=BojwrUKQ_yec90Ju^DZvg-R002ovPDHLkV1oOYO|Sp} literal 0 HcmV?d00001 diff --git a/emojis/1f4a1.png b/emojis/1f4a1.png new file mode 100644 index 0000000000000000000000000000000000000000..708640b5fe2caad3600700f66e47812a7412047a GIT binary patch literal 506 zcmVvopsX6c>r_(0JoZe1R+EZF7nUB8VVjh4>zgw^ia>%2^5uiXwvyGRU}$ zq4%q}WKMC=iapuVuKHiQO1Ac`m{T3p+Yld#T#wY1s z(7j-M62-pzB8enYkwFF-cHP9LJu#pjp&lUy_O0U^8Dx;5kVqu*5AvG#%CE^kNhDGc zK?D&*5OD|pdfQ_WcSR6E1QF_b9=2d}V(oW)PMWD&6PvmGcqf-S3+luEyal7}ji<|^ zu{5fB)#l64cHLxHYlF_5`sANg^G3s=t{>&v`i8da4N4e~Mh-2Fb6BfIb@IU>^9F-5 zl#U*rd?=;qw6(RpV`n;j*7yC?g8JaEzs+l!;j5*l`D)xW*W0c?K`K!mHO=70%&fDZ we)`GB7R>O|*7nZN-K@W0*KC$Q;JJ7B574!l8%OM&2mk;807*qoM6N<$g0`*nvj6}9 literal 0 HcmV?d00001 diff --git a/emojis/1f4a2.png b/emojis/1f4a2.png new file mode 100644 index 0000000000000000000000000000000000000000..deaabf2d0563b231c2adcac912123632813df718 GIT binary patch literal 577 zcmV-H0>1r;P)eB4i~B*;@9-%=Y^IKHlwJqP=;ZymZ;sR~8_6d3?rF|EN@f_Vs#f0AN?_EvSZz5NtVby?38RtCLbol&)U7>MsZt{ z4OqZ@l5dkiG8j8`UJsjO54LwUU5`Z^P&eRG^@m!rtgOQ>yg7F8kLVGyR1QJu8xN2daQRH{>Chz?noMTHi}+sM zR5?bBmHY4xzHV)g?8`J(v0iM&%hF@c8|laD5xf`vbWYcs*^p_DmQ&73e{<1r9M`I# zmW?=#x2(8Q@+`UE#9SwS8ZtbIJy@D`x|=+OyVNI^O?J#}66f43`5f1^{oqW`>>e|2 zt?q1RUv}27QU@j5BoE?kgOlS-t;iMOckR7HbKqiYbY{U|zvR{E-qf#Vw#|mw^*E+X zcFb)OgfFmw?*u`d#y65(0&+Ssb{Ds*3c4NH3ZcnG&Iyd;LzY0L0heD z4Q(|=4mDk4&@E{ZK~o(O1Pv;>T%K5PdcNG*`Alc)BmN%O5(xaZxu;NH z9XJLY2L^!+;KklIMr!Z(EvIRr(43wx<#)&L4t;vFNm{z68@KN8Q|m+X)bpoLZUZL( z@z*ZU2FB@1(_(9Kx^hyYNtccstzvXh(nFv?ZyQ9<0qb-nI7}&UA1KgU3v&*%&Myh# zDzKky1`XSYKLX+c*$pGkB0zv302TT(!#@JhrVp~)vXPB!0?;5kTWVMVD_{kJ?M1R{ z$h?(}Y-AG@_#!qdY-6fSYUw#7P-=B8NpYq vn#2ll04M@EU=8yCxFqS71QJLffdoGQGqi+^318Cd00000NkvXXu0mjfu~NJ^ literal 0 HcmV?d00001 diff --git a/emojis/1f4a4.png b/emojis/1f4a4.png new file mode 100644 index 0000000000000000000000000000000000000000..89d7b8839706b3b5dbb9023122aa95e3c73d29eb GIT binary patch literal 418 zcmV;T0bTxyP){eBNYlyJx?h@!KVlhB_~L`zdcf`m~aQHu~YG)g1{ zO`fG7`~yyFK@AN-i;K26x-r2!jQ^ zICF7^LyQS-0Udt#DI^Xvz;qGE*kh)Fr@$)mi$WV>0DNKS0k8$SBg$r>ExTZPz&P*> z)n!u&iB@b)16PGUmnNQo*b_xZ7**@`EaW4g00ZEH;iTX>uw`*Ob9 zUeaU1L*XmH8=FZ)hf$`2R|5PR^8snmXcg(WGO|v01f1a1*vBSY5)KL M07*qoM6N<$f(dZ2ZU6uP literal 0 HcmV?d00001 diff --git a/emojis/1f4a5.png b/emojis/1f4a5.png new file mode 100644 index 0000000000000000000000000000000000000000..bee635ccd6886b3efe5caaee19edbf15f611115d GIT binary patch literal 680 zcmV;Z0$2TsP)Q>N2-5f0xH(l&h+6Z=ROT|Gsi?*e0ee_O%4@?w8K?s- zFrZyZG~-Brd0RsBem(~N7U%-TfeGNBl-FjF&I6OcU0@Ew$fw1f4`x=_ex%4xXIs;b zItYv_u-=gy*oTtoauo+UmcJGn3n>SNJ}iuM4o?-jDA z_0H{_c*ueIHGsNly{ac%4{)@X`E&bVU`6F2m zWf6=p!ibk@n5E^0d33V_A%l=X)&re?Y5bD2vfw7D00KmEtf$ILn~=Uh`m(DMMu!g< z>D`);W^F=T1Pphsl9pgyU#K*H&8HpxJ5bk5b!-xJ8qv=y#=y4H2EFtC=iP(?kd%1# z+cGyVJbx^h|2B-JdC%V)bjxB!+-%pzyb@R z%HS^Sy%ygfK!Ctv4*MW*1M~qBNFWiAL5AQ3;55)+Z4K-x@EjO0U|s-w=JL}W!%{r} O0000SQsBp1)fqIo~6uWkqS1vEKjL*DAF@ zEEl9+N4DXP|Fftmo2u$rRU4_+RJBj44&e;G`L`EMtiek1D9NcVUF*_)@8n8k6yy5q zs7p;*Ytr1}YE!qAMT(RsVHgh()4o!takqy-vmI=y4Ya)&$2i%8VGQ959wsLI)G+8z zo9S*4WHH%~XSjx&n5d$PhSmDp9a$2YkK5!iw)#!Ofc|>L016E|$y0JY>E z{k;(HD`pzNiK;qVRjNu;&S1i9AH_*@CdF(!OzDM}k|9;ci*=IMNyhNTqz_f?6$VWS y&rRw1rRp6n#7|XJnc-VkIowiXSd06(Xvz;m3y_wSYq~7}0000Axl{=BLtpirT>Rm-k2rni=<-*1=79Z$pMG=DlH1~_J2y}t zu?8Lv-Vtt*BZ44^Nl8gbsouo5-ghGWo|=@Dl+hjC(H))Bk$VpNPUoiX z=#K78XVF=77H0be=X}g;cg^yJS(wET1o7GppLV`-siI;W_qES+*8e6YCH2O0pCOxP z*~rEyihARbPy4&+LS4sS-uGYi=dnGS yY$lt@X1^cDlz(sySLoHq$+l0)pOSwQ$GieD2a4kvyq?bh0000YhScN7b;X0ubG>AmICipq2Pg0g^TI8B_Mdum z^pwqF5*<{3_2IJACdaVopHiDtn^c=rn^b;h#WbqThNJ6dZBlJgZBkwCtJcedAxCT> zOI%y&kC9aFOK)pL*9HxiFrc>qTngRu8F{gi=ZG^{lDfhke8pkg>klzqiP!jqDPbHf z4BDOJl{|}mc!MWcCiY?!k8E$TW|ViyWXZgWF&sd#3(3POyFV?p!6USqbLxf;f#KI}1XQ zg)C$t%POwpryZntnHg%9w83nor#O;nJi%9v3SWqKV58v@V_<)bZ4YcqDv*cYY aTk{8tzJP1s5QLEc0000NuJ;1 z{XWXr!&c(4FRVG(fQmPxz8;1;+SVbefDV!z%)rb6wL8+;ydBlF-o3~1Q)lqXDsZ!c z-0ykEkz);HZmU9$17_R70K-87v!E5Jmxzy|{U z)CB$4E-_F17Jbo0^m!*pq*yPr3>VZOxB-Zy{;@cdeuDoA2hu1GdL(&tf2brKlQ^p@f5CgdWq(!48O3!W zbj2!JTVMj`aa^`dUcwt}XsbjKxNNVCY2qHvB6Nhd(DoIx!m9$uFk!E2#B-cOIA|0L zve5$LsM+fRYIC5X?*@}m$3rFddSUex7289d|K0gYCu=y4;3+H zpS0Ps@oq)YUn=@bX)8(VO?~47%E6i)FEC$`mxxu=5!#Br(!kVFt@Wm~*%GxvRj*No zwq^1I+{ac$dW;2Oh?tUNnmDb9k+NPpT-Iw1d?SA(FOptjO-JSjlFEJG#wL)h00000 LNkvXXu0mjfkciIk literal 0 HcmV?d00001 diff --git a/emojis/1f4ab.png b/emojis/1f4ab.png new file mode 100644 index 0000000000000000000000000000000000000000..d48d5f626611710a8f4c43fd5c39423d80dc18ef GIT binary patch literal 623 zcmV-#0+9WQP)Od|xcgzhp;@j6eC*>;oq; ziE(sfe&1SuUK@OC5B0?358L)^W4dL&hBaHp^wyti&&lBezLYs58`;RFWE+xspD5>bDxFHF(y4SRol2)RQ9cb` z7jZV_jBTZqidZ352m}IwKp+s33wSf4b5@kYqNs_;VK@4{X2-D4MmLcDFMZzjADL6f zKE#VPk);ldRy)e?-<*o&rMpCV#~xzx=zDqZu^*Giifm*f8`A#zBeIc= zY-A&wSYG-Qiy>bv5k*81QA8AF<&Q`35T;~4Dw9ky$t06OkJZaR5KmW|;+MtKv3lhd zTgFk`5YFSe8`3%H4Le3AZpU;@n+{HY66@XLhP@MRbqI%yj$ag`AK8|-9iB2e@d7q# z*fcryYn!<9ney9(_pNu|wo4woU*0owRFrx0JM1Ioa0kAq(v~{WH#+gR^{!iVMu<`| zOU$~dhciVW(0Z(OpR?s_oUT7r#25`|s|^c0`naf}b$7De|*pZpukqwOf=)*}6!3_!nO&>Kykn-8ldN002ov JPDHLkV1m#m9>f3u literal 0 HcmV?d00001 diff --git a/emojis/1f4ac.png b/emojis/1f4ac.png new file mode 100644 index 0000000000000000000000000000000000000000..36075f0eb226cdb7f4e95fb710b2d2788a28fc3b GIT binary patch literal 453 zcmV;$0XqJPP)WSFh&7i>Ee$~(Xln?Yg8Bem z=BUQLfI~N|2A9@2u0j?F66GLt5mSQRU#HZP=%UXPt&yvK(?tv%K611lyDfVwO=M&n zOV+4bBUh~0D#}QRi)i?>H<|Tq=@u4sRHYPBBgK6T__szxxhb5Es80oNO4hnljA6j~ z^=Fo`uXS`65tq=kam|RhRB+CUI@7zk57M&vg(aUBmaLkc`>4*e#@T{>RzP>*;m+u|yQAYG!mF8C*X}*io}9ME{tEB0T}NNDZvwHgOSPT8PufiZ$Pv|Rjz00000NkvXXu0mjf&Nj_8 literal 0 HcmV?d00001 diff --git a/emojis/1f4ad.png b/emojis/1f4ad.png new file mode 100644 index 0000000000000000000000000000000000000000..b40f2a909f9598b0ec4b04f0977044ad404669d7 GIT binary patch literal 370 zcmV-&0ge8NP)OS8@4SN&3o|D`6X8o=>a`f1V%Y$!wQ4a=_ ziN@f?0|w?n^y1AJ5^pBXvl9##aKV4mq{&P$48k_Tw#Y!l0oicScJ14~@6Wx)kzx3J zqXz{TTP#R^kJ<1;WgF5Z)nvg^KL(0?-SIfXAx&f?cTX2wd?8am66dusrWw$ z;7nj7H2O(cEbUo%?_*3hgBHuUO|7^GTZ!1UjZ}Xtl!)r#3Zx31R|jN2IzSMIs75ecqdBe;5vNNh_R zUcL)|Y!Xl^g;PT&(4!_06-2c3)$xU3?gnmij{3|cv{+{G@F0ta2hn1g`phNV<{ZJ? z4N5~NN*GCmqGAtrK8Y?>hU*vqr~=RXV-rM{PX2=4DndQLKQl=%|2O4hCyCU5zkE>3 zl@A2L9_Z*H5~48`9Tg;3pS`j{oFhB14=>+EWn`4v_!P^|f*uN$b0KC%e;KIl#YD+If6sw3qwSRIK$mkbwA5W-wgkZ>P;ddjVgMAh;WyG Y02j_K#*J_mr2qf`07*qoM6N<$f^5xwP5=M^ literal 0 HcmV?d00001 diff --git a/emojis/1f4af.png b/emojis/1f4af.png new file mode 100644 index 0000000000000000000000000000000000000000..36680b5a9b12cf9f3a5b5b2813fd2beb1f5e98b8 GIT binary patch literal 583 zcmV-N0=WH&P)TSMW{)eypke;fKss60tQPC(zF6aglB>HSTNut_|JKU5u5g_^+S zhG4VGN!ml$KpoOT%S{N*lWCk3e~M++aW6q7iL*9ld- z$tB5VmDk9-=!4j%>V(pjZ>T9u<7>>Ki|cTM)CX8ct;HV94XR!gKZq4`;&a`0$@91u z>#+uLMXb0mXih12k)3!HQ_3o_VgcXdOqi3*<2-()&JB8I#KRb2j5Dfcaa{QfKVreM zDx?}3#;8Gz@d@=FHG}!Ilq<@bk}XkNOE%$7tjAjA4Q1~j^|*h9?)Ks-@)+*JsuKTL z!Udd5%UNMi%~drL$8a;2@NIhkv^b3~mG7{CUX*2nzT~QmYvdI%qCQfYuaWW}{sy|$ V*L{g1Fq{AY002ovPDHLkV1mph7U=*0 literal 0 HcmV?d00001 diff --git a/emojis/1f4b0.png b/emojis/1f4b0.png new file mode 100644 index 0000000000000000000000000000000000000000..7f246f1b82ecec9a99a62f9ed75dcde528749ce6 GIT binary patch literal 574 zcmV-E0>S->P)Xd5_q*x*3K`Eg;2tg51f%E{;ArD=mL#G76 zV}}l&`v;`(P#_UPMPXr75Mqf$tVIQONGuDah!mII*_m%cEjSLoUV3r+GD(HT`o{eo zt?z+Xz#;yd0uD;n1^gkwJKVE}^(+8NKp$()19OoPkmAixE|5}MSz3Kmt%QRl84oc^ zq5oqln0YQ#Db!w81} zfhTH=UK4%9K79*$Jr{EIT%K$OUVaSuxok8wh*+QC7BEiC84$r46C;3#`E{aPh1vO# zjDu6%9_`JJ8W~)P3?c&u_<|9jg_^eQj{e>p?-oL?-7PaV9Z;^4bVQK)ro`Ts*&Uc7wwv!QK*judly< z=l=b7KW`Kt0at|^_ezF=FW3}O`Tf%3SnH4G=icY9N}9wN13TPmHve2{cYLm0XFa=K z@k+h{Zeklp*C0?B%mL>mod$%#g|okWc+Y(Yo|1Tn>xiiI57bWer0Eo9v%*dS_bUhm zar;nx6sYk(;<51wZs&qT&8k$dHEAex0IAG`z)VCdKVB|j7CqI4g=F}b!8dEAv0bw;~21E#uE}R zMnvr-O<$0-h&WEyjTYH4i8rXk1B16=#&^Kaz%#(8q)Ffu&@osvvrkKx|sO)?Nnw694rNeEA}E+3dYN00000NkvXXu0mjfQCUIg literal 0 HcmV?d00001 diff --git a/emojis/1f4b2.png b/emojis/1f4b2.png new file mode 100644 index 0000000000000000000000000000000000000000..636aeed12505f0e640ff3577be5e2df1c5ebc28b GIT binary patch literal 551 zcmV+?0@(eDP)$^QEpDl zA0Ss}XD6|PS}jv@WQCi;MRHhJoJRUxn9u9wFu&|K`#l~x`QRxBIkdL+!rI#UyUlBO z-yN*h4G-zOv_ z%*~B0y6L7{bC)@8c;P>%5yzxy34CPm}Oz z#=JNBb$p1wv1)nIO&EK*vW(qj8J1;OmSI_j p)oQgkNYY=D-K4)*Tf5;-{sHP0x!>L<+J685002ovPDHLkV1mKI27~|r literal 0 HcmV?d00001 diff --git a/emojis/1f4b3.png b/emojis/1f4b3.png new file mode 100644 index 0000000000000000000000000000000000000000..c922db142fd9afd73d4276caa2ac9c8fddd38ed7 GIT binary patch literal 378 zcmV-=0fqjFP)z@f-qP zTClb38W*t>ytK|M4lZbmSeu|NBECUe1g5%U0DX89qgJC@)v?=bG#G|~5Eg!8O&_6X zDgsm8?k4S6(;;HQlFF3bY_=>Fu&4=104IKmm||1SB8<2}nQ!5|DrdBybx)&PVxo YUjU40d~@irlw5b>{4IIm|M>*8GDa)tDaAAZ0000#L2};TtuBJ zeo!|Rr61SCT+SOhq);%K^!MY>iQeT|FN*a(1=eWH%ML|)>ybbkipE28r=nP&vVe1r z-$b!Kl+0v_<9%SMO5xcI`qwGr&z$T#WUWPM3UBykkrED0H0CR(3W>MU45-I~+lwj5 z#8HLBn~rkU_d>eIHJ)x#grGEqXEW$uC1j~%qZ8sBr766|s-$yN9)LrF2M_E*(P)o(hv%P zlvbmEkj~d47c=2vWES;2{5k0lZ+c-Aw8>b0z~en2{7|^K1iwK}^1c|jVH8}mg`%Kj z2)~6<&^44~D9KQg%f=+0GksoAtvQ@E4=Kt`Q)Lp*c^FJ-UmX)Ps_eq3Do>*sVN_%G zvc&T%hzLa)LD)a=`LrwQUIm1m7~=@7&JodGowrxZ-R+pw*P5bSppVe%bWhM!K?Iv1 wpbmL!K*<{lTX3P$TF^)&6wF&>vH)T{rk3sn`3jhEB07*qoM6N<$f~gyRkN^Mx literal 0 HcmV?d00001 diff --git a/emojis/1f4b7.png b/emojis/1f4b7.png new file mode 100644 index 0000000000000000000000000000000000000000..4755a008dd8e1a0c9ab3e681546f1fa230b3abf4 GIT binary patch literal 315 zcmV-B0mS}^P)9Khk<`|cleZfhO%aWs|{ff*6>LB~N?(rtAKT|o!kg%x5- zl!S^#wndV!w!;lNn0Qdn!=F>P*NrRR3u@!5PMDXFYIU0gr+Lo>J#-_jhbm!8!zV2Pb|0MQ5_Vm=|%Is-tEf>t&J~wgT;4j@Pr`m(1 z_b?Re&P?jM$8s0%76@J=V#^r8kG%ZE0NPvU&X0WM&jMgmLG@rsmMB3^6@D72Viu_}L~0D8z$e^Yw{$)*C3tD@s1zKWbCsFFSD9N=__w`^g&zu6 zJPJn|Lwx@Dv(VZgbN%l#ckgn*%X_2{o7Q`dul8<%`w2!Fm+#gtlZ^P64hDkB7#kAA zd7N}EW!=cDlq&eWy@I4a4U#!TxQo*3}$FJKX=kGHkmJn|jz_GlisGg4m6JY7l`qi3bVnc0ccY$DccK0PA`cKD+N*i)>q_yzry`tS)_e9Dn;;k2oA}~7C!LmyT zT>{S?D(pY-P;@Xl)*-Ef;32J~4k{_AO&hMzY`SUN=>+lAX!!JE0~{EteG z$L?clWrA}}*AWONmR{p=R1%3TP|WXbrOthn;m<=T>=Fo?d~F=iY$Q@KHj+QEn@jL} zTM-Bf1uEOQdg2ZzYr8O;EU4^~z-nTJgl4Crq=t-<;d?y7mL5kU$qV>S(H*)?+SuXg z=-+| z{ql-J^`(9s7ANE35f;~G$WthyXHw|tBw3otOrxh6i)tlM*-qAUbb>-E1%wcc%sxX( z10e(#n|ldWb+D}`P)!<}$)AMR=P0C-(@@sL8UHn`nvI!n?=g%Fp{fqnwxU=}R%~Vm zlgp!Ij5LK*MVPqM+)GP!Cs}$%r=$KXS@Bei!SQ<}^bP9VM~K80D5jcKOWf~mb+2rO zc{%-<=;jiQo*;+Ik2ASEO6=DvS@Ww?{KdAo`{HtsRkJhB2 Sb_;I+0000LtFO_OsTjV5x;hk9LdYUv(P-u}63iP^b3i^pdC zm8nM>@ZaO z+GP^Q6r0s=Jg%1c7dM~r=u0Q;Y|66>`A=;coq%c52^(L`CeNz!T2-6w%9#W786%Gn zE}lHHkGpGI2;+>v_49`g`kq+_9-z8xj1`O(5bkg7R2whe*AXTQ6;_L1sO(lh*PG3U z^;R2~D{L^Zib$=ro${@V0m3-tUAf6o)A|U!;s+-pL}jyC8g>Q{#wnSg0+bkXM1%^t ze2$Rmk}+Z7cmm}Y$B0&~N~p>-;#rUcC_lN-D8B{rEN+6!LC9WL%{C+A5+05Tgu?Tl zRr*}!*vU3SEXGPC3B2crbK>lU<1_Q2LYY-uTfJje;|KXG<4Fq`uT2RIb d6aaycq3?2Hm6wv8BsKs5002ovPDHLkV1gdR)+Yb} literal 0 HcmV?d00001 diff --git a/emojis/1f4bb.png b/emojis/1f4bb.png new file mode 100644 index 0000000000000000000000000000000000000000..510d0cea4f2936a1d397e4fbbeff85b8e72b3420 GIT binary patch literal 359 zcmV-t0hs=YP)7~D0EHG?23Z`XZH$bHeWb(hy5`G3rZ<~upl#mh+u9EAd|CB zGFJYUi=}dD*Le+5lSQyNE!x0tZ69PKP)07%=8*xDmNEAT%OR5tlNUN1pl%ujW|e;Ycm8MDQKl>(wc8VAo$I8G%r;f z6%7lXo*UQ>UGYeWj4G7jm&{E0=#`{Tl0HeGM(=8#RMe;r`8_MZ0NtsT->m&l-e*p0 T!r71#00000NkvXXu0mjfsFR+Q literal 0 HcmV?d00001 diff --git a/emojis/1f4bd.png b/emojis/1f4bd.png new file mode 100644 index 0000000000000000000000000000000000000000..66cada1b887708cda2e5475b583342cdf46bf74d GIT binary patch literal 654 zcmV;90&)F`P)JVO{42m9yM4_~c6&`$6hGHq=w(jOCGvj>i$|jq7==T%5A~j8h;co{_ zvglI73hJcAmmD0|V}pcJs#O|>za22ih?Ix8bYeGkwI$@{NKg*3giZg@JP%)dVfb5& z3{wcv?kfxzw~-=*;PTljZe6XXdQUBZP#MBoL3qmq{F2I2i!=3QC}40jN`_yO(RjL& zmQxjARRV%Fnn5<{6SQ22kaq9M7-lbUN)+WGNhQ;rIf=~r07n~>v9nT*|NfRYaglTWSGse29Uhqkx zA_S{8IXjQwnzdxBYk;nUjYun~vm+D)trpxBu#@1f5KSgI-r7gnv#yg^CYxB6g(OWH zkXOb(;x_+7#+Mv^C2aC7KiTpugO|4tgD*f%D2U5u@puC1xE=#T^E4bNVWT|DfbC^q zPa)?AV7iYrfn0ii6w!A7JsK$wo=@PeDz@a=pjOeWFq&C}78}Ns9(NzTWp-{3jg*ne zMLHgjvL(-EUFjjHJW9vw1x6+pNt0xBc8{ZgE9a|_K8Sf)K1=o=25dD<_g3-2g6Q$z+mDCc|%h-|wqu_b~NT zxHpm>T>>tV{euH`clY?I+wD@V-r{J7)3Y;fuCMaVX0!GVI~vIHgE0mXK|~M{M1;X$ zK%-u#(WoOLIF4Z~^)dHW)x?w6#AKLa#WKxJr|~=w$8k_fVXftx^42yi->fB<%TX*A znZ*L_cAFpwm@q^ZHjl`aw@@f7v&lyQwF?M3Oc)~Dl`@OV^Zdu%;}Wf2hY3Suy#U^# zA*eK0;2 ze|T>UV+<|5J${a{fG5BRFawkgD6aV%gW>qi$aRb{wE53>af(O43tUE#$qPOH#PDF4 zf?XnS7isJ9cXNh>!lV(H9SUFdhzKnOyF}hD(&F=aIfErIYZ;O0i-A5m73>mg8(CJ@ z)|U|ll^7?BTM9#;*4FWPz4&}yx_n;FSr)5bHkRvk&lF;?Jk2E$V*D>+sVcj6k>gas zSPm`52;*ZTG@4DSwK}z0oocPd@4XThkOiU~BSOq5OCFDh`*&`|1_J$bYBU7|D4J6Plm=IwOhyxL03<6t!94D)SutAPYM&G=Z{a1o;z_9BP2a*sFCKeWRG~` z+C_hqFsrY0PvLZ*c#P&6ov(VvF;1AlJRaePo+y(_gck~Dss_#?$b{%GeVD;z(jENB z$%I)Ot5u&?5$wq29b%I3SWhHP*!((WeTDQ^rd*W?{r+PLPjiH6pWj6($u#OTYBIU# zKO&~1)V=BZhJ6}!@_CA-McXP46snOh;=)zhKWT5$-sD${LVi&S*9nB~D^&bzGzx*E z!w!^eOTTEmrmsN%0R2VsC5{Y$dDl43DvOtd55SITBKnbO+DSu~)Z6>d^ke_mz&VkIzWANllVySCjMrPjH`5 m#i(wRZ*SJ<)-aDHd;A8~wTt>Rn}AUO0000^awXc4SGv?}c}iyewaNuCE`k?v;GvgIrjpui&pKqPK!=O=4# z#j`U0z;$ERa8$p`Z+$#hnrIWBt@rvtEq{Ci z4~GvH?arvqL?&(xLXN5UCR)vv;;ue@pWD9R@Igcv9vO#bTIkT1Slm2(DP5*GJWS$H z>ns?HvWkm9L=2yG|kSm2&Nxbb@H9LVXn zt7{CEJKU)&G6cd~Y(&fu5$OU3<@En6RwD;0b`Wz~{3_Lo9;7S3Lb2(9xfe7A| zweA#=BgY?HDIj0lB+e>)vjwa;K16AmtXe}v_#{TCPR|piWquJmyf~|{xZc88%ZP3b zUb!}dv6ceb1}}^fiqVe23!{`G6loj0Ac`qMRXb*3wRsne#T4))B3CYqvz>1DZQoiK sFudoU>WQkhU6>@-z@DOvLIgyFcLD`Cx#Sn^DF6Tf07*qoM6N<$f@Fh{*Z=?k literal 0 HcmV?d00001 diff --git a/emojis/1f4c3.png b/emojis/1f4c3.png new file mode 100644 index 0000000000000000000000000000000000000000..991698660f1f41d6e450728fba7328c93f594e67 GIT binary patch literal 386 zcmV-|0e$|7P)HLL z3SL#3Qld{1EfUI#fflQ%v9`6F$#&NbW?`(j6#PCx;`+@c@8RPo>%crGjKYxq&Ti~A zEz&m_&r?_=znx)100I#F&DFZ~yxn=a z;CVSFBo@EFO}FRM?fGzn@TTVzMG>iY@B0fR6qa)( zO&A_y8|>{fcD`IFsVQs< z%h$mkfiYysPfz0(9a0KQ^sZ~#HO%(*!jp&FeHnUpW#ZqN=jk5TCXC=7V{^? ySj+(vF{c!>PePJ-wb5Pywm7}5*BfgqBz^%W6L%G;cAB0500004m0hfqa{O}T4y44N+TkOkkmpf`~@pr z3$f_R!iJ3>Ah94sL@XRCRb5brQdP$`OgmJks$&k14iR4(dR_8r)y`g^8D+OXw+d;% z@^3{^iGyxb;TrJR0nIithvL}ySrhUyrQDRo2qqY$IQA7+7YAb~d`v^BWPuwhMER}R z9<56qPhL37)PqNn_^I|p;lnVY*3E`F!R) z!EKuetZQbf=MnjLLwLKklj|E`@@_YFZVlE8Ar%$4c#N{#i3!PA?anTu(FnEi z7@yLks49LApK8zJ;QqZVXqb<+me+6Jlld}6C>SJ}NH8+`nVAeeB0_560<5(>eDaL! z#005@jm*X|gQ{}3tDDaIJ*;1|k_~HCF&l@^k9?l1*KgAQYLM2gEv#-@L8(;2TFd`9 ze0rZeqp$xZBEqfCE^c*pk*JMxp5Sa=--OF|BF&QmU&xRFyv>;V`POvS}HO z4M{`659RVgjQ{`u07*qoM6N<$ Ef){`+?EnA( literal 0 HcmV?d00001 diff --git a/emojis/1f4c6.png b/emojis/1f4c6.png new file mode 100644 index 0000000000000000000000000000000000000000..54a78a033879c58689af2520ddd3f8dee02a8349 GIT binary patch literal 689 zcmV;i0#5yjP)X?KTF^* zMd6?okrSsh=?-Wdi8t}*+&n{$i^-&kmRB&%F5!bE;(OXyxcxiFqZFv}1vU4atemhw zETODR_H>CX>Y9J;`zuQT8ijGAZJ*I2Lejd<&m`f~78- zftF_K?t6c6d1{8TU!f_H;PqoiF~%@9J;VNv=NWo!fOXjnb%q8Di}%RyY~}PjC)wWe z4By=Nk>~d8rtm@sK@iZ$(xAJmKwT6?s47i~1a*$%uoc4=YPB^cXFjLwR~UHZFi&G? z;8!Y)PhCMoIQ8~h>m%6~C5n3(>I`z4P`rOL?Y1eeApQ9wix5gJ*b>Uka_f{1Wz z@CaqU0>ZjfDurVVJqJ1oqYz^Zs)|?gc%&-(_II^eYp2{?t{@=%4+`p+%eR7H?Tvo` XIIQPI2kl_X00000NkvXXu0mjf>6}53 literal 0 HcmV?d00001 diff --git a/emojis/1f4c7.png b/emojis/1f4c7.png new file mode 100644 index 0000000000000000000000000000000000000000..a5743a16ffc147b4921eaac0a83618afb06c1a7d GIT binary patch literal 536 zcmV+z0_XjSP)I=c@~ zZp0=-gF(qyrv8uEo7VdlkRh9+O&M&~!)z5jr7jzn)ycV>V4zC2K% z&e9@QLHNS~p0)J%_2Qf((U!~7%Ce0pig@*QlBgDwI6X2<$H4X83d^1TL$0UZ1A7kn3V%Mkn`97c|Jx2%c17jzK zPs-JsxA`lcuRjSp9R2Y!Bd*?PY(^HD-xCO2NQY_B${Ml22Fd(<5 zo%PjaqUt6IKS+_uwz0CbNVQU>Se&I!5E(Tzsq)X1-z>@lgt5LO{c_>rB@!Ez3ZWlh zjF50nsYF%M;Sh<1FQ1v2o>I^W3wjOYwHWi5hIAOx$`~OXhBS#W)LjO7Vi0k_0{?FT zaE2W+?2zS`wdHbIopa)O9$SgynB{U=LD#60?*0MljKIBYE;s6V)@KWGT#Hs$S0+@s a4!EDy6sWRvNAAx60000&Fs#5kV zQc9$hDEk#rl~(-Y34ZxEk0#^i4Y@M@~A2yMnoK~5F^$aY>fDym!RV@pMOS6 z7%1|LEP1>L&RM(&B94}`7UwK(^>>=h*O>Ejn2(Ob&Mv}0R7F*B&Z3$KF=C9N6=H-k zV(%@{T?J{H;$U2@P&v1|b zB){$rJE)3%>pi{c8iW@(_-Wl6vPT`xR9k7_tob-97SO*P%Ot ze)|=A{VKfMrgQTarYzxd57#|H*70~R3|R*9#Wl?C9_EW4a&(k*eh$5M1q`II4@mQ~ zSYz=bh;s}H`3V2{gC+6XQK5#wRKJhJ$H<4QTHC2bm%BVw-LP)-HHD|ZQZu= zZ*b8{#6=rz8;lEU7LBxM(ZUD=M`1=QD2UOTx4Gxs^W!?NyccpepHFq;tJ`lapFI5y zZ~~~bY`!29=6EsJfVzd(iqRwN|V=iTGH^ITKSNm%`6~B{rT%a?X@eh$)eC zVIb^!V^%qT*sz6{M7HbT1GY!qiF%YIcd`D;utgL%p zw29S?jyn%M6I;G#?OCGqg_sg4X9mJlBZYHs3*)YE{l^`?{xz`A30L2Dj11g;?Ai92 z&_!ZQ41_6HTRu73aG(*M{@b(9316I@V`*W;M~7?v@rBimj%MU=wPhguk5jn(p5x7V z;p%eDq1lSQhjWXDSqrP1k#XcT!c^!Ytq+`9FkCz9IOq~FC1OfQ={Ucr{MYrYJZcGD zWFSmgYjCwiRWQcjYKu|DsN!nN$446WH^L8p6vjyy2vbHCYYb8es)98JRY6s-#xU!Y zOUD|z4Bu`R2EtV91LK{Rm=Zp8jCWc>7YSWtywl=C$C(A;U{kU7H1Ov*Ga*c=3f34z z1XaZvgNmRcSYuFCoDnV@vBcbS?@7yq0k*rCsI3LdD@GNg%AgrJ1|KYr__7$d t+XlGlL%8TeI001b!Nqs!p??6}dnU;l5-~K%%o|FDS?4W(-Ksvya&Sp#~`JQ z#z>t#DJ3*UoD+IGo67s=8zk*GcViESPmRE{%Q2W5)zsPJokPUpox?eyXWGd2k4R59 z3{&T83dbO(L`n$}OG+7y5n~L!loCbCnV1qzgq~xd8u_xZ&a1U&I9qdb?hXg{9ikUB zQpA{1jW`i{jzL{{zHP1XdHjLij*dCvj?$~^io$!Lt~`b1KRE_%P*fvD_&$aw_vwYJ zD-^1UHYii0nx13ey~8=7s6VbFFJIFe9iIix(sRz@y`!)UoCsnqg*Ar48bcx0;zTGc zgGtlU2Bpv#DO4jx8zPgYrLYV{EFzXdL@2CS3K5HlrEtJjP^I#o*%Mdz`tuW&8*%LP zGP<@6bWC5r$jqBWY%?<#_ELFIP=$_7N0%QqZCGjAFz=Z*%X4?>HT-e!HpQ81?8*c- ge}xWsYsim&13@0lQP|uxwEzGB07*qoM6N<$f>SQ;$N&HU literal 0 HcmV?d00001 diff --git a/emojis/1f4cb.png b/emojis/1f4cb.png new file mode 100644 index 0000000000000000000000000000000000000000..9528d173ab2ee6f65bdae428e266d6c547710b0b GIT binary patch literal 482 zcmV<80UiE{P)ugK~$x|F>4cH7{KxWb9t|4hg6u?cp6V$k1GiNesbsD19ov}qO79OY_-k+ zAIM=&oo?}mIN}gr7m*Vpa`@WSD{~~8?S+S`+Ev($3+@d-`AweQS^=dJz1zBvaSxO( z-)!PI4vFD#2q?Z^=9f5*N4HlxL}6cqOCUQY+TJ2D4_v4=78!|<@_nDbh&a{8V!QWz z6;b9Bqrs#hVuTsq=La`Y=(@NZ{8Dx zA*p?(BJGpM*^MEiI$LHOMc6i8Z}ZcPG1MwWY!3g)kkRW82*Qv&p6gPp6tNjH>T^ek zqL@6!I1rDq87vB{t#9)6TR@&t(c^sM7&e1NM7Vfv0cGlYFlI7|NfjJHf)O@DhKL|c zbv9lx_%b53$D847{U|nr<>QMryvjjR^#V}F67XsL2{r>tqKioX?W4Q1{0osC)woOI Y2O$Q83;yg&7XSbN07*qoM6N<$f{u>R+5i9m literal 0 HcmV?d00001 diff --git a/emojis/1f4cc.png b/emojis/1f4cc.png new file mode 100644 index 0000000000000000000000000000000000000000..02b168d2639eaff9e2c061bbd7e91c8a2ccd7055 GIT binary patch literal 621 zcmV-z0+RiSP)OdfvSr*Yj!i=O29qJN92o_lO7f6Q= z5z(cD45FZap)8Uhy4IzOrwBT9P^7Se(8NsFb!Og~*|#-UTp}@g9(mGvn18UhFV{Q{ zv;$)T4*^Ssb2OW0Cst$>=w-uwYi(BG4qz2KFmaL(qv#M@6e6P*t^?vA!gh*5*tJ+( zec@_-z{@wHm7+=zxos^a$5O-61NIgWuK2;rrPA6xpe;%gzAqQ?ni^0_QKb;BIUsDX z4#HEAZYr|%bpxwGNR%Y3GjYuPa*?*C2DDOCeN{nZ2qJ@Tj0?0-rIo_VH{xo|CKJcZ z|6C!AqA4uTLSruKOPMypD8fW>?CRf60z!onAyb#aHxXrPSy#69Ln#RQm)HEqrO^D) z!-WnKrAd^=PwZq`t92&;p+bp}sY~ITh_bZ{qV;K9_ZwP+)+kH>CIAyq4t+b_wR>W= zzc-+URthiQNJF~*YA)r@L>*4x|CUWAbf1AXI3jC}cBd z1s+jDS-=7-UaR~5!ntu^KQKLetoKOKYZ(PBTT&LVfCVg|uXvrrbt&ErpC2>1>}BAU z#hxiUdUpO`_nVfFpTksXtq1r5GJ?n)A|L`H$m@}t6us8Lg?)R*fd@iz1Bj@Rn_Emf zp@|S;{@{E%-q!_kSD9!C>;!*ND&&2(;eZSRr^+dJhX3#jNJ7&Zf7b>i00000NkvXX Hu0mjfv6Bqj literal 0 HcmV?d00001 diff --git a/emojis/1f4cd.png b/emojis/1f4cd.png new file mode 100644 index 0000000000000000000000000000000000000000..0287a07d572ad0769fc90daa01379fca683b3c23 GIT binary patch literal 420 zcmV;V0bBlwP)sPpS$V4^uZc92VLq$(dSKj=snT05gaAHQe=^Wm;25*SWj zt=ku%LQUMddq%-Pp;#znfGjn|!h0441BKY-c^P;CK4X{XWfTnlV5br>{$cP3JDI%U z9|j6$Qy>((zVK0FHU&b(_xu|k1PYx!z02iNc`ondhU!gI*vZ5p9=-sT{eTnS8l5Eo O0000Hmni= literal 0 HcmV?d00001 diff --git a/emojis/1f4ce.png b/emojis/1f4ce.png new file mode 100644 index 0000000000000000000000000000000000000000..6ee0c5fb51e38446f2284c2d36f66811dc2da163 GIT binary patch literal 508 zcmV*xhQ|l(3bkM;u87z8& z7@=-bC!H+C#K8&<$?7H@lG;J>1pk1FMT?kwE!ClF{dk`E!|HwaPgd8~R`El);eX2c zi=R@DSKh*}nBrA@iF1iFxb7cJDi7fudXiklaeP8I+FZttIDsGC!B8*ZHFDMOzQK&l zlOAACZHH+P1VJ#croK}YMJ?2f%;^=n*V@5~zZlpSXT=e5O!9~fG8T*(c>@R7ZEcsS z+YIp`F5@G0l%A(gQglIPWM2J>?x~%!QWT?2D;wAsTk1Kwm3S(NBn!zb@;a{2UA5DW zm3A0GDA~lmnB!F2w_8uNp<|)rX)-6D)7@Bp9Lpnj&7OVUZT9Gc)A%X{3=xnvxCd;{xujTaJdaIHtKUA^t_nX5vA^>Vy^Dk z*~_&6PM`Dkrt`f>2^yJA;7Zf5ukvo&s<2RteUx*hgzjiMF2$;>BD?W?|1D2DyB z-{lj3paGvnwxuu)&>Dsh#d!9%wC?PU{3FLzjgG5uT!rH*99QAE3ddC#Lj$c(8)}Rc z;IYJucO@>~%rkndt|4EP-d9uecY--7olKtMOtC!PP@_|TM@7U^IJRQJ z&P@)bd74g+P7l~Oiq^2?FmhLLR0SvnEj zW8XDu&E}YA5%VmJgF9B?=R*8kh@TIO5lf9bwoU;ai^4K&SRG-@TAM3lg(f{Gy`2g3 zb~LJs#^7KZeh7XDeh8U-Ihf9c=|sJm0z4`rmLk5~U_no^ijI|5r+3I-~2rHur)?6o>**APPi*C@Qi*AMl(d!m`klv^hOggH}{) zL_h>YKm|tisK*>A!SLXHedS#bmA(f~c?rgww{2VExwCmDN1=Rq0S7nt#Q7E7Qfps*`K>hn zeB6?yAD%Fj#jY`{%P}o|S<>1riHoxr&R8XpQuZw*XO)uMmu~?%;f5#P{8>E1 zD?9W^$34EIR~n?3EPKQ^*Ipzzf5#!Nm5~W9`Q1suNu8oW!621EKDs8Is+HLwvwkj| zWp#beZ!vd|mSss7Y<>m#&V6twkGqG%CS=c}8#bcNUjhp{!#{^U{3R@>ukY=$rTqc} P0|SGntDnm{r-UW|kYjG? literal 0 HcmV?d00001 diff --git a/emojis/1f4d1.png b/emojis/1f4d1.png new file mode 100644 index 0000000000000000000000000000000000000000..e836cafc29a43be7f8d2a447e0ef1c0413e5de22 GIT binary patch literal 513 zcmV+c0{;DpP)_4AQeuiu=%vT^+_umK1QthF>g z?sE6$<`#*42=qBdUAuAXF|Y{;O9+A}bziiqixN+?AX*SDh!&I;a-;+hK=_-5niZ+X z;Ke`;#DKx_+vl$>g0RP2xtOQompG=Tkh;Y_0QyWBQq@(TieF+*YmJCtu^e;*vaUm_ zhUGc%h$$0<5uWSN>KqXD2h0`E=2$JCW4&78!>2vsIA+0RQpR%~W{UY7S=VLJQ4lgy zE*6+kN|DcHS!75JhGT}K5&xobymw$L%m>9pBXXZk+f^f2{mo9<`DGN-P zGFt19l;srGlKLV1p^R29f%kyr|Lkj#r%uM;WDLImbOn$2UXbA^00000NkvXXu0mjf DKvC(j literal 0 HcmV?d00001 diff --git a/emojis/1f4d2.png b/emojis/1f4d2.png new file mode 100644 index 0000000000000000000000000000000000000000..3b11d66bc2dfee1a350f5e0d5fabb699163a4c31 GIT binary patch literal 530 zcmV+t0`2{YP)f2s_OgD{Tv9`ui@emQUF$gb05!H6c!wy}8 z=(cNki)bBUx1b=XMu$3#kUDfIgy<*OkIfd9%(gjAOVi%hSDz>R0~~ulAF`B6po`XX zW3m47Rjtn%7m8B_2znv1EtFRELtBfSXOr%?AOyRKtM#-QnhE8{=O7dn+Yud;_7xt* z0-sX1+2iVw_?j6=UGy)8b`c!|Mi!LW(2FDtx)#N+p)>HW-iWg2jYA7l>bvXtigTj0 zmccROJ-BxeJ+)de;luBdc}T)2a}eXpsu4PulOY^+yaXH_z^h?9e7ywT%%h7YJ?UhS zm$I|{X-xTY*b&YEDbPjlR}%|$p~i!33mpN==s#(n+`~($CmUhhTZzCb8nu7DoN2_a z{IDIwiP1c)Vnep#vP-Fdo_0SQk?0zP6*OI&xMNEGx>(~_*;HW_1yCury^*`kX?({p zED|*7NuSkdqnvQRLL%@HmQdv(d-3=194E%far-w|BRlKi`Af85`eyd?pR<|Gee%Kb z0qls708wt~?y(K!)bTLQ>Z8{RbZ_l+@Qv#6JE)?$&{I=4Mdi;;S9$5ez}BMt51xak Unw~?Y%>V!Z07*qoM6N<$f~t7^EC2ui literal 0 HcmV?d00001 diff --git a/emojis/1f4d3.png b/emojis/1f4d3.png new file mode 100644 index 0000000000000000000000000000000000000000..7840b145edc708365ac0f91fa2032ea133fe2eae GIT binary patch literal 768 zcmV+b1ONPqP)6$v1jOm!rB7 zUNlWRVa~R-=j3eOA=dC!l4LUZ&$6-n+rMi1g0R|h>Q%JPi|7=+2F)@zfh#=LqS_wOfWM1hHuez2X2ptT3;Q(iSY^nXi`dU-Mm4qua3mhN8<4X zydF1Zvzg)1cbLuDcs+&0Vsi|=9i;8_FKo`uV~r}<;8;s5Q{Zv|k_^E*DJ3np|{x z-Q`s4adz*lq@%NoWbzX&KQ{uB48b}nB?a4Dq*5tDQ`0!?c5-YsCa1#~D=QQgx)DMn z9Eku587dq6v~MqlVerKNl;YwdYW7#-fA)gl`w+gG17w@Bc^-I)!WU_k4PFhtAuB73 zy?d$%&qU}Sc*UNoT@<)n^z{#5tQhR7tU&TV1L##94kw=}io)3V1e-Pqc9fM8jm8)r zdq;U`30t@3Gc+>F>S~IT?LPpL(z5dIOYN8a!fv yxp*8WI{8i~A3n@7@bb^uM0~F8{P}YM*8B(awFvYl(^UHa0000WHDG_T}kGB|5_BqV7=s`wQ$J{{@-&69ngMLQuurPAo30ysy9yh5EGLL;P|klTj?nJw9SDFV=xMa1(T4qllnfF57DD=fAC$68G)^li4 literal 0 HcmV?d00001 diff --git a/emojis/1f4d5.png b/emojis/1f4d5.png new file mode 100644 index 0000000000000000000000000000000000000000..cab168b0aa371a7bb07c0a8e706aaf7eb4b30770 GIT binary patch literal 363 zcmV-x0hIoUP)kbwnt6N^G|*G2bV@7}|pEO)wlpO4ruqWFcHjl1TW4h08=p*8=gWOI4Sr2|8; zst1&R%C3mR-n}gq7#l@s4T9=iD5cWY z${mvGEW1U+e>7 zWwBtPU>dQJG*)7zq|nBoutp{yGdtOj${{>H-GOtU#R z^nS~GPY7Wirt0J-l#K4=~EXRT^14C8aOkDIz z#J;Bod0U9zx<@bG-(S0VzIE-&WyhbEEf~MVA%vB|QCMN*TRW{<@7fP^Yp1gwY2^3| zVKP;5?Yvx9V3z+ktJI{_q|~I;q>LEGah=01>3+trs;ELBFAnJqN+xk;_`K*wpTB%1 zn33*fbo+hAlGqV~QF+hUnMT6dsVP*2ZhwFo-t~_B#>)@8cc(vPoR)2WWUP60f!|Wb zin5|N^c!;h;gd!PwuCUvNs$@%7!mY2;5p7HMA&pzHcEllOd#-#e^6@r3CZ4&)oG(B QGXMYp07*qoM6N<$f?EN@jQ{`u literal 0 HcmV?d00001 diff --git a/emojis/1f4d7.png b/emojis/1f4d7.png new file mode 100644 index 0000000000000000000000000000000000000000..da823fb5fb47e03be0f29ca8953be486cd1a1dc8 GIT binary patch literal 361 zcmV-v0ha!WP)%&3}P{fSQ$(v>3<+y zZ6XW?lhI&clg8??vUF%PMIU-EdX5?-7H#T&pE0>UfYo8FNJpiEosn@VEJ+Ks_exb! zKMaQ>+cKK4=RMCm*<9Q;#}ZSRrlcti&(%Wc;5@zckiWf_uItVjhGCZ7Cvv4548x$A zNT7>&Y>?^XGLQMY2?+?THOChjMv}uw%i=FuD{2*&+2k6QY11Gizc?`m+qP*Y5cIgu zWf|?B;hUgM(w1ng_#yB~;FG{7flmUT1pd?o|K|Z`A{LJGA47eq(~X79rHF=l%Ctc% zjWq3-&kuL6*Xc*Tsp3Acq#;EMN-188rJPqStR7`|u4woIcRX3=weXD{00000NkvXX Hu0mjfbaR;O literal 0 HcmV?d00001 diff --git a/emojis/1f4d8.png b/emojis/1f4d8.png new file mode 100644 index 0000000000000000000000000000000000000000..eb35e80340970ee506def51698155017cb3b287c GIT binary patch literal 354 zcmV-o0iFJdP)M%8=vp>wtsMVTYqBU7m1`)V?NJF^Z)<=07*qoM6N<$f>%bA AC;$Ke literal 0 HcmV?d00001 diff --git a/emojis/1f4d9.png b/emojis/1f4d9.png new file mode 100644 index 0000000000000000000000000000000000000000..880a0b0b2e2678ae6d59f7c00eabf78ba8bb0944 GIT binary patch literal 347 zcmV-h0i^zkP)r(G8kqU!}h%~~~RZIq9;v0xWA~u`vKq3aS z#HxeE(ijZ%1K3p3q|4>DiuT;228l(R_CAlg-c6Bm?Pg}m9+~*yf>kk18`21>G(Ink zNgU|xtXgx#UY3?mo$5#yl%^F6*jm|3Kko0je&Jp_VpdVg=`$s~w><5H?gT;qJbro$ z*Dow;K(H3?;TY`=phWnO4MR*VfVo2|&L~Zy`6HehMmd^RjN41RcmvZr{17@Mu>@Gd zFCii!A|WCnA|WCn8Y6V?3sg?($w|8LKD2W6ymWRejpSHB2doXTPSTH=%1P*sqZ5^< tb6_3F(1r~S_1E%C&qr~4Cckk<(>J-0SRpRVJ9+>B002ovPDHLkV1iMqlSu#o literal 0 HcmV?d00001 diff --git a/emojis/1f4da.png b/emojis/1f4da.png new file mode 100644 index 0000000000000000000000000000000000000000..43a319fd81f271e546c81be51132a96c71c6f7bf GIT binary patch literal 530 zcmV+t0`2{YP)DxoBm9kkF=;E}~VNmbD1_ z0)2uY3Hku-qE*XWNEFp32%*oS;9?Vn~o)?gU z7Nw2|tQuo<;;aSH6bb=a2`RX4x0}#oq99uQSX;T-+==zVMnK*;QrNXSNkag6aQ`;( zr&pKCh336542$%L)_7qB5yc*C(QYpYZqtnUKN+sRoysNaMPmNSgcUaQIbQEhvj6W zF^`rfmN&kRHv4=(JbrW(B?`5YM?|rojNe)`4?EZ8<%=hG#1W1kJB3#&BmFJX=!=SP z%s{1G7RL#Cin)-|sAgnx7=#pL!1$R=7VzoO+7JX;JkOAluYeX1)3e+CjmD6cwYFtG zOZ20wOV literal 0 HcmV?d00001 diff --git a/emojis/1f4db.png b/emojis/1f4db.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e858bf027a480450c2cf282c17149611b2ebee GIT binary patch literal 469 zcmV;`0V@89P)5^iyBPNSUq?8QY`>Lz=?)Uq6Ie86+JI@pM_Z;*`gfK9+Vbj^MptC%6rl|d?0s;nAex`IX+{zhzF4_;GMp*(x_BXkEVQ#3E?V2#2i{^MZ{dl z=(~!E43Dd3Jz6zujmtasA#UQdRR_=zW)M~#5RsU{2JDE8ttI10Nx28p1~v<`2m^sx zY&I~Rne9SMV%Yi(6X%=4$uhFV==Ceg))8w_ce)m@-B5SGpJ-x#qdjip(ZklG(H>X7 zdAq-0TUfvF%l3jL|8J?_W%aEidp$}}f)bRV1SKdz2})2x_LkM(I{IETrTOaPr{iDF zOo^c(YmvR4da+Bo-6R)?r}bj@l=XQ^E)*+K>6wyVS*!F~FQzP)s&Q%OJ`u4*JPgqi z4x#wBO1i5ysl-=>W=8F|PNr#C?Z{a86*%iYBY!_@g?R?6G(@HUeD)|avR@hkd^T0*z`|b)v}6s zfX4#=aStqtnTb9cg6-Ms{B8Ev<~Ac=7l?ccf&GXF6IhXHk^(`aBT9T^5X~~csp7+_ zz~L{+xutVR<)ygGORa*JTGd{|W?7u=?NArVOrf>Lke-V85m4lH;7oK+&CsAF0GVJS z$wvrWu8ztS|CI2OnM-1{g{c#`#L^ZmT_#>sL!n9FQaUbE_I5#TsSxQj@S}*n3Jg=L@KM6i zQd{}le#T1mV09~)aUCA77sPXNRGBgAY|4 eR79Gd|ISm(IL110000Wr^gik`7t)FBBajf^J=d zjvc$y!8&vkiXelMI?CupFbjp&i!pVY*?fGqJ#NqQX6z%g753k+W+j05g6W|aa z_z(ANa6EbT>%g4s86Lirhh8dR=vneLRgr+t6Hzt&AaGK#p_UQ>2tWV=5P;y1 zDsz<;ZG$zhm*lzAn6=&};I>3nam+6)kPwgc#goNO?d>h=lP(;i>9%8WwE<+OlCF>{CHVfSw+j{*e)tR zvM=}oAuJpMixwX9Y;Ne?WV(2lEizju;0NmbwRqfa%9?6siCYs0EXqtv@F3C5%zVb8 zL~g;6%Wsl53>+bQnszyk5Ef;oB^XV_cs*ZFG!iCIUynnE8iH(BZ53$z`3>8rfNJ3| zEx~9a#+&Z}y1Ne0-`9(xC^!^K+^%Z8ZZ~zgWsD6MsV{L%Q({_z(L{`?g%Cr70~|lv zhoUHyNlJcYG&DU+M<#_MpY`%J+0M%!2Gi-??CjwyD56wv9tka=ClJ6kt=ClrW38q^=`%o!ck?F1Dn)quF;}@@en=WbZ@oL+?ZHL+?ZHL+?ZHL+`@^ zr~TW7X>sh;x!M(nSSa6#XZ^#p$XHCxVVd~FL50t%=8xv}Ft3MsJp`oFnp`oEMEw>+X&o@b)!5KUd z*;cM86bgkxp-?EM?bS+D;S0%YIEC{`HprKxhaV6u%jGT=%J29} z@;Z*=xy0UdcjH!i`^B-ksk~G2N~K+z=X_k1yE%Jq&q4KklIz%V-@vzc60z@Al^3Vw z&MrX^#E&VTOJ2e$G^`K@?MQ7+%hj&`@KbR$$rCu^e?)$pmOHxyK@fz*AIgW~`^W`s vIcP5Re$JlTa|D~=a>eEFD1KFSrR2unr~$4#zuH4M00000NkvXXu0mjf6UzM4 literal 0 HcmV?d00001 diff --git a/emojis/1f4df.png b/emojis/1f4df.png new file mode 100644 index 0000000000000000000000000000000000000000..c38a2a8a4e5ec7850b6a279a97991a075557f283 GIT binary patch literal 423 zcmV;Y0a*TtP)DmWiL6O)h7G`!P z-lG!(5(6weKvba$+SpB#_|E>LKqANhl40Qc`0v!MyF2@FVunDEb_(EF_XmSFPhT8v z4f2dOzMPGD`Rw&W9jDROy}fOu5!&eIJ>oRFp;;=X=XlEJa$b-GDJX@BGCq$-B%z^h z9CJ4#4pMAgv0-u+G)v`di~=sMzEZ~y5y91#v+|U>aWv9U&Mt6Wi)$6OeXegmAnJBmvDWh8-COSL?9#uMvm%Y~>EnBz zoKHBAfT2=&z)0~MiZ#N5;wKrY-A9l2m0}30M+*W4BF7py5#a=czv1zZz5$HEdFMVW R+I9c{002ovPDHLkV1klL!Z!c_ literal 0 HcmV?d00001 diff --git a/emojis/1f4e0.png b/emojis/1f4e0.png new file mode 100644 index 0000000000000000000000000000000000000000..b71bd81cbefce4101725ad821169d2496608c882 GIT binary patch literal 613 zcmV-r0-F7aP)%wGc84PTJ#7jYfS{HN8W*`D*(G zu!K+RE3pyt`tYO~5JKVeJjJ`MEUGCmq(RkjFr*|L4zE>gJ0XEZT7+1gm>Ccg(*vB8 z&6JoKUt%aW$fGCExRkia^wcC9kDo3|K=7L=6>2n_8X@?l=_%}TosT=aL`@T|HObT- zlkim$NM9 z=Vp1ixkbpMRHs>0$Qksiu;00000NkvXXu0mjfjS>^G literal 0 HcmV?d00001 diff --git a/emojis/1f4e1.png b/emojis/1f4e1.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b1870afafeec86a56cc0c703721d15d91bee3f GIT binary patch literal 817 zcmV-11J3-3P)Iw&vsgOy4}F*nt#3en0Wq znZx{_Vx&3!@Q9pgGW-MZ9)bp2tIORtlu{xT4Bp9P((h!_=~+z^&hz27PX~oF)g?5$ zfqqKTJqv0ISP8s7lV^4C$mm=x_i?M;)&b%Bexlv(9P60obUbccuF8kbw&i_al*Fx9 zrE)D$*FcnkuQZgR9o=`zh{Zx|W18kz<>oJ6mmV0utnZ$Axtf3OS>QB6EP&dBQfO!z zJsI13|BeyhaY0)w*w4r1a<#*2kUNSMr;qpO@Sd6L3GUw;!S*g{z$F}XU zcC-1C5eZ{N!WfY-f%4JgwA$u+CY8)cDJN3N1X2dLaPbmrYwK*+F|E<45udePuV=d+ zno()u?IN zY}&bFgcHY~q>#_Cjj!vvuj@Lxt|KkWMnPGLz{w5YXK|@YaX3phl^~fIB)}Zm*8u93W8qTIaEfw-+F`v7> z;rr)&-(TWy literal 0 HcmV?d00001 diff --git a/emojis/1f4e2.png b/emojis/1f4e2.png new file mode 100644 index 0000000000000000000000000000000000000000..7329cd9669b5431e18b0ca772d27edc7003c4c03 GIT binary patch literal 650 zcmV;50(Jd~P)P6vxo<`HyM6DrZI?_5pL^VW|Gz!I}Q5mm^-|9XEjRV+V-gQxuFD!J5Lxa!G zHs%U_089Xc4OVVkgVgwgFD0T#LkI!i_jj>OHh&X<1%R*-=TQ4vQBEm^R9zaiwJB&I zBZ#OOo6x2KZJ8(+g&|^wfhY>0wKkd7dJdZ)82~asImS6u5I`vfA_|zhJ>3H!LOG=% zCZrD_7t874~DAcSEnZ)ZqsTG6)M{6y1yE3!j3nBXt1cSjRcT z`_VCYo(J2q-|*9yE@Qc=A#1(+c$jhvol+@yLD0V@<@J@BZ%@LBsrxWui`3ZALPQB7 z!gtrjVzG$&bn2mSEE^?NUuJhGtkZf@;}}`slyJ^l zO(F1CB`#t zQZgKD1AD4*bB#YKIiB?VMzdI{UaM5=t6x5USZwdSE}wulnu`i8I7&(rr{k84gm@+0g&V}ZFpE0DyL1>k<0NS%aqkZBMi>%}K4%yP-w9>f zbUwAo#wkB&%?nw*bc;jEwDt>S=V_XzJA)|P9fY0bIO?wFdG;{Zx+Rq|q-oW=!AA>d z3%DoF-e2daO0C{B3#CT_W;AR7FM*5$mR)qCuffu2IM@dE#Nv}JreQFpZ&3$`>(M{1 QDgXcg07*qoM6N<$f&i`48~^|S literal 0 HcmV?d00001 diff --git a/emojis/1f4e4.png b/emojis/1f4e4.png new file mode 100644 index 0000000000000000000000000000000000000000..0953827ba5877389245081dc856e7fed5ef85778 GIT binary patch literal 513 zcmV+c0{;DpP)ex40KoD8;|`8$0-**@2*jqQVoICF!O5gm322NHgPXf?U@&oW zaA#;_a&YkjXzJilzd_v^(;$r@4#buiOG2UCy?2iaf#E_x6aD=JbChC9yOPd*WaxSG z;NkoB(J?a^%utFY?Mf!Mi{J)=R3VxuHf4XO=5)JEF_=<{CGAQkw+n1AA;2y~6UC>$U3)mF?w6z!GD}uUd_5W(e?~0?g6TY9CO5>S(pk9O8QB z@)uC8EN7E{(uX2?IdL(mFQKR9G0 zo4dwl{uZ;C%n%F)$=|=t-FsV%2qBoq6h*r(nypPRT^2LhRyAX*AkU)*QGw#(f-Spt@36SV!^fv* zW#JWLR90wwMYSX9h=>kXy7c8G$DZ8X>ym60bJ*2!zrVquPn%Esuj#0q8~3}4%z&`O zvFq`ceH)J-INsHgbyM{>o5Arq_08Vjm>+!o{QK+jA1{7fF`K=ccX_B!%A-n!V|Cd} zoh<)=ZZ1|5zL}-hi`g!WrF)`;7Cb&e6;EHKnPravJ?bT)K zxcPE1`y%$kj}=}7&wKRwnK+BUY|AB%{LdfzZD;rK^Iafq#cV5e|Mu-;-PPOU7&X6@ z+>(`BYjfXS!xXtG_FA(2t13?j>^*A};wQwCc7k;bnTFH}CKk zr#iKG`rHc7A;_)d=br_(Ji_CnanpzEMKhvE?y7qJEbJ>k}DeHW!0+B3$N|@EiCeBL9T!GoLB}11_n=8KbLh*2~7Y= C^XxbP literal 0 HcmV?d00001 diff --git a/emojis/1f4e6.png b/emojis/1f4e6.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7f04af07200db4ef6385e9abeeec172703d8e0 GIT binary patch literal 745 zcmV_nwCnNT7-NKJmqs zOYF(JlcOhw#)bEZ6KV|ji#-I#o_&rTR457uhu+b(+aHT0F4H5u{kakDf6IHWvx~a? z>UnZ5A?FeztQLdMf7*BC^heR5XY!^|M|4~C6mqWnrncQs`}7Cx5~p2)b_wd;i!b4g z#bxF(sr7_8aBQqghzuk0gC}vuKy!&6DFhe1F)x^I`mIe(>@tIT?~RMdAm|Sw^`r9k ze7JHC8{|mzKCJT;D#OtCIBxkLgtJH~M^qTTuJXAFrK4EAeP)E&nLDSE>Pl&U3E@3q zqXuc0v~PgKSaRhj2%bEGTe}bG23f0JZp_V3Zq%0+WM^@am4*9U9iOE7>ut8_`W(60 z@30$f8tZM0E~3x9Mu$9Wf6igzwlHywWQ#F|udm@noD?V*pksBgM6N+4)SUS**C%DM4cH7{KxWz3=my3}RCwtwOICO0J@VgCMvnXvKa7(aFWlMI4<( z{01TjT2~hbKZu}IQ@Ok3$=#WHCMmha7Ge)t2muGD{(hV|@7eR0oA>TNc zaPa=!+ZS?UGpFXO_?_-OZsWfbUI~LtQkp~v)=MC&Iw`5r`!KYq#3i$FD-HX+EwcH z8pmSINYb1z@NrHs9CA(wTRz=>PNXT7TJ023(&fX)Pwf6GsKlC)q&Z>WPU*xw^4;H5{_O7)wtT>2C+SgXHWsJ|hl@BgXf_tG)=~)rpH9-F(rhds#b}%jis6NJu!0lem{`m5xwFg@v9tr9oumg-QfsXH zeCPJ9Whb%=D4>7>3Mim}0tzUg));M^IsNs`>sL=Waen~|kgfX*HfzKH0000z5$fMJEL}aS#`WI%s$Q8bKVj z;3znW2!i6MD7c8YL}^N{Nn;w*SWI%c+`V_E(1M7Pp_9+U|4;A-!$@;>byZUoMKFas z@&fVr?blf#2FRQq?HALDjf|06Qxu^vMSti%)1J1hN5Bl=UefCyOf|fn%@|BG7`lAf za;|E3O7-g;N*k$noAm}V45<`n`5PIA)SM>G_IKt^TCcQ+P5V7yEgSy&n%O_UVwc%; zn#fSHST6Fr&fX8IwK}O2NzN?UsET-@-LijPX2Oign?OQURhI2C)mj}XLsslE?#QFM z<yhR7K%HZM%uH)5b0ph~Q-ek#aHbema*M z=R147!gi~TT`Z8#nHT3zY1|0_0000< KMNUMnLSTYc0OlV6 literal 0 HcmV?d00001 diff --git a/emojis/1f4e9.png b/emojis/1f4e9.png new file mode 100644 index 0000000000000000000000000000000000000000..04b040669a1819dbc72c4f875ab4cc47c3376fcd GIT binary patch literal 601 zcmV-f0;c_mP)=I+p9+6PmE3-JP39P=?5f4L8rWT z@)(^$`U}EKL=kw2PC>UW2HiF(-o-03SPP7o?N#T7NpB7}dX)x!K7tNzyeK}4spJwz z4r;;b+xyNE|6tHTOeLpi>5eBS>A;|~kiSAY5JZeEF3*iGE;TvXet%wD zx&38rfVnhVeLpwea1ik8@bK{UtCy?h z<0ntw4V>*ACc-j9-hUH>923BT1GA|xOJ?FBEu$0DH;s+L=CEH0h?-Bs)l5i}02UmW zO@&1H)qst!n|SMcyF z0a2F+VP=36{Axhn^~lNhpb9YjOn-zY@@iUk%8+9*(U^C`pq+OF~H;Ta$A= z{7S%Sel;NPdN{Twt|V;+5rz;5A;`HNekGvIuLk5@4-g;(Q6??>^#;XKnW3~M3`26R z$GO3Nntp8i44u~q1jSOBtgVSlizb63`}GFJQW?kAC}|N_lHp8>oxK`6d;5%JY~oU) zq=jQ^wn}Ac^#)C5t=`z(DwWSGP}jbIexOcDD$v`X$zJ>*0(d2TG<*FSUY zx}Cc_TjYB3I2|2?7%(3YQ$+YkK;NC1rr~+_Y;C^)5(JvfCa+2h3>OBtkV+Hb3Bnza zW#zf9HokcZBsgVR7FR~bc>A(Mj1-1vMo`L9s#|M)nUHi>hHvFB_`Xk!A@Ti;PJOS) zes@*~QA%NapA$}{ihWck#5%wIxmOn!U$ZtnNgTWGGWvWD)o2i*qy^z`8p$@^-?~Av zw$CqJ8=E+L6#{9^KNt}{UBAko?7EAyS0QkuYq>1{YvcA!z7{UgUj6Yv=8Cfk;2I&B z&6Q$#XKOH<>j95! z1YSJ!KX^$6J$Nt=f(TwZL`bb7Hw|3a;B@4ZSG+;(z9Sa?*Ni3IG zy9gAxrL%LdxbZvEl0EahHnCwdq$$W69FuLoTieqrvs@egqI+@#;;T~2<%57$}Pun z7@Nqly}7|(C+UZL`S6zF$Pl3}EK61}>KK!7jPr;p-8~*Br6NHPaN|l9KkjnJV+pLM zsu2N%D#jRW5bz%gL=26HU`0TLT9gL-xXZT}&nXW)pcbV8E5i4uW7K14lDg#|B_Kx? z?{M$ayTRCK@BU{n=IcdQ|2+4VG`YXx13TPzo^l;HD-k-6m5+C*!O$c_lMMCw{Nq!H lilv^{R_rubu(Bo8b`2U*XjHh-f-D1q5D6bQisi z?z-rv>n^$oy6FY2efJB>INS@8An7YOAMbH z*dB`A7Ga4pog5zyTFISwiAn;H1g?;A%Mqksh;kM^+@=<&-7hY zO1;+o$D%Ld1AYFn(NXp=H#WEUIP->zR9`Q1<6}6%0A(#D*S%+&zBB6c(u&`99IC1F zn}`S%uGTog0Drk|DZaatZC4%bZOkt&V>=H2vvPU9uB>tZt(5YqGD5A*yqjCVb{s0K zT%PyyUx>7|f(V`nh)|7oU6=J#nrLT)Pm9YmH3ZqoTJ&^vkVvMm1NAIizDTCKi)wTt zxtZ$0R2GP%Fvw7T-<}QHx$*OI&;W@WE3=*h@q>d+7=yLM^)Z zeQ~-WmpR8C!`|k7LrJXTZ2^>;wOWqeV80C=TYBlljxfzW{wx(c8b-w`rSFlzQuU(x00000-lunmXw3IbVxJGqlKay$)O>uOzpix4lbFcO zp58tg7#b$oc7+B8%no7}5OxXZdynSGuf7@S=*%nuDFTjNWHa}UhjWifr89(hhHw{T zL!CH|%CEhh2U652yCv3MFB2h+VcrNzxpuJ|xJ`&}y9IpTC&GaEez$J_{=))dgz&td z)Ff>O>#RZp-MP2lr~6;6fDp;5oHO!#5#@P=c&S177cbt*mpfy`OD=zOZ5K!uZ2}q1 zC5#APhX<)=RnAEkZ31Vy)N>UMT>i)Q)Hp}CZV-1)9%y%J=y3A0HA;g)bG#5!lD+on z1t_(3n(lo{onHw!O~?nGEv#3w?c}(iwMCIF#rGn literal 0 HcmV?d00001 diff --git a/emojis/1f4ee.png b/emojis/1f4ee.png new file mode 100644 index 0000000000000000000000000000000000000000..edbf92615dbfc50fe86ec629e963feb6d49201b6 GIT binary patch literal 481 zcmV<70UrK|P)|$|oaf!GT z5nq9ei-S(SiVj6YD7J$5r`TfS-+c7Q=&&Fpyw}@1G!B}mDn}_IhTMqD#dFgh z2}?qNN7Fu$?{V+`15_0S*48(e3QEk*oM&n22J-V44*{ji(kHZreb-`(1yq%_SL;m7 z&Tyep#u!7xwYb)R@|Pu{z+D}qMh*queb{8&_n5Dgi7CoW&2d^olpaH$NgNh5L#$XR z@byO>RVAjt0xpv{^fMeIpZA$4l~{f8l3@%(Oq~h%z2D^h=0}cWNRcQ)qKHG4@*Ep) z-ctYa4GlxmEGe?Phj)9Kc6O9QSHqCj<7cqDN1COlPQvVb#?WIqqE5o1N=)I7h@1if zIvQ@K*cNd~WW(^g)7B~m7DlW-DF!bvy@C*dTVgp+U*QJDbW z1PuU-4X2e6z-vJ5Km@-5t^yzUOT?zeh)+PTr6wSQ4DwcBe)YSKSBAo|>agq_oP%?y4275Z=gLXBMo}SrQizuaV4z!;BN)4d6Wy0?T)ElL@C9m$}^3rXxU!K#6f?Y9jKNxhr%Y kd>PmbY6t3=T0OAyCzurM0AQHUH2?qr07*qoM6N<$f-W=&#{d8T literal 0 HcmV?d00001 diff --git a/emojis/1f4f0.png b/emojis/1f4f0.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f063e6f7741fd343988d2141567f0b7e5c139e GIT binary patch literal 456 zcmV;(0XP1MP)1;iCrumOanlc)X z$#_c9Fg0@SDIBf1MhiEhadub6Y}6;@tyfb@b4{&MA)}OHk;WMf`pk!xykoA@o=3yf z$kRB{azNNH6cG^?X`IvkIsJ>6BBhe1d%sPd#)-m!B~zz}5@C@B#&MEVhRKK`p7Lnl yT?K?IGi~kgLlg#YqcBk1P_R@dw#h89_R}9U+GdKwIGLgV0000&~)tCGmc-&mUS&~b2Kapik6Z~GTBos zGv#1`4ez4@{v##c-8!@F-%S^eZxTB4kgMb8T5;8rQb(N&kMz22mhJFfzUxt0%r6Z& z-MacFWxd#0yB7Hx2=%ZiAM}7xpE5M(rwdH?D|MaSe(6eRrLE47#SVf~lunyDoXY=c dU7s6h=cJ}CzCd@176StVgQu&X%Q~loCIG4*Ru%vN literal 0 HcmV?d00001 diff --git a/emojis/1f4f2.png b/emojis/1f4f2.png new file mode 100644 index 0000000000000000000000000000000000000000..9ab86410b5db38bcdc9194938ab2da4c29f68bbb GIT binary patch literal 383 zcmV-_0f7FAP)$Oe~O99mi`s4Z(0o1(49?9y|wKpYDS z8lt7lrV#gvsKEvabkM~bN@_?nt|EmE2`%^9t-ep7qqom9;p}o90dBNa>#Dk;pu^ea z3IlHRIV?6?M53qJ?C1|gFxj1G6FkIMZIU*uJzk{4g(jgOOcI3_|Lo@QU@+|Cmn1FT zsf8Hevv+%@(mP967$m)u^FwC4a{zDyou09oBtitL8qAiceK4MJdmq@|GD z4L54#N-h!0@(Yrd%;Cxne;{e2_Ef-Bc}AO{`SFfKj}Yqp$r?YXn$Tf3n@bj}Z5(i* dO|7fy`X_3BSMK+nvHSo4002ovPDHLkV1hL(rx5@E literal 0 HcmV?d00001 diff --git a/emojis/1f4f3.png b/emojis/1f4f3.png new file mode 100644 index 0000000000000000000000000000000000000000..22ca0e5c5c59f28d3bf9efba99090b2835961e68 GIT binary patch literal 477 zcmV<30V4j1P)M@c}vrU0fWrD(c{xMO?c(#E6i= zNl+I@&7Ps4-CQavQV|Pw39XYNq>~C)y*Ur>EwS{L!mZz@em*+TQJy;|lR7FnL^RjMuJsAo2u;BpohN_WBV?P@ z3E3w3n|qjy{;C7Pffn||eObnReN9Oy1;@5{is;;ZKv5MSo?=^Yl!V=sp>bw` zy@dP+5ZFn89Ed1+Oa5{JGkXQlRC(OS3-FE|tOQL@dAfj5u)_g%IA9<0py~Yut+Y|$XqB3cCDGA3H*qJ{3- zB#~IFTC}iTn>Iagl|@BFtL!n@1O^Ia4`Z~EASWHid++(jLC1!{yYTze#AUy)HKnfr zNj9ehGGJO$dQhkK`-#qeFiq5xg=tpCu0d3xP7>6h0sKT~AEqNqoapCkqOVWcfNyY& zPdNDyS)8Swm(HL}6LAb{g8VSH@Rn5qC>(F+QDm{ef5Iw-W2m7Tk~CzlqMHv8eiW?v6F-A(Y}Ho^EX zYHJ$=WmaDHBc&M}%{oDEKSVh704dE7eSU;)IgHcTeI3(&7DuNuG@iPH@)~h8>lC(_ z$J=unb00000NkvXXu0mjf3YqNP literal 0 HcmV?d00001 diff --git a/emojis/1f4f5.png b/emojis/1f4f5.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8d29ad8a3bc427e72b09a541c1f02258395dea GIT binary patch literal 752 zcmVuW)|%ZaOs@ z4L+Zol&`I_@!!;c0x|$M=1F-^cfT`uqEN z+-&m2kJnM2mm7|yGB|rf;i;jejo{1&l{;M8pXbfHHBP_vHs9a;iB6-VqYMuZv*oLQ z|K>zu&zXF8{2LD;3ezh!6-1U|ZIN5Q{mQ$4Ez=V@j4>EvFvieowb*8zqqI^}APSyw z(a5c!&X!FVasU0-Iq>oz<=jz{Qt>?VK^;Rh;;pxAwqXt1#I7zb%YcVAq?|iSN@{k} zu!cu1oAubiri&=n7I|nx%DE$?q-G}$@KRD$(@OKKO&3wDEwXAuO1UE>rJ_?>X;M;E zJuSSsWAR>gvgsm<_ZF$!kk6W3ME?bBI~MOn3vbTDx#>ct&nh9Lz|l5wE|Wb7oSeCOmBGP5(&;pv*4Eazc>5+(D$U1x_Wy!of;Le({3=hl z7%;W85sZ~qYH~iP)3AmuX{9+H@1>CGvxj;TWt^J;nzV_^;ZrgUjXY}EENw}t isv2(&+%&L2hyMX7j|R2BsIKDx0000TO}6s;SeawrJ|hYH(3t*aY&|+h-#eXHh6mO;3oNnZSy1S_mWR9 z@NNxplT2XSaCf|eisy3(@T^wy|gkcVF vc(OMSHvb@iKC`n#uUWqWEY$UT&3fS*@x@Kg#Y?Yg00000NkvXXu0mjfofnk0 literal 0 HcmV?d00001 diff --git a/emojis/1f4f7.png b/emojis/1f4f7.png new file mode 100644 index 0000000000000000000000000000000000000000..b95b2e097d560e217a0d1de33f20669f273f5200 GIT binary patch literal 616 zcmV-u0+;=XP)|`d)S(!L!L$;bUR2&BQJ8rXR^|%?VJ~#w zMRegm5Oh%?bX9*sx_qBw*+o!-FBDoq7sYgS6T>rY=bT>+T*!#%<$3sDQe9hzPdAE! zd#hUzG(aikE&&#Qz*M zI7FY0lTN3}(KHPa!F64fQsn5m&WVoWj89HYc!AC`vy6fMK6IZC$8lL)T;fwQ$=RNB zG&LQ<0? z!TF1Q*tX5Xkq5Z0i-@4HLqre}M1iMqqMY?mPjii zLXJiO!!W3?-_QKB1pd|@jD~iKDjV>(ox>YyBs%(pBgfjw( zUPmgmfoYoLX%w(53xBbnBA<_J@(n*J7khn`nwnZt8yn<#Dyl-m?BX~Mp_&>(p%AYV zV<`I@ZsseQW$K~f_J}gid3@~)< zI`7`DF&CR9Pr}WSEa0Vpt{a@{JWZsvjX)s4`g)Ss%rpzHUZRv@M^?gzBaaaV0O1#u zQsjsT1r&-$5^ieI5E>Cm_!|lfrB=Ks<)T>OAAJW(lE#g3S&6SSd*S$ddO6of9b7LgY*ErkwQNS7?4 zQ|TWNT?!JaLsEx|gfuY~b^SVM{(>!QN+hCfPAUzzoX+=~ixy!8)$@p+`b=$c{B)C6KKLKS@t^s2VeyT0VjW;^v=q}9E0dvqeu^6B)?wI@TC?s zTE#Uzqc%;-8X$*XhL|9S&x%F)0kgbZ3P~B;A?GYan;_tYu{)?EHyNCeoVu%`GpwVm;s}92fa?v{P*oKn z1lmkfa($N*{IgSRHO0bYJ4BlpYPv{8V;IfLC5Q|QKK~MZ9ZeKi_TXPwz~y>Rkn-Bi zH?uwrfjuGrv%7koY+PO+1^HXXtz&hv+}eqQn^SPYfeJj&rEy0uS!rBSf2EOs;2@(NQO* zW#uFp*E4BcrO5O^C?KH3tAKtLXH4_U*S~&fkV1(tz9TqN}rm zp}_&9lzg`&vU1Fg2r2==Z%8Q#5<;+wL~=`P-eT6EAsaC8Z@!>nR|Kf2*!fRi0j$2} UkdP8+QUCw|07*qoM6N<$fDZ}5 zw>o$WNU>P^_{YOug zIDwbAtK1frv5@WSZgx%=zjtaVPFBaySI1A?akMHH?8nz(G&)TJxVO`=Rz&zKC9W^r&}@9Ry*+SPMhoGP!B*d>q9{nosER$|A5|iVhz5F&XD7mP1QBGy zu4Y8sPRU}Y{cB7FDLD|jowgVjLlLhNAME=Bj>mtPb5y8d00000NkvXXu0mjfO>w!c literal 0 HcmV?d00001 diff --git a/emojis/1f4fa.png b/emojis/1f4fa.png new file mode 100644 index 0000000000000000000000000000000000000000..da1a70798bbf9cfe55213eb1a0cd3ccf3d04252a GIT binary patch literal 494 zcmV4b67{}q?|Gm3}sAbZ~L3ICSs>7^Q+Bg$kv{XstrhT#|cD(~Crx#^=$Q@+8BeC_9(So;)w{f+6nQ z?0Eb!q4SO*VX=IcVZwGvf>q?Fz@O2lyP*3fzYbzpP%53nFbu;mgc`t0&|~DWq~C(+BO{fcUSd@F=_Lk?R8%N3s;E$8z(^^G z7?mt!z(^&n2BS*iCId#QRo`Y*t@<_tMryCRj(1{?%&Nn@-~=@wdF@}P}}05w#9Ms94OB`f=wt*T1a|5_=n@4% zbq#_pb?8tK9Xb@2MNbL>$-5IJG|ik{;gV`b&NnDgrkt3V|?r}o#}2iZrXxB5aijD zM^uQyAK5HdDi+aoH;Ss_@c9kq3k4hs6^o1C_%!t%%d*IP{D5hen9hD?Zf+Jwv^s{a z>rB0UL+(qKx36EYu04rE?du;nrfDt=BS0t|p~?slSyheSFbGGY=(-ybp=I5AW@o1P zW|l~IZ>1^Tf2RAlXcY(cy=@oSa~Z*XL(#OB;2KP1H6tvPA9c zA2{amdfCv?iO1_Bk?bH8j?mQHN=;ooilX57@;SrM#zW#xOZjaa1nrNpg5Tv;+K{U3S zhNiXD);FSR8V(~61j;NfEYQ`v1CPf`MNuo;_7O$ocqkGzs0fB5IQ&%x%ZUi7bQjCy cZQDNj10u4)qi;tLH~;_u07*qoM6N<$f=BW?ssI20 literal 0 HcmV?d00001 diff --git a/emojis/1f4fc.png b/emojis/1f4fc.png new file mode 100644 index 0000000000000000000000000000000000000000..ab7c96d56bc5d2a7975c73d2c7da5ceec27fbb01 GIT binary patch literal 440 zcmV;p0Z0CcP)4cH9Khk<|Gl%Xi3yr(Bj|G1R8Gzmq}0u&4kk_g2F}h7;vzWc zOC`aV3AbQwSd#^5v2!d$_pNIcWily?&;;GVth?E(D zG3Fz%VY@Yd1!0lnFg#NT4US7_C_pt^OL(r!e%L1&Mkvc>YPwFfHcPcO%hYroW!WUd zi2bmS=ejgoOZ=d0tu>8ii{&Se$qme3UEte^5;yKG^Sh^yZgKY9c{bNqdEQ>-_MN+I zthG^vLXm?cCQVa3Kfs;w5fT0*BDga?o*$5=pGe}ELZOJtvO_A4gVvfsze_xf_?vhb zG3a;ET2pZxvg{D+%w+XJ#hGM6Yu@&{M1znCOL6e-4Pj@Uu(QVAi#G3jFL~A3;_H`; zYu6VM%Vu|H8woDY8-5Y~jo~LdKRWub*L!_B&vQnhl)}4kF_EBt<)*Rn`#_n|d=|q) i2``*E*ce4I^CTg+k!a~s;zJ0-&{e^L(F^N4WbK}agKK2b(GFz0c9o55jbnS8+#Ny3r0a#k;)96 zK)GNPc&xx_@Qom8qXGkl6!s-aor=N$L0brlklHX0B%Vl|2O{G~Km$@b7#{;RNHijK z19vcYfs-t8;<9r-1;n5lN!NgsY)9!#_AoFgG>kX_j3YisYLYY#>;$$Gh%u9P?l@2+ zROnpjk3ml*`Y_j7a+DQqBqZ%+k(id01{yK#A=ptmQ!xSTk~oveR;j4Cn6F ze;7OgdRowd^#$NQdDPo~lYD|MppMm?vu_z*u*Pp% WMW?K|FyiO{0000sutYdVTSWqB!=wNk;4uPiz9y*i}&$?C` zh}=tdHjQrGkME>He1Q*KrM>y4+g)R4X!Z~X(8mgfglTd&{fAP%ieC)0vh}xMMwrE} z%z6mNlB48mh^{ElhvsSNb9`i=P1R)~wu|@{r!u|RmijJw{*lL1zErb$P~?-;Pf*(u zDcKpyEKX(Cx2pc(wd!Ajr4m*{bTdnXT4WK*9_*6d4&`v8qtVgmXmm6>8XZMjGaW%& zA}33vHpSlHK*~cR-*X+IY`|E}GHReDJ49c`F{0=Hg)of^IBB4bi2Yc`QPk$i|1c^`2Al$`*Gd92fy01*w1{uU+ZkMdGi*%y!1_D z`0FM*6D6A4BH}*Wj}iPC>I;|FhToYxGxg@Drx#vHZj6Y@rZnf;nthA?v-6Anv-3kS z^6^-6M-yQ(Ge&XJ6)OgMYs)410W+A&tl18iF;}Te^|y*M{#z|NPgK2wm}=vO@xK7y WxY^JhmG{$naK$(uq=jA;1Mv=Y_ zi;>WF26we^u&0%8zt;(x2F-@X;>sHKdXXxf3L)Uq<2lO4hPz0tZgBQ+H`9w5CZZp? zHP+AjuNm&YUBXd{DxEqWPJidh@x2J(!Mi0&j^gI)FMLYps3oamo6p0caDc?>2D6DQ zWrF%7b&MY9qRAt9{vkzgn;%UIE*{y#nUUQ{A#l^FPzoX^``FRaL~pyFbhg0L*%UWU z@5l7&1Wbd0oh@_+d_-QvS>G&CCUNO)_tPEpG55n}G8&^$bVy|j1Wf~ literal 0 HcmV?d00001 diff --git a/emojis/1f501.png b/emojis/1f501.png new file mode 100644 index 0000000000000000000000000000000000000000..2331b22cb5de9fa4a76b51aeb819905c85c40d20 GIT binary patch literal 543 zcmV+)0^t3LP)w!A5Cz(FT_+Zl zd2nGr6Vn-H(?v`Y7JK?U+&Vo#|MqVF=GuuU+0_k{QiV1NgRk4kky3XTwEBwji>rWKa8V|=0aB6r5CJ}=U6xA9V)h41KVAs-hyj>0gvI{E-!}Iq) zSj?3P$S%g?VeY-kVt0Nth$sjwel25?Fw86!7}>dv+h+#Rstt||^kQ;41me4W92@GR zsMUC~u!2d#5b?XYKei9I(}B<9(rY%RuUGo=_0xHUtElbnVQej2@z1SSpKeY_r*s#q>5TTlK@mK hs*M&MP_=wE@f(5kqFQCERAm4F002ovPDHLkV1h22^V9$U literal 0 HcmV?d00001 diff --git a/emojis/1f502.png b/emojis/1f502.png new file mode 100644 index 0000000000000000000000000000000000000000..c79f5c32b335b66aec724adec289fabff21c6f3b GIT binary patch literal 564 zcmV-40?Yl0P)u(!5ox`k{0YVaP6k(8g0)<5#(ir;J= z0}OVipkPG!&E_${;2(TaP{+_Np3t}#LAU$NgQYUVnjk-CSO}jzOkqmZ*Sz`+b{g8C{A=WkxbcCNgR=o zmpfC-yh_>p&G^g;9-;B*Qa@|?63LWJmB4XtW`$I`z=fmxNW@zR2fftVQi_nzLzCg9 zmcY>+GnhymB;fTh)EDEy#Y31uomxYEF@&b^VeJPlf#ZC<1;a0~awSsfb((kkIMoxy zuM19gH!(Wc!SJzGvg?~Xn@i)8I2v?;6dHR?KduJdLnP$m=IKtVR=*Xw^hA`?R>MjZ;GOGF)_b%-wA z!dnc2X#EF4EIN4UP*ex2qhK)-WrYyAXd6>gm~(D!lQ-XM4_f>fc#u9HW#nGsuE!sY z0~-5NuBCi>+}cX4nRXP*zF=)s1X@H#HAB`C_pN|#q0T1idBO)nm}?c z)WfrzBZPG?UzfMgyIh2IFVS(G=eNQHdOfsL^++^EQ|NFfkFE^kI-oK(;EDq_=pE@T3UqA2Xe*tM{!LO~|@PXfuV zX<_S774~9T7BYb(w^743dbEocp(xzH5a7XaXPSh-43Rbd3G8mHdT*AWBg@Wkjif{5$t9>;N#k(mVs6DZXhl&TFr{oG*YM}dW037G>Z0~(TI w)gUpOqg}R8qfJ>@GWiWLP6^)tWYnK@Wzi&7m-F+T?7hU zR9@O=kODtI5#9uOkys!Rlo^UIxeQ&=&YZfP>DkWC(@tzKB!YfFaq-^MyEToSQ-IF@ zNu^_(6SAhUa|+No!S9tc)mGt(?H`l2Y);VqO&wDb&?)F`39!6#NPDQ7(f&62!a*vf zhAV43EN&&4Uf5>K$WTU?6x|tU$4FaT>8Qi!so-neWO+A*tEX9KAX3kzvq2_j*I3v{ zP$DT10)jOjF0=;7QSeVs0hQlUJMgJQdvTZ=*y~^z7Yt4vuURW|loOizWn)Qk0upHMnuPmA-J0 z8gB)rl}Dq%@0H~8iex6ohj06A#WOfcagtJsFFS{LrAFhaDqNC+(|RTMub<=Pr=Pr! zCi#~)>j^e~nZ#3BT#|y=frVu|^fU($LZFnQoF)YAAs@9q4}mI))C6hE#w95*Et|!y zB!iK9hPpz$UWrrAQHsGxh+9|BAOxh2ZJvMpflH%kdSRQRT%Pga4u-lL5JFHQgkUFm zgzYF?$xIGMDO{4GsF7iEcAZBf5gw16=Vo6k%e#lTdYS`-8>%_ZIn1vcH25n~ia#V} z-fkoqn^|JCzm2|dkZ?maF3Wb9Ur#W-uuas+(AyHAL;@*5rzmP^D_gsjj~4>U{#v12%8#4r;duSvi{UXI|dH}30=Ge&A?!oKkfYPA& z4?&gTc!Sy5awY{}wdLXF)v-)*WiGq-{#A}mC!%_%;+NYihtA98 z&HW-g1g?dlQ2*>eW0Kjt(i~7a7jtZ6EK^*8=PNrt3LC1_98j*aGXFd~(D*cLsOnsH zFDK)KzzG3?zZ3X{53cy=b_zi1@r?#E7NJfoLVLqT&D2_mV74xlGc&J7sL-)(5;zN}} q>Ci!y#T=Uf1WqxF3ubYFf9VH}wfT;>neE2_0000@o)XGv zYA~2ioJbN`EJkiF_fo@hdH9&=h(s1T(}{)&RgnTj7C^Uu#h6))5m|t$NP%>sVS>nF zCo>%pJ^>z9a4?tIdE0ZYx`oKXSt1MXU-TavsSO40R7!mNjSEU^EfK%AHdMu!>7?~| zws-aWt_=@|GO8j4;@x#;qI!55KnTDZ_S6H&kEV0&iSf-PYFIXW0?KhHjSU_j0ieyV z>5eAD440H#BInaj*{u#ZC-RgnVm?z%HkJvH*|O)4BG< z_~sHdEE_%nK1~e<7l#_(v^G@5M$@?twWcCmDe+AJWM(>ZV+%iSNA>VbR1de!WqwX= zG24bmfJap%ZgHqFMP%U;GoAFc#~Y9CPi>`o+N#&VaWj!y%lAHH&8?^&ZX>dAvFBXq z3|xRt;e%n%ycG+EEeGt;h~1* zMs6;&K20 N002ovPDHLkV1fjKM<@UQ literal 0 HcmV?d00001 diff --git a/emojis/1f507.png b/emojis/1f507.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3b16ed7ef4ce1863152c38a0c2e023c523d252 GIT binary patch literal 803 zcmV+;1Kj+HP)1$ku)g9#(j2{KC=7DO6#Y@-|M>RQvK?S|4bNzI=atC ze4Txo{}Ezzz`v)M^ab)w$Ij3dRn%1WIy?IRR;!WA<+$G$x300$ zX-y)PQ58h7ynbCZU7O3V9^ySa#Qb7}Ol5{gb2)ZndmiQW>+0;_fugi<^B2tqJ@0<- zKB<|HIWX}Yp_vNqmdS(sXg08L^RnsKnN8cGM+kuk_|c|MBI7aErcU5)8SJKETQnUz zBiV%r_|c|6LdK)4O?`;FW%3|0s;H}R)klx#dE6rcezfV6$asvksS~(cCOh@3KB9`c zsvOrw9aq#$TaKD{Y{ckHJ zZTMzV^$$oP#um*@?lBC5YPCwCP#~E~aiM*ijq~4gWAZVc((Sx|oK^cc;$~{P{ON9mv@u!EhOmqd=Q3aqWqhxX&nv;vL+4)3GyjMHO|` hhg=YNWjvPI;Xkb-ALf1)1Sk8QrD$JR!!Qs2aQbhw1FbW~S9@K6E?n0Yj31 zXu3|(D&-T&R2gs#!>|B{AxQv5)i^#q&&5o$3<$vC7l{u|*C|@1e9Sb*V_CvH&>zA;dqv`+Z)X9-mcx_PuA@ANRL6cim2Vz|ap#HA}`zSmG@J0000<-3Qig(`b)kK3U+A>2Y4;)UB$HYmWQnvl1t{OuxQet?V10*avRLP=k|hN>w^4 z+N;2&)N;SmG z&}G`O-$(7;0l{}c;f$+KSbgZd8fzopr0OwA+P5=M^ literal 0 HcmV?d00001 diff --git a/emojis/1f50a.png b/emojis/1f50a.png new file mode 100644 index 0000000000000000000000000000000000000000..ff6a3676d762da1547a1f67077135c0638b5fb02 GIT binary patch literal 570 zcmV-A0>%A_P)jK~$B&%S%*I9KiAK@7$v^bDbu2(h;Gjk*3nBpa(&lsGyb6q6dT+MYYO8 zlL%UsV65hxMTW8;&QQ=zW*wvn}o zHT_gEo6Q~0`^P0}n-Prv~l=ijY!@YHGB$#+U}<`!_8N30w#6f%GXr zu>!3fc64sLrM0tJAPa1_FbeEbtWqo*@e_6NXJB^&(^%p_Lh&Cg2nfH3SW8H;N}gA8 z7M2zd0i(bci!1<(3J6$%F+Oi6J`5S-e*{v%q`)rVg|=`(po35l1RH>3RQO?xXzk2t zM?W#XNn`CvL>>T_or6bvUIQ5*v$VYY)ODkEao63;U*Br9zT28=dh=;!cEB2WgknDs zfPJhG0TB?v53GInetIxFpT9#D2lni|*3y!U14n=>An3;W1Qmk0?EFA18X*ynU!_9x zx`yX&ERq413F)ny)>DNI0y~)dQkaU=)+UQZk20U#Sd>400`NGjIOYAPM*si-07*qo IM6N<$f>^l#-T(jq literal 0 HcmV?d00001 diff --git a/emojis/1f50b.png b/emojis/1f50b.png new file mode 100644 index 0000000000000000000000000000000000000000..d5ecdbc8e5c98dbfc61ffd3e80710e6cc7d1aa51 GIT binary patch literal 488 zcmVP)oC0(fh%Mu>CXdWFXw&?$m0l6dGC>WCo`3_+UaB`D$-w5*jB3uCp0r_f(MdW*;Sz509v2BU?s!KvGK z=79`SEL)ym7!a_-F(5b z50B|2G1%MHOP|w^C2Tx>PCuJlpD~dbl+*)CYKCk1dwA|HPXHPdiGkJ{%?=;GzrnMk zw-E?TBq0QX`B(Sx2n1my2I+W~ecfq->a7~JhN6?i;OK!7vb{qDsjq9)8j4O5pGMQR zyuN^{uMzZZ>kDlfO`F7*O%Aulvg3qG@K+-_-KwDQNPH{hm8FTRlXEf0DF8NR+drGl eVx_#ggzq;W>V8igxctq90%~n^ZofAG37^d+Bs=;k}w^kCO2+Gk_(cOKLEK?YJY$` zaW{o^G|I0nrOZw)rHs#vU-@9)I}^*N7N2P?_jj%7TGO?rYfaaht~K4|qsjirp~L&PZNK%&(P*@T ze6o1*#AxpubGw&MFFxcin+@IC@OyW#hNgz5hNgz5o1ETab!FTi`RUO9n`dXAYRR2% z&b|EDxpQkz_*>HI-qsCkX>~B&Al)F{pqreYl2%q%e(4YY_{03MpO5ZdI(hsamx{PA z>f@x2B_$~%7dXANbkp*wrLF#56FcyQ^Sa3`(>8=fEZ|eg1L#~LcUReqv(}ADTwuU_ z6ji@UUdM!gx*E6PsC6UC#mb-FR<)93CvL&D&I_BI*G+Dj76d^M1mXK)Pnajy7vCmk zBo7wvV%%LfHBAr%K@bE%EQx*My~r4kCb>*})Pf)gf*=TjAP7qB!3jKqiB?4wRa8+$ o6;)JGMHN+4p{(LdOevfH00-ybPJZfzH~;_u07*qoM6N<$f^bhOy8r+H literal 0 HcmV?d00001 diff --git a/emojis/1f50d.png b/emojis/1f50d.png new file mode 100644 index 0000000000000000000000000000000000000000..ca651a3fe1e428b81cdbcae46647e1fd97cbd2ec GIT binary patch literal 614 zcmV-s0-61ZP)42d`QF)0a7|p?7z-6+A`-;H69@_lhJd1oou!?Hoq}iz z!Olj1fR%knl}5pTA%dbJLp&jv-I$OaXLja$%@V-_D_)mw-n&nq;K-i6lXtc>8Z$r> zNFC-~JOp3nACl>VhX7p#9sxs1eHcq>^zv*fR^^N-&gYbsFYhOTd506Ag1-d8ZD448Vwy&C3=n<6jMnZcMz-%{!(qfFNRuzNf-8K3ge-{;r zibO@CB2ke5%*U#v^Eu^ju_|eQO4(3>7UThWKpv0> z2bTEBj-5P1x7%&6uC6^UtLk}-v7P7n+dR(~vtD*%y}SN!>0Np~%d!!{4x|gweKEo} z2a;Z|M_;GCTy)yY3%~-uku*}P)jPmeHXR5dJS)rIEbdEo;`CX}3^T*bFf+^yGsDa< zvjXQS(q&+jO|1~@qC!}-W2esWU*fCa3FtB~%BGg2;{gX8aKHfv9B{w^2OQjaiTf<@ zkzb~Q1QJLffdmprAb|uDNPu_=J`216R@|BU0UYPy-63RM<^TWy07*qoM6N<$g1;;c AnE(I) literal 0 HcmV?d00001 diff --git a/emojis/1f50e.png b/emojis/1f50e.png new file mode 100644 index 0000000000000000000000000000000000000000..648d7c768bad4af7a92e416c8bbf42720f5795d4 GIT binary patch literal 540 zcmV+%0^|LOP))& z_spem(Y*mimiQAYrLANOX}e+V+1j3-$01}PXXf*ft2b})54mi9;(8`GaRHbC+Q715 zw}F>L+}z32?BNvf2$)vSkvNcI81(Z&zjs-XbHEkgo+E~tr9@;2WO{t+IOCJkhGjyTw{%mF|}oL4Svx&R0Hvc+I!wI*~U9cN}K?)@rwk zjavQj$jHIT(p>3~=UlbtcTRkI|4RAOQ{bY&mNPYeXgAxljat176nwwSyGms&p)_ryZ2G0ut9__AjdBUfNqo>zyyEc5UN@Qx`4DQM}g}=iwLKH%?M`% z4)YgAy`rjnfSf8PRrRc@zEaiu-s=|NEwImfZS-F8Uh!V>Uh!TrVgwOcO~Qy?a|WCN zXTTZ8fjhu-G14wZ5F>~Y#0X*pM?w)tLa{~upimS%pY3#463d_5n$m@>ZIut}J(fTV zj|3l6qX>}%jTP#s*U3|s@=hQm@q8FtD2Z{4qn8(f96!w_F;PizIw7ogn6p!Onf9#yXr+> zZ#@jnA>pX`Txy_ea5>LLTL7Ud?Mm!k*vD8DaCLAQWpA6Ja=9}c`N$MUO<*f@F6gIo zK|fRKB_@+9Q}tkE9z&B^!jWMrm53>hnz3@g<$;w9j5ji+vFD9{Uj3#vmTdfvMxRp0Oft4{TKEvP0$00000NkvXXu0mjfeefoq literal 0 HcmV?d00001 diff --git a/emojis/1f510.png b/emojis/1f510.png new file mode 100644 index 0000000000000000000000000000000000000000..a51075dcc99202d6258c44b0a43865b1ce17462a GIT binary patch literal 477 zcmV<30V4j1P)clXw_ZD)&6LbnYbo;l@gKc`~eA z0mgxEsrh?mb{E+8$7)q_-R4X^t{+%PgK`UqkRDZEJvd>#?^l5rh8-4KbxLlTm`2R| zKH{g%qi0UV&Dk~(@{9kvamkXN7&s_n9&v<>-~wpHV-Qcw)Z^xC8`y(%9asZu!RPmP zP{7t7>41ZtZS9` z24xZ+U;|^lbHo~+NzW^DgCZ^yuQ1m8PF|5tiTEJ8t?EGW5DWe{m%d?!LU~jv1_V~@ zwqeHfF`vtaNIT{+i%U@>Fk%hG-FXCF!4<>5mXz4}lV$d=0HV+1R3Bn+{ zI)o_nVst4DLP9|Zs(}iV1_g>>I}8a?FT&=(Qr`C9k^GwQ1K&oF@ID{B68yuhw)RWi ziQfLpSFXmX*e?{a%S-8*d~Ur=4MC0WMDLB^$4@^2EmX_DdO3D)c`?0>i-F7are@<= z>ctnJeZN?EGxvTf`D1P6^)<86R~HKP#5&_0tKYIyzkeMmG#@Up&UhDar({_lM}`Il z%Oy)uky%JToP0OiP!|f_k9EZF?rd#-MUzx(rDFAacD`J)6k54tseEpIo-=|rTqIS5 zUm@5l7Hw*5Z*AHN0SG@X0_{;>!|mq-H$VI#5Dj1-8p^S8ITeARLon>a*?98y=YxsQ zdpRm3+ITWD>Q{C&sE#p|69!Dc1Wdp*loJlBWBkgFjwd52G|9PoF0LL;;*rE7iANHT uBW`AtvWOE|`00000KoD8^W0IF!{B_B_at8_MFuGuEC>s688Ez=u=psYD8&t? zV=ypaFenSjLQ))xL{~o2MFu5xJ}#0IFXbt3x^i{DpCAlZt6tXBq7Ml{IUoV=;{5E$ z;{2?aKP>#w**DNo*Wg+af;`{~2m&Pqg~e^jscB~id)_llESOYO)+D%E^)j0;PZkXn+Q2 zfCgw5Ba~z_o`^AC^F6xLjUxHwAaV{ANt7f}l0-=oCCRTKkqe?ol)24-8@S}+5GXjgiE&a;A(P+_hzH*Av^h>cA3=i9SGn)&V}FRue?FYq zZnjV8!k~-5wK5y?LmwTxZw|-~sa}rHuKu>pu5Wlm@W}FPcC_}v`2mdc(82q!t-1Q| ziz74!8qaxY{QC6jCs5>ngQ2h9G@9+&Y5TTAOri;W^$wUK*;MGOX*3eefYm!eD)AbP zMB|OT=qJUD+i#+gJd`6{9*rcXOhW{&<&z?CEnk_2ASQ{emhBQyB3)^-XOsp8oWr*bko7M00000 LNkvXXu0mjff^@>) literal 0 HcmV?d00001 diff --git a/emojis/1f515.png b/emojis/1f515.png new file mode 100644 index 0000000000000000000000000000000000000000..305a8c8d8a6f3ff7735941fe84b9d81df33ecf5a GIT binary patch literal 803 zcmV+;1Kj+HP)l5QP^l{sb_9f_AdrDaw@YHtH~ zXzIa(vtWmpoGP>|!k~y$mPk(`^wPr=lEJGYal-z9hcb|DX)l@ED{0dvU2IR{`puf zRLeAucHz?M`vVDYU?8c7KN>uCJd5K@gV>`@{WN$Q5ZwrI>-LT{ai#b`d04Mvs|t7T z-D5JDWZ|1d9`5b1yj4;ZA)+zQiMT*40}b_)U>^wa)$JW?;-bgTqk4^IsE3u66{687 zx~?-kJj|+TQr_O?PIU{ZD1EPc{W@?F0Z7*AEJaWX9T%w&RfBvAF)%bG+GQYG#3hVzC&5 zXV2oY9fz#7AweXS1}&pdEz_}isuz8B1}l}OW)|oWLJ&N8l8!>POoNsoD@{AHWjE*u zg+h3Y1THI;#^o^*xI&>29c8;grD;bL4jCI8!{sp&=(96esWdgSfa{%0mpDxNRJk6I z+Q6p0&*YIaF2UAditi zpPj)lLhW`z~2&W4S#rEeYXGr002ovPDHLkV1h9=gEs&G literal 0 HcmV?d00001 diff --git a/emojis/1f516.png b/emojis/1f516.png new file mode 100644 index 0000000000000000000000000000000000000000..be0957543e7c7a5a17010c93c437ecd3b4094322 GIT binary patch literal 453 zcmV;$0XqJPP)4?~Hz1)+h)Ti5 zp+iTfE=~?zU0l0%5r@*ELP13lK~yN#B)x{_av#S;h|SOvLcUL}JYD5PCcSWWdgh7i zm^l$K^bv$%GmfJ*t)eAUu3Wfot-PpK$~u2)6j4H#|Nav;2mn zYj~T+TDc17mhbcHcY|Kxqh;(~jV`%$gUrK4Mlxw8Cr(pqcohR^+TMNmLLobj) zieen2IaK$WyxHDicKQsi>(C~K9;IRd$1(gPibyn;Lt`T+IX7A2$L=0er6L`|fKtf> zv9)vw15zk@2}2TwBn(ODCzV7NZgLz$A9D9LGJg&G`71|=49AHr@?a5Fy#ylY$M>-H zeR}x7x=AGy9JG9nqOM%#zkCjr&p{ByY&u|)>aJ2DW`4|_l0h5t! z;g86@$hQc-YQ0-St;2b8PPx|5^Gaf&IZs<}>tYOBP!uuIXJ7GG7%WbraK7=H(8V~m z;yzB`A-*WiVz9W1&v6H*TJgVbm75sC&BS-bL;R>r;jZ$l7{;X7g@2kBl=XxP+!3=Vp^Nv&nE`0z;S}`|-E;XcNb)j9?TG%qd(? t?4f3SK&$k^Xz>HS#1s4+&M42#<6rr}pU?t>WTyZC002ovPDHLkV1ihA@2LO) literal 0 HcmV?d00001 diff --git a/emojis/1f518.png b/emojis/1f518.png new file mode 100644 index 0000000000000000000000000000000000000000..8e845a571b6b5fee16097fc476ca1db50e7f1b58 GIT binary patch literal 621 zcmV-z0+RiSP)XH2k-@rt&VQjo~4)!g9dS!%W?mrO~Z4Up52%;{9^x&WG#jJ2{ zbY|QayY>_S1xN4IaAV{Wh9c)-*$#f!8sK?k|47@h-w46!JC6iOo&+Z|702D%Neo3o z7>tCFipS7y17%|e9O_Y2Mny$UgQNFq$RvkB2*EKz2xh0^h+a^^6BRX00Yt&Mda)0L z5V#RSFdXZLOO(QeS%)|cvku`#0aU;#e#nC{1~wJ-0X*2|c@c? z=FhF3@Rfd#>`$Oe(jsV{4de6IZzyl=p{=LT(>DZO(==9g^DmwWZO1}$=SR*rFmas- zqK+==l_6;nNLmC`lEGuG#@p@n<$1eqS^_$pgMF)EY`l^}de9^LM*&cr%x;>-%J%y5 ze9JT%=pb+jBr;>Z!Q_IdsA&LE9I03}Ggsd%tX50e5;%VWd1}DN&HcMMd)nkBf`g78xT0)D^Nx)dj2OnzLs5wam;SfYaYm4PnL@y$of(V+T8hSuO zwg^E(K|@4DNaW&_Lqkgh5n5A9R769yTpaKD^LmRO4qp7eIB@u+zw~X`)H7c1>Yl-6 z9VoZ-_Df0;r*RGIupQg1>}^@4p(x@u_V{BEgI0F1j3S<*-|9qxy_m8}CHV;>7$wHA z7GLnu%4SL#7Bz7P&xE^pDP7Qk(!b`VedyMq!g5V4=uk;s5;34{3O&+S@`;v+;mq7B zn$JUd76ra#=7h{wrHG4ohxcTiI4!=b{GyicCOBW?8% z4}&$@LTYJb=CRD&ElrEKQdkn>M1wf5CG#;V;ugYk&6LyFQED3}Co^L%I*qNRj^T!T`l;tOE9uD*ypIid2`?J871NPdsFP81SnB^>YBPP`&ta!k z)0p=ECdo%7Z&FA5WnW{n$G3xg)s@OQ`&5=>QY7s;6KvzmB#X3Bz ztf{h4MKOjkD;B6>WFmr$MJD?}>pSrtIff0mO*>BeTn*;P3)CJgGT2VOE%kC_e|Wu< z93-b(Eq$`o?#@;XzoWaP20O{q*j;j_lx0s~lA55_V||Zz@MD+3i7tau=JBfJZ7co? zN1N^kEX1e|Q`D7KRjo=>i@1R)6n?I9uH!;d&wE6NYh)(rx}=k20$cDWV#P`Pu5!kz ztN67mbq+JQMB5+v66>f7R^6?#5C6EYYQEGLgKfKJuY~K7eUZ1Y&{{j(%1>ci;%{8W ko$!lfm-2Cv*CL1h1290hr&%aN`v3p{07*qoM6N<$f;B$=;{X5v literal 0 HcmV?d00001 diff --git a/emojis/1f51c.png b/emojis/1f51c.png new file mode 100644 index 0000000000000000000000000000000000000000..4a22b2c52435e170aa73c1ed77fa03fd0260f38a GIT binary patch literal 436 zcmV;l0ZaagP)m(%$PVfx zDh)R1=HhS=7ni`C#b~IlN!wf6?Smi)^?mOmf|kG+y)KPDnxKk~E1l0<+uHiD8^9<2 z%C)YmOQ2p(*ALu4x-WY{l$(-FTE+;e41o}8# z7f=Jf19ONC6h#IaEQHvJtG(c0=R_K;I{x~4G*(h=7o+$ z^rT};=qB(1sDavn>%bSlHj5@kfR1!)aA;d-7W~e5PB8717Qx?a8WIVqiS)oOpGxYM e{07(tjr;3gdubE_c$0000VM>FKePv6Hcrv6Hcrfe|A{j2I6yJnCvsmV-r66hlNrL_}o7+phL* zlIxR5B8em>aixp+4G;Ri6Zps#rdsRA@C$ZX*)Chwn5Z>=D0?tinX$CS6gi2#{*j)b zA8MW>hw*cVz99V|&BNwAhSG2G%pkphpKzx*k4rk7k=#2EUTJ)tIqzqgO>;J}o4!Z( zlarI?brkovUM6>kd$b2fJ}Du$&?o3N!xmnpJIS+?T8YbgGg+#yT7RqbONIm3#%<&s z+=o+B&4`GVT*6om(2JPT+$FxT@;m)bov*$%CGnT~&*wOo53uqNXk&b_<2HR`ep}MYc9K zgtlf$=~}Gi*xFoCvzoc4fz-+xg}rbcS%NTKt~XLI8r9|G&x=Fw;*R4^yxl#|^Xu4Z zqeh>P_@Z(P|0392R#4bcVytUUT4s z=|807B+MKuyt=We!Rg)9?hkfU7Z&%Uco|qGPkSk_5fBc92oEpCTK7)u$Cc``W74J5OqzfsKdXyneNAZ0Zl@4MFu|JJCM)n2F>9f37$9 z^z`RMqfwsS^E8!}Rczbd#K_19k(nv^s4HO09Cq{NbevQw#YZPkuy{`e?(TyeDZQH= z#XfA?X72hdmo8l-68Rma6xnQ+%c(dy>?S>FnZbmaW3_^Z>v`W=q{~stFDLq`?R=iA zlhgQoKE6A5j`8s;U@MZASt0o!!%H!GmgguxJIcb)FyDs5%toU$Ha1dQSI0l3ThnK} zy1`mXpL&7~-3PgO}&79qZ_z2eOemG3k^;$YsuwutZRG-ap*aY zR@~37vb$JenHHg9F9vc{g6eJe2TffFRw$)dp%i?5<_xh|jPl)2Qu@~GgswzLoxjLu zpY*fO7c@cjX`O+pxe~3QOiHo!$8-WIC5wv*zWQ>2WHQOnP?(~kB1HM^{F;p8=pDct zU!vaW=>vMjwVFrBb0}2!!`SrpWAl@kO0gDQ2#()b!wz@J7>X8PS?df`k(U!NSnKro zn_T_}ZrYYyFtcQA8-c*97qHXir>DHytap0*Q0xVk$rF?JHS-^v5uziD-ITP<3i8~V jK5ZaJg;J-0aaQ>Y%A_P)jK~$B&zfTik7{KxG^K#NQcr8Vt7O0IZCPpv{35iY)PQ<~5g^AI)IY`t& zR}u&R0ap`UNLY-~#V9c`BrY1UHW(8T`PEX&mG-W^$G%zugB|#MWOU~F&1f<`3%DFj zSz*RRlj&K&<>*|2SqE?(BlN{17!iU-$oftV<-lMv%ITgM#Y#YK&7%=2Ev`e;^py;g zV`(f^crc&i{c;f_!mX=WCWccO0RfiQJRZ*H*z$ZVL(|VVxj@_ZC7cd;DWsE5kS&l^mQ4={Z>LnEr7+?t2w&>}!3Xkb+hWFcX^X5U{!;VyK_s74<#8o8Kd9@yvr9T z?bX@m0A;|XX=S_0%665*>Y=ibFR+m3f67K-1}JlMWmUQJ2idp0URJyF_5c6?07*qo IM6N<$f{j}O8~^|S literal 0 HcmV?d00001 diff --git a/emojis/1f520.png b/emojis/1f520.png new file mode 100644 index 0000000000000000000000000000000000000000..eca27a9b6f6dd5e02e4d17a74e4bee5c0b1b4a13 GIT binary patch literal 692 zcmV;l0!#ggP)gMMCTZ!^rThEduT3`CE&P1Mo{s13HfKQ> zptCgr2_2fvShtO>U`WeRw6OUhv`534n&C41$1eEPSW}P zC7h}&1S#qM=p{iBg3C=6`20Z}b_*vwZrUD?lcXyoWoQaVs$4uB_R>=8MiGJpAwUQi zm|Wn^KY20h| zVAT|wYw}5V=j{xw567r4b34~%y_|{0Lk+i!chuddrSzeEzDuVhl z2R8?%Day5R>vRosOF?onHNsJoE4`C=mxCl|BwcDOXL#06Xa5ulsv<}b0;Gg%y_5KZ zQSP4gaN%GXo&8fJD8#9XpwgYi;I}1ADKVuaYM7*xKsahLG_%akZCMDxCWSatO8o0l zN}M+Sr`VavS}=x`Y|@C65_(7Hxp;UxcB_g-Rgl2_ce88~aBgogSs5xVHEwRankGd9 z0)XE4d7h1k!OJlXz88o##0^u0000q+ z!59{dNN*q%0d)RDO2N~sT^tSisG6 z8kGtKhftlD(M#<#2Q*&BelqrEm9jG@f?V%A!gjuh6aps&hvEKKa)lE2Czg;xQ07%7 zx6ijR{w_&=uSDk|9Vdy+vY@@OhM7-W#8$IJ6B)|tG!@;e@+!X0)WQa)W#Ob?69Qsu z83s;=@u`xcX)!sMBAqLe$`%;xZK1etA%(z60tU9nufMRA+M(}QkY9TyWyO-o-4~10 yYbyJu$>e;Bb)$gI5IqlOhXh0bor5ueJHG+eDZ4e4nulQk0000PjY7s`V0g`h06oZ@V2q}z1b<}ah?iAU*>pO0wjzt!g|^oIeR z%}FZg*Ib4EFrc$$S7i|u+uRII{@`;gjmfD=_SO5)T^bKYqr{RctkDI8C7@%d@p(AZ z5}+gG#p+~xCEbmF_EZ;hp*x7+FI{4B^~Dq)=F$iRCItiv++2L}k-NjQcy$L-3QUp> z1nUXl*x(qEM26m$0QX0t^4jq8$24DqrbvP10DN&#Bw* zxHl5zMB5IOf`Tn}dYVcJmg=+xy);$iQy0j?q+uv6aB-<8#Py+RYJDD3nJfrMEoV9V za2&f$(h>5ayEMMW7cpr-63{2(iwr#eMCZ;DCgY1-c|L^zvN^@m@$dYWTU{mJZD%2q o#gG)c2cGo_2m?BslT>i}7gQFgm(dHO0ssI207*qoM6N<$f)COUZU6uP literal 0 HcmV?d00001 diff --git a/emojis/1f523.png b/emojis/1f523.png new file mode 100644 index 0000000000000000000000000000000000000000..3a5d9d99af4e1ade2ecb21016cd212c99fb008a3 GIT binary patch literal 673 zcmV;S0$%-zP)Wx zqv}v6+nnzDQ>EF;)*J^befT!b%kC+bNJ4PBESuN8Ui`s`BA{LZ6#kPWpz7dy8mmev z$V$ba$QYVBCwSgD!AhFWKYYOm*O~_igkqRv3|Eg8Qc;x2N)4Yp+->=eDOr|q*kp8F zr(<{)A^1ba(AeSO-GHC+4e1;$$>Pb!ae6!|W78o_g)TccPZpD&YQ+~^Ad!rr*Q3&l zip!CVsmG(z+V5k@iJfjT?N&@(qXC3qnM{KI$so_##~Gatk?3jrI5TrmCIVqzbx)B< zW|2h_q@^S=><{4!Mo5%tx6(JM@_x|ICYPOXOk>zLk4a|H+1)uD-{EG+JI~=QS=2oK zf)3<5ZPXmfLk-6WM>Q@TSjVlmLoAV56pQPaLeV&pxQ5PO3o(r(i-cm6*^}?Y8;tN} zEWi>8gAm|yB%|15_7$XauXULH8#73&(rWC7%Gi5on^!o@$HO6MbYTu;ZoqFkDp`IYe00000NkvXX Hu0mjf#P&Qr literal 0 HcmV?d00001 diff --git a/emojis/1f524.png b/emojis/1f524.png new file mode 100644 index 0000000000000000000000000000000000000000..219c4b534f90dccc4df22ba5379ddb30b6b5e2fc GIT binary patch literal 482 zcmV<80UiE{P)ugK~$x|!Anzd0KoC@@3)tmuf5dwLiP~Wq76C(+LA7kry#s!cBCHM4hY{1O}7M)RA zi=2!NxOu>$bCwV~F9C~_vm{-T{Kr(*Wh(1(9D_ro5cpaX$_$<+Bm`*95mE?ztqB`Rij% zQK&Rn{!%A(*5tfn@@nlng-U~BwMi(Fyng3_9q(as*rnz9+#E@;z2njH4j4<@wDx=^ zM-sd(|HRiYdaj?SAxSzWpSN}}2)rn6GH68^&p0d-^&rNBr9N$-gXfn50XRE=fRfa!P6~a)6?9N^5cd YHx4L{m9&IycK`qY07*qoM6N<$g1}_ipa1{> literal 0 HcmV?d00001 diff --git a/emojis/1f525.png b/emojis/1f525.png new file mode 100644 index 0000000000000000000000000000000000000000..a02f59ed3346dee406f32f6b350072f3d35305f9 GIT binary patch literal 594 zcmV-Y0f8CQ(B1MEK5zb*hdVh*kt)nCVJs z`!c+V%|Z;#E#WMB7NV*8n_HUUs)aKdj%GMTd`b)}d7Cg3A!?Q5v6%=;(LM2^y&r!t z^%}8*f)07R5Z5hqH%_Y09=0z^qjTh_ePu8pikVUlpkwZO4ehm5evYQTP>-!6l$90D zU`6!%W=f;!UoR_}K|smmK_s+M2xS{SE0mqy1|t~Q6(E|%rt+tHNcrgGBWY#;1>H~HhY g&vWwVhE@Og8*~Jq8WVCXj{pDw07*qoM6N<$f~eva_y7O^ literal 0 HcmV?d00001 diff --git a/emojis/1f526.png b/emojis/1f526.png new file mode 100644 index 0000000000000000000000000000000000000000..add89316355fb100a0037cc5e6159d29340c7855 GIT binary patch literal 603 zcmV-h0;K(kP)jBqlm_kVOU)nMg3ksD&V- z(MbY-fD4$&%HZN;xH!158YhiT3^-JZDJrzZbD;eWpHyQ~FJPZXR_8DBORv*B(wl7R z2Od%SoQNucW{sMcRi|_lngp<0eEEUFhAv+Sqj>M=6g&I1PQgPSaH6pwe0TEE0$s{#CRLYgX z!p_$zI~wn9Z|}H5jn=kynp?s#j8TB*kP3&}_(RT)M8^ROcnpkF!?LU!KpB_-bbzDz zz@#x|p1<7zo&ZW67>?tEOacLc48OZ=prAzfA0L=77$e9SH3Wu~F@`$$2$RAOWBlY9 p%zY(7y|lsH1xkVp8F&CJeFtCM(880+(B1$5002ovPDHLkV1h_^9Etz{ literal 0 HcmV?d00001 diff --git a/emojis/1f527.png b/emojis/1f527.png new file mode 100644 index 0000000000000000000000000000000000000000..49a624194c9b64403f4014918341c1eaca9ffd08 GIT binary patch literal 521 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|>81 z;`JWf-z}aZ!~Ws=?@GR3ajl)#1SB3kun!dA-L>S=N87~Pu7|J=iZauYO^vHb%Keo&H7norn_go6QtHJv1sNxZTY0@^|HsNpIWU327j;Y^zEN`!AQ%^&$RI+SL5^gb=s3tZe(Dy*IbSN4r44 zli5kk{WgWsKSk=3vd=Oes`bBP_PX>FLwx7?Ya!(g_f!5fB|qu=!XB2l%Iadu1V=VW z2w}74iu=Dn@zk6X3e9KkKKri`KK1*CZfT38`|+j>%OmZovU?dA7#KWV{an^LB{Ts5 DKXvb1 literal 0 HcmV?d00001 diff --git a/emojis/1f528.png b/emojis/1f528.png new file mode 100644 index 0000000000000000000000000000000000000000..342995e991cf7cacb3d984648bef76989e8dc123 GIT binary patch literal 563 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|@U$ z;!QocKU+9ahW)|$-*x>e%bR|E>u3zuYtmTTcKxnv;e{~e^1Q-T0WZ`v{&6tU$NDhp3>$I8o(*9G006XnV|u`_ zZ{fe6FSj=TI>DHIHf&N&_y&jBDlXz%_89zs_Q7FcLS&eI!}ITI$MogP>!eh7@*fDB zWCK=nq&^^dvz)&E8UMGhi!;{!Nn8{a8Ff{y?^BaBvN9KTC-3CVa_6Vo?^_o(E$rel zUzw+@=3Yhe4Qo{@*CjNXd3MwbY+HaSYIewMOXuP}58OQ8F>jcva$Z#Df*R*Vrx%T8 zg;T`uXq>EN*f#0O&L-AdDvAr;ZylMa9TDmIi7{o03jYCK+ q$wPdZlU*2=W%oWivv&G^xj(GiY`3=Dxf=vZ9t@tYelF{r5}E-1KL#uS literal 0 HcmV?d00001 diff --git a/emojis/1f529.png b/emojis/1f529.png new file mode 100644 index 0000000000000000000000000000000000000000..a779f1f56bb04b3310b1e00767f5254f7b80b8f8 GIT binary patch literal 740 zcmV?ihAwoEAp+!nL1RyD;M8?jCkl}GDq- zuFfzFA3)0Q_zT}tSJVA$Y+{3*b9Rosojj4Xaz|B7JE$85vYCaGj4`u)|K2a_D$6f~ zVL0mheg}X#{GnXDblI&aE$%Oh#|F#GitlgUxS?-)`a@ca8e45EgT{u2+OpE(7FFfo zic$_x0>BUvfry}-IeQK&R~C!n=4{N+5jPE4QnKbw#H?FV3lDy;M;iJdXQC*uMA}rw(Q#1INq3fMeQje8) zklwxxj_cyZ*f?fqzqS>Zmi6ZIxeI_?z%NSEfp&;MKm-CJ5D})!!8zscpJpzSFL-Rfe&xi1Q2+xP`d@MSy%NVaS_uEk3hZ$EPM*u|>4g)jc1wRiskKWyKz zbL8Hg+g^^o7+$t~g^QPl`g&%}xQ6wKBlv0(&C_SjBiikb!3`T<&zU>-!@)y`cTDf; zY5QpvmXgP0oFE9IMfuITO`Eq|N86tcQJ--N-~6UQp-`w<=$PCIT%kgtP#Oe5kf+#* z4<>hkoFfRLVWMXk#0wJzSFy)04G9Se2?@ztvK9AD)W!p{Qlg=XDypcWiYnA6oWxm- z`BN|TP}TI7ihmf#O{tf-j7@0xX$=`_NtuG@*oFaY!vJPdU%vy?r*n}^l&K*A0000< KMNUMnLSTYN3Dn;J literal 0 HcmV?d00001 diff --git a/emojis/1f52b.png b/emojis/1f52b.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b3a1a3d0cd37f79a0101d88d05d65509a865f1 GIT binary patch literal 553 zcmV+^0@nSBP)74UxL?Jbar03y(si*f?s;zxb4=^sX zIjT&m2f6{V)*Ij_tHf8XT^|JcfXBccmh~5l#jN+9C6RM%$z*WOodFEE1k4N97Xy7P z%K}-d%B2!5P1|W}Z3T>{!_Uag%&@<+^S-2dzyV(j(lHwdAu#g#E$`ls0Y<4*#?0`Q zN+wQ{1>hv`9DL1uDB%xsp{}OpGB9e=Js<&; z`tj{t%e=K!5-N0t5&UAV7csQS}5Uu*`s= r7{n$_03Bd^fih?;X7lo(JS%%J&MR<>AUQMqYK|(nA@A?HF@o%B-TJfCJft0tyBdmPAs=fi{qa zXFdM@^N(k5G=3x%t}GkQ_Vw=y`ucANef_vx&*T6+9LtD
    5o?jpCl;XS44mFV zwGQY6-U+IT)B;g{)d{@B^L7XfSPcRYe2_}MD+Njw;V(*o>Ewf`!oXKc3HD=kEG72< O0000c0URL literal 0 HcmV?d00001 diff --git a/emojis/1f52d.png b/emojis/1f52d.png new file mode 100644 index 0000000000000000000000000000000000000000..6a63be45e37a1f511200c176817712607465a95d GIT binary patch literal 762 zcmVcBc*m58c7Ki#e+~RL_{sI zNI?*K&_mUWw_XI%L$3`Y_Mm7H#EZ8g7XN^?v=(U&Vrexd!Od>6jqGGH?>!?_h#;t+ zj||uD##wt`cbvq)75*nXS{pPACEf)N7?E>zS2{J&*_`J;vctg~S-?%PC4_MFS?!t` ziDfP;{2M;7$iFbz&|NP92iP)2nIj}tRUax_^8#g?1gn>^CKGEAYY=M?YY=M?YcL-T z-2Yi&?bQ{0{pFDM_lR;^Yy%IM;JEdEl}&faIFE52<2=TBjPsaRYP-UIXRbZwqq!<_ zLq+N$(!*^6=|;Xe?St=>jJcwSQxQ}I6~UaS?c`4-C_>8+7_o^Zc+Zfd7fP2@yY#(VQA+02&m4vjCkX8~dzBqfPIXW`6Jh|_tNh^=Ut7|>w zY~umIEVtT2KP@+omdmAe`^ERy_$Qie{Nm#%pt`VhaN_#X!HMI8-&}s{-p{{2_47(| z2I#D;wLg}3y2seAZ6!K8)OFS+@ksx`jy|s&e5@%JFb5BWV7)b1GOEt)okqTt@iI7-nsjELO2bCU*Wdqf3MK~zvwK@~(# s04Z=9p#yvm2xlZA31=qER5Dlvie#25G0kd$88KHjSap`h&QcuP>>{vCPNf)8D|^PN zSnCdW^LdkvUP9)Suyew2U`({x#YR72FbbqWbbgEwGu8&f@kf(gEO=w4;0RqYc;>7FN&wH^5)&O{ pOnE=_WM0a21c=$&*n)M*{07sDpym|wJ6r$&002ovPDHLkV1l7Y-bDZa literal 0 HcmV?d00001 diff --git a/emojis/1f52f.png b/emojis/1f52f.png new file mode 100644 index 0000000000000000000000000000000000000000..458fa9dafef83fb405963f6969addc617df7390b GIT binary patch literal 708 zcmV;#0z3VQP)|zyeNzomY|~Ugy?*~%1fsG8vFgBG^31xBCE(EF&B)JzsBL8HW)$}l^zPRI3qc>Ox@mr3+0 zmCn8f9PuHG4=)zDe6N|FJ59K}D&xZz4u!wQhkxSr>)6XVCdXE3kD7#!`w1WS(;hWR z&19MSxJD@K<@3lQnRFh9!e2(vg{lgw3>}w8rJN7~-ySy(|6VscG)fdz5Q&;BOm0wP zx;fDkB0glXBR*ttFj7P4fR`_$OB}tho2id!7N;{Plr*0T5U6uA@g_y${R(a8g6sRTVo@@eut~gIMoRvp05%nj4_j1KYk2)SvB4x#Qi-izJlUT{&;_{p q$M$A{$=Di+cPnJmc`C3aJp2uDKjzXf4s&Gy0000k=aCI-wwe4a|nMU^p|bV+sZ$?p}Nzim?Ze9$$a)D%HAq zclBbcark98JRM<ZdJ>PSz{+?-c42%(siL&RKwn{H=towJPTgmsLBooXK zB^lAp?ev9!miv4EmLkcXJD4JvVhl(nIG(Qiv(c^OJ5iDe#zaX*baOks63}vHBt%?^ zV-~{<&VW>c1Mt5ElEVI{;%+$ha%Ux=<;+NkxFW|qhB=%8sRRe$&-&Ci51p&N4KorV zuE?FoB_9=T!AZcoQGgZ1WO`V62X{l^^bpaT>JOQ z2rJ#_0T;Nz+5Jr(hyErwr77Ae**wBzlkZvt5 zR**xj(Uzz|(`nGye^5hENJ4`pd2g2&nWy$V@#fJ*`-tA-2Pb+@94MGT+Cz2u+!1>S zVglo~WMUGjO|e@L6BtJzh zaujtWIfMhtd?WCiGM?Uf~`2f|$mF zFpuvz=C||`9XLu334ORi^jDa{95IX^=tQy8fR+aF1>IV%7Y)zwL`ye{{S|a;nbU}; zm68qIAiiM~9saL@8S;*jjY`W;atuqvG|nRIlz30x73PteD#AY&$k)ULT*a`K$9PVz qU{m_5BDL8h>sTf}p^*2H_V5d4-f_U5x*8h*0000AjQSIms2?MNx{5FCT; zX3g)ZVv57D;(Td%5(ZwCsk|y9A(N0v$RuPEG6|W4Ou`_VF;z5UECStMW=T ztM@;*TyCT{}NGkF0?91LL~;Y#Wa)UBMP3tfnsz-l1< zzTNHqIH_t6IJODi`&v}B2OQfuRqZpt@ik2o&)1tVM*hjIr78=IF?_j<+4J@0a&1_n zYa5P-JwL*1jFGj*7+DC3ghWCjA(4; s0|MZTF&qzjHVWdsuYtgJVHk$<2XQ(tJm{f{?f?J)07*qoM6N<$f}V0;^#A|> literal 0 HcmV?d00001 diff --git a/emojis/1f534.png b/emojis/1f534.png new file mode 100644 index 0000000000000000000000000000000000000000..53186df779d9b5b5ffa2b3985db5f2c7d7183509 GIT binary patch literal 456 zcmV;(0XP1MP)$!IjDDC~^vqmuX zp*db#1~7rY>ur7evi$n=(>_W90|{qG$LGJ^KA5~US0!;5fWT!1yW;)E@xjwK>F0e6 yRB(kN2@^)zsJNws)F`ocHsQ3};mqdVVc2i64vj8NU!2SU0000D%?X#MF5J60Q@1N6zoBYaiO)_63G0 zhK%={bERtSkjm+204V-NshobSnf4oHI)5DcZU+g9#Eku}_+)YU5I`2UQ!<6w1#uO9 zzdS$b6N#xPRaff(vbei!sZy&;Oa;*lOP87Y5@V8>I7^xm=6NnQ_Kee34O-{ATT}=HXM(18*U(Yw2v_f9_@8~Hz0yXXzgyS0O;ZF zdaa#}6~QA=BreZS`pR_vXQnXw3V?$D>$Q)zUN^seY9c`~6#8z5|LN>LD$V7ooSp$d zah-^H^yAl;kCn5X&!-ql;RcDR&JRIsao= Q0000007*qoM6N<$g5jXdp#T5? literal 0 HcmV?d00001 diff --git a/emojis/1f536.png b/emojis/1f536.png new file mode 100644 index 0000000000000000000000000000000000000000..42a34b035880e8e49ed1df91dabb255e9e0090ca GIT binary patch literal 498 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|?Jg z;w?S6_tfkF3HA^FCpULD$+R~mZ}!+Nd!4VcwDM!nu5ZcbE;?u~ZH+s=ldE$JoUb6rF%aS)?-U9#p`Fm>W{=b;H^6lY02I~ZOI8`;BvbmJ?b|2@` z;`vAaow`zHuixX%B)&v_#Tn(b*WQUSFfItNnyvFKeA%|&m5FnNEtG8?Q{^(ZmThO? zun*9f>nrwKJNWkBJqG)PEhf%eVAQ`QYIih4OMD<$%3$l-XRRNn9+>!rWoqS;tGDhl zDco^eSn_VujrNtfrusaJ2*c{(;;!@UZEBaw?S9WF@Q-)<-!E0HY>(|ZF5hVP`6}e%8|w31zM&Ot*WNgpLE(?w_P-%ZcHQQE+{oJZtTj<8I`!0Zg90Ij zme&yFc@q3R%8ipN6K5O?oB7F-XATR)!}L4ff+xPpGw)$P)_Gtiij;KT@0A{<+og{& zKkhluiX`QpYcIO;UD@G^gcyZ83bu}^f_o1HuG-xX68Oma(`5U_Yj){P3=9kmp00i_ I>zopr0EJH9=Kufz literal 0 HcmV?d00001 diff --git a/emojis/1f537.png b/emojis/1f537.png new file mode 100644 index 0000000000000000000000000000000000000000..297bdd59ce7c1977f93604de6bbbab9ca6fc7016 GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|`$` z;w?S6chzkJ3AP8{yA334B4$3>xNP&mNb4sYF6UoVzfk>>-uK8sb7^Z_*MVg9;|~hT z?l(A^Kj4w;IgsTQJZqWd--YK7f9O!?^4$CT&#RYzyVJLs@^7A9z4j4*VlMArw&5=k7R4i z9aU}C+q2r{)!*6w%zqO<1IPbk{I%cH82S7EA9!=nMrG%xhd~|;E&Ct0@6*nX-IKm~ zb^`x0&!VS?mrh{d*#8_X`sPl>7anyKne9IpzCRTuZf!1S>nCw8&HSL8&*Uek+PxJS z1?rx`HCZI@FxbucEn${QxLphvXTyhH`CseSlx{43eDN{U;i)%$H?UuZxL^)XZTPia xH+Ft}QP>I&)@fJ0=UmzK_os>IVP- literal 0 HcmV?d00001 diff --git a/emojis/1f538.png b/emojis/1f538.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5a3ccd1e62bf942081d9ac49a79fd0f01233a5 GIT binary patch literal 377 zcmV-<0fzpGP)gFG(b>Wi{_UWX7#4kw;Y#Y z91#;7Z^a6Uh`$KHr_RTw^o{F1j6vW*0|d48=t?RcECCP!2nv;qgzE1$t$y2a8F&O9 zXFFOU6%Q5xi1;FCVcE#&)7|pXOB);lPSsTN8GWVv{P5L>3505w;Jj`4x31J?XW2wq-Jp z$O2liS%|09v#^rP$!TpmXx6&SA>t8`B5WO9>?cxc8Sn!_C@SmGwT7ZHb;v(X*X_WHIY3&^F^OF#Y%DNO^9gS}qJw6GzI6fS} z;dc%$A}-@j<6g;RAA>PD3kZDoIve(ltCQU-E+QVIcKvQiNj`;@^(-Lp;q9T*IB1{l zRcy<|O~k{tOh(uBTP2g71Y@!e*t22ZxIE5PY|F&U#{vNory literal 0 HcmV?d00001 diff --git a/emojis/1f53a.png b/emojis/1f53a.png new file mode 100644 index 0000000000000000000000000000000000000000..e8d57e2aab2a240b14fae9b3b25aa6d9050da714 GIT binary patch literal 327 zcmV-N0l5B&P)?&q#Z|CcS*yU z7aSN;31S2>r7?HX&ssagm{JvM^DFDbXmqf3BXzo1JO_sPuE*BRg}2tn+1<<2D-l75 z>h#hk;M1L1&d=7y`vxQtL8LV5I-WIH;Rl9Pg?%q56G;&>IGcOAql^Os5002ovPDHLkV1o1Ihf)9l literal 0 HcmV?d00001 diff --git a/emojis/1f53b.png b/emojis/1f53b.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c7787e49d719554865260d57baf332c1f3793f GIT binary patch literal 342 zcmV-c0jd6pP)u`Ff>f*w!f_!gFso%GW1^$b<;b zC0A9qfhOPVTvc5)UaU4D3SF3v@Ft?MMmnBc2Ba&qxwfa>t8}5zL;0!IT%4R4lc2G5 obGGYtI{aEH8k17dn9Tq70nrFykR07*qoM6N<$f-i5DH~;_u literal 0 HcmV?d00001 diff --git a/emojis/1f53c.png b/emojis/1f53c.png new file mode 100644 index 0000000000000000000000000000000000000000..5aee3436c9efd0fa0cff0de62ea4ce87cf03221a GIT binary patch literal 319 zcmV-F0l@x=P)S^`A0h@bt*YS(i4E{Hvkee1Om*08*D{&THbB5|!R6KUMu3102P z2|WU#$8v5g=SCk#2X(?~;ra9Q`oZ_v zC{n{h<;+5*NR2i^gF0cg@HDL!9(6*K(2yra94Sq4q~wXwB-E%A%FNTH%slFZI-#aW z4GWbn7Ai$*)H!PQ#}f}P@ATOpPt-YTp5HzhN`Q+0tK_iTu7Qf-s;}Ml{ulgjF5P=H RBqRU;002ovPDHLkV1kDsi?#p& literal 0 HcmV?d00001 diff --git a/emojis/1f53d.png b/emojis/1f53d.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c3d6d2e00b07e1d683909d8fc503e845ba3475 GIT binary patch literal 329 zcmV-P0k-~$P)+XBTq?g#2F^ z;JLXxsO^OzAW-yhoXDT7i3~dxG#5$r>vlpcr zv5q#14oPk(N}(u)BsX*k=pfdySZaQWb#w{n@%(1^ivnsoYP&4|2K_L=R5mX?7L|_LG9ik4M zggh2>^374D4+uomF4K{d%8GSzDR>!kz<+{HI z(D^?xDd|?qb$<__vkg@fY(W=-9tF_(3n2tGO{HAAxsP(cn=R-H+h}a@VVRP|hJj^B z4xFgKU991x;UE-2;En@4-`1fRVQNGO$LThC|EwN)Dgd z2@)g_k7VfYou#@#XKgXb_k~Rs#(&_X;V>~6p`b`*?9D2vgh_i>J?krJ6jgBg@@@(W zRl@U0p4^$lNZVv7IIJygGVpkbB9Du@gI;1012bcDva=T3lsvjU&fM4rds}?uDdeb{ zAWHyeuhh|cp_;Gn);Qi#Ly6bLaNjbKP>OHw*QstSB~Kxz;fRl{RMO86F&r$z#RsnH@dYY}>ktrP~h(yeSBc2)c-b zpe{_qQt8J<65Rww7iE8dLPSagg%aIpT`8!9MTDRss7#WX%W5k-gFCbDd7s9{V!-wD zkg*{mcUp7V+o8U3`1WkCI^9Ks(j|0+v8jt=h`^eCXRwZ zAO{=<62lVm`GKQ=17eUDREQVKmdQ?5Co`EQy0e+_^6{rbN z$mfTPN&bC$W`G5&+-)F^ya;ou+$Jhal!}Gcs@mAMAgk!9b{5@~ZFd&=pOPZ1Yqna) zRjJV>B2-5z&sRq)`+z!q;wWm{uTHR=d;L=CW+gr~+zk zh(=$i4~`r=e~`xYGvwl!Oj;}~HtFMl^T4h+iVh{Y9M%~AHNP+`r!IcIwN{!Wi3a)M z?0$Z`dJ=15o>}`k^^x^X)qmvGf1se;VMPqLsR~_xA+og~ zR>Zs%h`Fh%$AL!X{mo$e&bKfkc{&yP{x`f6AN-jMfUHg({g=7_BICQ!wWzdmQX;Qfd4OcYQ!nbb0fRxqnVr z3E!xajblC^Qp#>$EavRuiur|*DmI-EjfRw2YY{vNo&-;VCqpi%X^uKA<^oNer1bhv zIF~VtA-CUN<+Quax4~n~br>;=kTXUosu|%o1W$seFIW;rfrwGxl>h($07*qoM6N<$ Ef(Tc8#{d8T literal 0 HcmV?d00001 diff --git a/emojis/1f54c.png b/emojis/1f54c.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b11e82822a02134ca5ce7ab5919a1e14534704 GIT binary patch literal 562 zcmV-20?qx2P)T;vlwDkW|z{8mcx;?oFEHp7S?BOJZ%5exFL7h|(~y+3fG? zl$U^I1V4nakc0=Y~26k0^Lf3nR`J*);f0#o~t% zgmQiqu{4CaOmAg6eIMwj&SH`ZIR#t;9CZd0=~CY_JIQ~c&ZCqcLfq4uKewYgKbr#L zG<6E<3a}A43y5(Ge!+J4z46v3jsg~?pSeO#S6|(@1;qKA0?vR-A&hD#8iXcs%Fd*> z00XqAK@X!eT5AQ0KXpWXAmrcj3NWT;H#!=lMYN-5*9EmIRz@U38_F{W5XMbp`#zTF z21ZQ0k3}WF!fZCr*4{WR_5$xU{~^Hj^GPn9yvOH{IhNA2G5zTq6K|*R=gXugrm>;p z!}t__q0HEmNfv1!0<5EHkh+IAUvv9%ifT2)hL(m(xyD#>lDk)5F!S{X4H`HN9OM@R zJfJQpE>J2~5D{7h#RWu!l3$@g16jbaat_G+1j)(INkiLi*#H0l07*qoM6N<$f&xeL AEdT%j literal 0 HcmV?d00001 diff --git a/emojis/1f54d.png b/emojis/1f54d.png new file mode 100644 index 0000000000000000000000000000000000000000..23ca5c881e5f11d8c345b51dd7bed29f8a9f4699 GIT binary patch literal 672 zcmV;R0$=@!P)wQ70jRP&Hq z|4dhNT|IW_;_}dD-mJ~dqH?on77h?Z;CY^JJPR6g)$1kESe$?G`uu@8!!SfdPXjgn zLIp!1{=%!ZJWr=mcR*NPc`KkF05$ee?4vbakh$?x>dw`vDVlCCue?RXnFgw~F(OBg z@rOo0=F_S1yH_VC*)6P7tyUNu9Hm;V4Q+n?76VxT0R#|K^h6)+;<5g4BHl}|9Y{Iy)k@bi}{r(A)m#~;VhY* z1ZPLjtXsCNOS=^TG!1HTWtE0b5qaS_&c8j*pA>h0-6TFvTXCs>e@5M(NV4S zePG)-ci~c}h`ak#KJP;F+31C5O zZhV?8?-bHBt!aWcu3aH_Xo6RnH5>`jaVSb@_Zv&E7lR_Sr2YQDtUP=)Gkk6G@;l9M zj%{OEHl}IPu3oRBl!3=Ea0#&fF*D+MGV?f}OeV+`D~R%uNDN?_Ci|JDNg^?TC?C0E zg=8|pt(({Lil(jHHsTRt^x&%1E#7A~a1HlI@tO)(E?;0Pw@r(pDSon-1AZSZg;JSf zX%|uxAg&`_hY1G*v?!WJPRDUsmc{?X`cBYJ0UFSN&>$j&!yVu;=(ikPk*-d{ zp#UO68?7~3i9yz}c`DFLgJBr-^c=@En2hr;TC?dA{l+ z?pr3=Nx6F6NyYF7_!n&WBQc>y5<@RWwqPj9#?UNQ_KqQSee2ft?eoyrxP*{h{Ctd0 zKm2AP>137xhySOE=7tzfj4h|eq7HrOi2*PmaUy~l31P=g?6`>;36VGv0Rz$#0|ZiI zQAbE)SwtP_T)Z}k)-X4J3Ly;6md8nrTjYvKa>XR6af`F%afC3Kn?HrtaPitCQAawG zKBY7Pr8EJpG-%LD^DhlrX#z@V0!nED#+UQI=%^$4=kG4Dgo)Sa5{*eZhdn}45a{`e zuodFK^NA%)yhfLSxXD4&M_6`=3fu>S0C%rX~1u%VYBGL4Ljaj4O*-_MdkMIH@q--P&R@KgiQ957QEu zVL`jqLnx)GZ+K*9hgh$;6iXTWu447`P5h3+?Pnr1rqAiiqpaQ8At2~$xQDF& z;8I%1@^q`k?VFp}i7-=zI8%i+%^Hpe;)p{hwi}#AJ6dM z$7ejayUStAC$RDJUu0*8C|pQ$|9h8Ob&n&GSJbL|Y(Ltka6ZlZi_^rCVFGWSNwQtr zXZ5p9ycZo_C3%haqC<71PIa};?4=O`YZVtX$C4c5jr<___l8M~Lm<+w9Qq6ct}IS7I%Q+UBuCN{15CW-u=87sZ*M(DYmPJ}nj07_1CG{E`RaE>$ly4t gr_q`tO%0#C1S2y4NT&@}aR2}S07*qoM6N<$f=UNx*Z=?k literal 0 HcmV?d00001 diff --git a/emojis/1f550.png b/emojis/1f550.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f575fc96a70f5e2f70c0a24d185d829a5cf3d5 GIT binary patch literal 715 zcmV;+0yO=JP)!K}gD(qS%(B1k&R|?=D^gBn_#L@1tFkv%u zN_K93CLYTv*)nW2Y?2)0A3k~Z+U@m?ICzfSXbYmVH3-)wCw!s{?SZSf>=baQX@nD; zeW8KD@YmJM;=z8YLi2)v2ag_4yS=^Af2Sri%wDtu>RfW{t1fJ*M_jys) zG#nddAkcc<^I`ej5`E|H=*|9HgEJ1EBcZMi&@{oBA3MKLwX5!7`{xe)O;_L*8&OdA zzzNQ7qf&W81|qj705EL<2{cV`-qDecmG>ERw6>s%rU}{t5^PL3GBiO%k1xtFG~BKR z)bnw54Lx0*a5w~GuFG>K&Jj;R*f_gZPMSpKMY7s)fvn*^fgTH7A$hhWj z2E#D;69#~y>3X|mSs;X`~%Rt~0V;a^PC!p2q(He)57OwilkvpbzVeSS`G_LVgaUa=8`P^iZ=Eqq?zMCsrV zIVGETm6(1>S1J{3ZGKCI1_r~&h8ZZRdtfhK0LNYgMNz1-EDHs-gw^#;lnxG|mCJ8m zJbyZ_77G;$rzAPZk59$ok{rATfMFOKJjDYWcIypNty^Iqm91|s(8yp!8i;{c~0L?HoIF?0;RwzK%4Oonn zlAN5H2#=+dWF8h87EzM9u}4o{xjaH&C1)d-n`E>$%5YXWAn;B!`x;Q~uwyr`5u4r7 z>F??ed|Fwa+1bt&Y0hrP{Ra=nT^^y&!#m+`Yk|Ygfubn9|G0{*szR*u!p_-HCwP$8 zG#u!L&)0a#{cis4EPeA<|J7^PyC*6+8}YZbfTjul__6sDCH3C(C?SM`hp$CO-Ga^T zxS|(}uSr+%#t;Ce$tQxQ3C^;=e}MJGSI{&;qa?z@1cE(74DS{~3`4`^tU)=4<{>_; ze#YG56588ZQR1$x0mIPX-9m@~AaN`ULI}#4TU^3LS;C#Z+o-N`po9p_T4gAV&<9}thwxR0= z)NDFN7UIze0R78G3Wj0gUkt-ULP^1*FT|q}`un%!W@~$Az0L0E+|x98_*xJ`p&Y|7 zv9gvxZf6%MB^h}c8GlX}i$!cC)?@yz?!bX=_%iAi&Q(-^W6y!2D3q9{iHw@V%31=s zon2`8{F`S_9}lY8Op(GdQIfgAkE+frvLx| literal 0 HcmV?d00001 diff --git a/emojis/1f552.png b/emojis/1f552.png new file mode 100644 index 0000000000000000000000000000000000000000..5cebf205fa1f6bab3d6658d21bd7beedc49465a1 GIT binary patch literal 691 zcmV;k0!;mhP) z4H8G=;^1J?g%A^p2?H*;iDPTy0E-xj@eh)6coHn-C@J)Ep?4SCfC(W)cpe5v-0mOf zj6`EYVnB)kXu`f#BbQCirIVAhGt&z=guww>QTf5)k+`g=4**b>rQkUZ6{cmuwjGo? zx|Vr0H69<)wM-FZ6lJoa@}p0mzx4;DzG~h>F14s=Z&u+u>xCrx&>CvQIj?{n(1w|ji9c}OmJQ#+-=PzH8GYrV}br5(D>ZKrd zO%r>z6ACq7^naZDFiUUVx!ZZ|`i=2w-b2D2ZJ?CkpSATrsA#A=j|xH<1jSlx7+dfN z-ph8W^o~TLu^|9#OGpN#1Sg@Cpd}=ujEzKNLqrTny(~-N_toIE{Jt8nEQJ`5dRYJp z&v77x;5fhZH5_(9RUrC&;5iP3-J-(cKh&m1oP-6SnU>Y+x-JMII4s~75%7yR%5`0s zmW48n7`bf9wjFHdw{cpV`EA&?10$DBk@<8o0l;2b(cw5QPU1K&mR59>+4JdSg8p93 zthZn3YVZi&u3ghaP^<+Z436VCE*5_*BVX8ou4N`(C&ngdsZ_$s^3PPbyCTXQn^l ZkiUWc=G(vSCFB4A002ovPDHLkV1hy~HR%8V literal 0 HcmV?d00001 diff --git a/emojis/1f553.png b/emojis/1f553.png new file mode 100644 index 0000000000000000000000000000000000000000..f5dcb68e95c04b3d3cd393251dc328f794b3ea8f GIT binary patch literal 728 zcmV;}0w?{6P)BND9C~iv(Z5hWh7BpgSoN7w)LEC?e%o;J$gd}8SBsIL!rvh z$XKsG5S$cjVi1562U1cl6J3o(Bg;z*>o|hKA&1MujZaO794^mw05rqU;8+$FvZ6p$ zH5jyXG7*`d3r(k!2^j_&28YYT&D_5G#A+9Z8#og=)!{+6*8|HjGep6HPIo&R%{+=F znV5KUpU*$w|FE&XRM^dzX^!V{PVWh5nvQrf4THKCi-zgXsl;~o*}gUtZ|?gc%diX0 zAcR6Knx_|K6Q(DVHr%IOK47xbdm!ki+G<27qB08XU`_LRJ*0ss@9aP9`Gr zbD^1ZG9kl2p~}$6Sg$`2oD^*0AOIH*B&A$tWi=L!EH5pr5P)o(8o_hV_RVQyJr<+fpwJ8YqaTi3vjg!Gf)VQ43&hHSr z!`Tt;?20Tc%uj7?=5)$C9Jqet<~^@pjEjN?;kFjI96T6?!P~|6$f_!&Ks_A19RbmY zytadqVFrUur+jbbUQW}?SK{Z+U+5Zj@^%t#YXPMM2fnR+M@2(@9V!T6;1}FjS97pC zoM#MOe?~f^mj(c^O+g8i68sCL1kFJSWo#tcJwODX7-LxqpSu?S%j>QI%TfqFF-8E$ zJja0$f+Owj;xIx8c#cDvOz;}Ut-<2bGOAgY z1+7p(nL^ZTCTSQZvbjwhC3dkBuU^liSS;bdkK9ifh6y#BNmAb7Tx)J^>;IM4NI>+1 z5C+w3HXC%qM6pza*W-a{T3A?KK}k1^fd|vsO40m=#N`@I+S2tj@9RttVz%UFdEX%_B zMh*+hE68naL(Au1Jh*$iPtC6D4E9NKi0>O3PDpa-8UU7MDR_=Ug;prQFieygX(jb& zVl*+FR#Fu!~sG3Ov}wV|JX44(n2qL}3iplNGi-o)c@&hkNhQ8ybig2mO8=PPj2O zJ(@~qvZ1h?0WgR|TZUdMl!}G?>dNvuj^S`bQDbaob}px=vAX~$&r>i#K$~e7#V`!$G~wMK7IZI-7ugG^uxzQ49F2Q z_xEvNJJD$TLij`J-739)>-OlCtJj|Tm`D;Ahd?R8KR>sBq3vw{8MG0?ArcIrZtOsm z{Fm%j>kUbzGg$yMt}39E;53vH#8m|zKAFyBNhmC5c%C90>_w--!Cvq@MJOy!5CDTr z5I_h)rwAcnf&h<7@Sg~PEz`2#x-L59x-Lx1f=45UUMtwP1AS)~ozi!9VcQN2y|zY5 z#X=r{UDm2_92ci?92aG+3XlE1Sjf{KTb1qM%VPtg&6bcySl)HZb*!Qi6UIrMcrs% zW3!CL-fx)A=G$ja9?ckfy~W{(qQ=|9P!V|M`XJWs&{0d1yb!L}WE?5b9Iv9y?* zuWA(&9u6nmoSGg@rZd@4Se^i&;*e(OwY5^QkY8O{UdJ(i0cJJeSU-anmjD0&07*qo IM6N<$g4HlFmH+?% literal 0 HcmV?d00001 diff --git a/emojis/1f556.png b/emojis/1f556.png new file mode 100644 index 0000000000000000000000000000000000000000..e56f611ad4039e08f024caf4462b3c4171ec5f25 GIT binary patch literal 716 zcmV;-0yF)IP)SPgO!=h1T>v!0(BN1WRa&_WT{mFS z6*)UMKQlF{$k`GsG%P+Tz)e1U{L<+b2kUto33dd~)gFMO!46Sy;Ih9BjdmUfnnrBA zy*Cu;3$L%H7x(vy6`JFD+`Io^+UXVtMZtkkuoHHk14U7IzxELYRfW&f3ZApUBf3%2 zG#u%M-`{@4^=|pi5`Fv5(6#F~`ey2R8wmwFLDK|her*3lmAAD8RfJG*3(d%@yRh;0 zt9qsKibSHfMgcG#k`FXZ@Gmq?(Bb#N!i1y!qeO6tF@~YxbTr|AIUP-47#f00j1d45 z$Fd-V;5Wy|xCkKx9LvHY5&VH^n)sCYf)>$@zaao*tz3p_nmBK5eFKih2DEuSsAZZa zv~n31nW%+aQr8Xa6!&oE@bCyLZ_|k0jNl?W#Xab{0kx1zl9f~<4nW`BQeYS+s^o79 zx`SP4Y_Ox2VVKz5Qee?nQi(YI{cCo+tGm~0uEtP!!Yq-BZK1p z0TekKe-WR4PFE@wY-K(tLy^Alk#6|&>Mq#2OR%wZpePDerfDLt7O}dKL2>^8TB-E< z*^@^jY9U{taLOkIxRLRRr#>lg7XZUBG&q(;l~yi8*9};7Mb6I6&rD4ya#n+dLXCl; y;hu1`e@t+RF#r-y$Z8>%TuvosmlhY&IOi8_(e!EO+m-nM0000nbchqWg^a5zWfekU8jLgR(;kntFMI1rlkdt?F!(-z?C-1%vfMysP9Lu6Wl4U50 z3Z0q|;^FD3;CMoaOVH8KIe9lXar^G$YP(~goHLTvMmJhKZdi_);jmiJ7Xmy@uss4kc1lICs05r3U+H1 zQsNejCUd)z&p#plK;H-erqSgDO%wbJO%r%rPUx7fK<@~#+8jL$L!;VKiT`D@RDxk> zSZ$6T0)XdO7K9KK+uPeiDTEMkEDIe^P{NOF7LT4jLtOX_S3^Dih5;Z*vfQL;8VDhH z`RWap-mRdk(~FB2`alRlF-_AT$ue{T5!1=2qNw<3!MNufw zGz}>+gXPsVWOlNUa=GXC@7);|)2Td#Lr&h!4UdfnoxJ-R0ES^`a4d@gNtU4~Ds)Oh zh=-@Af)fcLEJ{Aej&CV?1h+o>J^K-;ROmhGL N002ovPDHLkV1nR0R5$eL{VU_j>Ft$_<*>aM3}wtJ9>UP_d9foQ-YQ3AWC~g@pwM zn*@@QtPLI<(&$^;%d9iWqo;nQ=5qCe--={3zwEfMyF0g`MS$6czt!07xH_BA$&e@> z4`l`snLysXbK-TMY|=jM{o11SkYQwJ(d5g<#hZlYGC3IY@b;x%Ou1<$bKJFg^~$Ah z9v!-~X4$l?j0G1Jv;*tDz5Kj=u4Cq!sn0#`f93d<9LSMd=dq|^o`*zko!oEJ?jIHZ z6KXOnK9(le?%b7qEwk_W#}^+b|2((AM6HwQ(cirvKFery9a?@qet|UGlK}B3OL?at zfvwHVGFEviLc0Zj?D&<~y6^vkhX>~F{w@|}Dc^bj4Xdy4oEx|PbuY_~4ZrBZ(VEcS z(6y0S{{8-^S6;vOP@3t*oRB0aY2sTTI7_X=HO0iBGeyhyNW+vQ2`R>fveQKcZXGl* zInrQqh~dSv2(cCciDjMhRYle7vZFapE6#D{U_8EQ#k=bwO~oxw1s2^+oYT&@AZpv) z$CYv}jtv$X50vITKe#E^WW|vSrz?*aE}Xr4htAzQt&evYd?}i@Mzlzh!LKm5`E}Kf zj@MNhd080+*SL1_{Cystx%>UMgcHYqKQ=w>6!3;YQRLt8Qrnyw{X=WsIR<;rG@tqN zddc3n<7pq=?d(kESd`rHIC{g;`?P354!1^^)8yxsE8fhw@guAy@@{kJ>b><}AKhHC zF#MHB-$}12v**mK)YQJH$-r~?!h;Ag-)Xsr3u8rrEE9;~aGu{|~Du4C% Wo3v6pv6Bo83=E#GelF{r5}E)#mN^3e literal 0 HcmV?d00001 diff --git a/emojis/1f559.png b/emojis/1f559.png new file mode 100644 index 0000000000000000000000000000000000000000..6991b8781d3bceb644e6fecb1eff8e325fc28bd2 GIT binary patch literal 727 zcmV;|0x127P)* zZwfs|FFo`S`63cD10U?g-m=Hd5j6=Ek|>nXx;)Faac-%*PIq^7Lj#fZ=kuX(M*q-o zM=0Do?sRz~00bNpS`Y+V4CSNVleFH zi`9NfE0tc7?(nrS0E}PYLDK}AsZTgOJi?#QG=X2>VPZnz-Z94M@0(^<%tjg0>`o-grMw7S0`@W9Dukb;mzAsR6+;=$FeX9 z3@SKRW5 zLZK2}H?Y2uLVj-_l9-M@i_ScuOQjM%r#9ok?w-(*rhBvUE~=}lz_Hb!C< literal 0 HcmV?d00001 diff --git a/emojis/1f55a.png b/emojis/1f55a.png new file mode 100644 index 0000000000000000000000000000000000000000..2b1aa9b9ff53d03cf20926f25a6d4a49b2fa9eb7 GIT binary patch literal 604 zcmV-i0;BzjP){xlEdYbA7aD(+D9b zmn)RZ6{M8pvS|j+_mRt_ajpT+aU|FRaKE+1r@yxc&y!Skc6jsl9oF&(&y)1`_R#A4 zIJbeb62uK4S?J8;d6K$RTN`m4v$D3vL7pcmbmeiHfSVE+R7w$~Q#86XaFM0&MGh0B zQz)fy1|`t#Clg31Y1EnT;CRO|4kM++PbP4>6h|1kav8yqgaTH=s1_JwkW$hpm(6e( zV+>(b!&#QV2dy=mr3(LRvs6KAjWa2&WdiuMR9q#F4gV6yhNa>vPHe3mmjXKvyr_mD zvkQyFvEgsx*f6`WNHq*`CZrJ4QV4nU2bvGb^A}|SzTbQ<1u=G`P)vC3?6iM+)i6Axfqd_bnydh(6#Ub6clyJs1DH~ zyaja*FG-&I3Z3%M$%7y$q_Ko9-j;QDh;y>Rs!AvuYl0nfG7+(l4e<)=k7Kz4=e(&fsBGx1%s9_<_j=4 z97QzhHR90`e(kh5a`n~?y8VRK?%vSgAe{#$QSJem7y}ry0L)b@WoBols8-5|2>m3X zpCpI~)k>M!nJKDqnZjKRA21-m1n^=wikQCEAP9uB1R_jNHW-c~3QtgO3h)pJ8}%AN zAe<)%gvNM{LJ7ko0h-nZ#G@lzR9qgx+JHh+fO-^$hzJ)YB1B!>IX=8DP|MA|FW*LRH0N?W5(d{Q(RJWIq=Z?aPpezG_T046<=Q)pap4RRj z1*fV@0=lK}age5LY`1XEa~9`38`~`gX^N;>9#UD85&>4t8{lhazsKtOCY^2%?>#5H z_jI~FR@XP_?Dr^qSEKW}C{`2%lLcz-JEQLhY5H{i$Ip_r0Z|xoB+WAN+);2wSuUwO z2M#FMLp;YalxIfyq{8Docg^2}gK@wBZD0jh0<(5#loNjeG|a#p@056X00000NkvXX Hu0mjf54rUw literal 0 HcmV?d00001 diff --git a/emojis/1f55c.png b/emojis/1f55c.png new file mode 100644 index 0000000000000000000000000000000000000000..8dc54f2475649ac538b64392499d1c1abfc62aa1 GIT binary patch literal 586 zcmV-Q0=4~#P)a)Nc@C@vIAi?pmWO69= z9GDpjLuyf#av_h1kTJ&4?sREvwvP1n;yF-bST3VT1O+JOftgCF$kgOGl~NHA;TNS8 zl~R$Z$#E*BBF;q=PjCbn1?~)mAroUYJWm+(;^iy4ySsQIOpMhS3PYTmz!|Y{4G3yc z70(j}ZMD9jwI)A2OvdwsT2#f!0oO&rwC{VA3waLmZs|Ser_Qloxsb>AJ)CI)qA&;$ z5e98GKa)9LJ;r__LKp-%k#LCZogGd_Cpe4%%{WOg#&8g&_=7QqI7x7t0xYJfrrqiC zzuKKHX{vEvi-kJyqp{IKYs0^2ZD?$?aI}R5QI<8}X)lghU2mYZ;cv7ytgbic#W7A@ z!LpA4mIuJt_SbKhmR3Gci>j0hd5ZZw8Dk9XPM5|;i(VY#yai@)d}YZb7Ont~dvSbg z<>RNE?|XznKxS)cnKacn8mMELRj`NS8-7cG+X@zd8)>SizxVbc`nG^K78Xz}qrlSl Y6SlOu7I1D@NdN!<07*qoM6N<$f^qo-{Qv*} literal 0 HcmV?d00001 diff --git a/emojis/1f55d.png b/emojis/1f55d.png new file mode 100644 index 0000000000000000000000000000000000000000..7af8cb7e7c154bcc75cbb93485e277e8af194ed2 GIT binary patch literal 609 zcmV-n0-pVeP)L5h%WfkGY&|A0D3oigwe z9r75|S-J>%=^qFp3R39gL6Q{GoZ*k%Z0V5o@Hn35`|X()gt+SUQd84UIioj|%iYO# z_lyEXPVE5;z#Op7A9Vla0Zv#tfG5BdkkVS?rjoSy!EtvOhF5?|;DuH85fBj5Siq7% z@e&yCbX`itJlU=^B0`HXhT37B%67G*;ro-ys(#=W5Qs%#71O|YF5@vgG(axnAtL-H zBIGh2!$Sk)G9Iy;z;j}vu)PYVI$f8+atX%~+Ho9Vuw0_kb&1^rJ1D?iAXO^laU7wY z_026dx4z;yLaC4^mH;&&z=+nGte56I&1RF=Z{PFr(;63gdT7adX|&eFMl?`#Q%OXG zv-ZE$c=hHTm&$#Njov^+Xb}46yGk2MfIUAr#u&qS5(&*& z#u)q{Ahs*OLKueB4(j}`+CiN#jEF6Y#m)iE%1)IiGW<&v87ezfVv)tpih^}urs4an zZd8aOLpxDqSly`5@O@CsE5))#5wnl6s=WXGU~Fk+jZz^`)=T4crD-w7P&=$s*{;&? zePSQ5JOqVSik1LnZ(GZ=hVS2B`TQlJwZ=^)Y1v&`CJZBD5iqZmoka12n6^goO8`6o vW`T(?3`dR{VUbh2z#=ef70VU{mJ>e#S@y^x|9+rE00000NkvXXu0mjfV^0|m literal 0 HcmV?d00001 diff --git a/emojis/1f55e.png b/emojis/1f55e.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf1144f4fa4d258e1d06f52c6a6a35155cf4e1e GIT binary patch literal 579 zcmV-J0=)f+P)ON8(P*ut&&0Sby}(?GR| zAaEDdTG|M@>1!yoav>B3Y0N@rhBh_oAa^d8xaXYiWQ7R6Jdb+5_=Z!)3Z*Oei>2~C zV3cDm2W!9zu+0hj=B){ixj|5`ffseip)PeWFOCTYm9e)fc)CXW; zcqpJ&tx(M85E1&UwR8@KIRgnvYYav@}9 zYJzehBr~Vr9T`!$G2q$oP{8DP4bKzK;)yUhUSoJDAoEz^ZVRXffM2Ut@I2uno+s2s zDr5#gJrrP8YmZ_+$7L1699ny1W;HMx_&y@SX+Jyr>^57RGk6GRDEODA)#;qBv%2r-3n+vlwI9+G!BQF_~3SY-**zIbH$dKlTsi zHa>r$Hd3J&<_PmS`mD8d4!Sh<+C*_o<|9yd4zxm{6p4d*hkG0K;wPWJe$!fe1invS zb7PYXFgLIsQt3r^=~ilzWt>X7(uRjdH9BtUJ^)u<0EC{RVjex_E{+ R6#@VN002ovPDHLkV1hU0|6>3E literal 0 HcmV?d00001 diff --git a/emojis/1f55f.png b/emojis/1f55f.png new file mode 100644 index 0000000000000000000000000000000000000000..9926b32a914b6c2122521bb0c2ade89167abbfdb GIT binary patch literal 617 zcmV-v0+#)WP)K4&Cx+Hq34iV8GP(p{05(FbM_OQ7NWwy4PO~W8F@7pXDm}vDp>f*H<{6SI9^%PF! zd-fa$O8iu}@C=v+-m;0a|KLG7tRo^+Eb?FGguqTS*Bftc32W2knjv(;uh zySlnKdEyvDgZ-?0TBW1eY7<2F^L$MQP@dPJ_$!{ zXnqM5OxTp2vdWx|qIhK8|6T$V@E({2rqqUh#U?)h**4G@|Ec+j00000NkvXXu0mjf DA2Jj* literal 0 HcmV?d00001 diff --git a/emojis/1f560.png b/emojis/1f560.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4e5753da42d574bd6d4c94112875c732ccd934 GIT binary patch literal 699 zcmV;s0!00ZP)jqO}@*dEEG4K93uMz{Beg#0UUI5=9U~P$`!;kj>{&i4X!w z6yZ<^{zCnEfR#@PFvf5b0zfk@3yd*bC!06$?Ry$mF~(q8791Kea+xHhHu8ldT&MFv zD>lAt;`H~fi-iLOeqs+D$cJ>e9pc|>g zEJ>^`ZRwgCKQ>RWo!*0OGgOLncj9i-9oRO*c6txTrU_kBz zaz^b?)+j)%u7XRfhP%EVexDarf`F`1z;=2Ug{i-n|(za@i7x3qd6;4UJDs z1(onH06`FVNTP@`)3QLR4F}aVH9kKxJ)vu=2?vJ?{R4v?k!atj*B^)hP;gE&a+&0M hDlxabxUh*U{s3Be0K%1vqg?<1002ovPDHLkV1g+0F(Ci| literal 0 HcmV?d00001 diff --git a/emojis/1f561.png b/emojis/1f561.png new file mode 100644 index 0000000000000000000000000000000000000000..38f614b8cc383978d19ff29f80f275317c13b8a6 GIT binary patch literal 655 zcmV;A0&x9_P)fJH>>{pP@ax1S%C;3f2y>gTWNKROnDA2M4p% zO`+gYN})rCqDzquDmXZ~2(@mfp@S|}aI>bICpRVWJZa74Fz+3`palt7{XPLLhK5Ia zv$=dhO{DSwx^V8$sg{k+qA|a^ytIu=1YFScj66C%F{A03F#sZ^B4kNIljr+jj3dNt z%bZ`Fotd;Pvxbm>kfvwk$#);W%8D}BuE^-t?;;+Hf)IkHAP8{eo?zdyaayaxtJOB9 z-%q`;Ez=WaMZxPgZ$HPAsaHughQ0?q=ul(`f`ESnL4YDha3_^S&8y>#@pSs${lt&W z@2leTm&3hJo({~m%MsG|um_?@a1}xXB-I!y&M_iN$0OEgd?Wq2X9WPXJFP(!39ciG z1l?&3A)3wQ3q(z%@|22*$D+8Ycq|G^MW~6?AOX-NOA-hnXyv#r9M?rFLI`9@LP)3h zk6)&RCiQU)S0MlnJ>N$V1h}an2;liXLKbnVWrHz}BliS1b>yCaF%G9%UME{cV-5h@ zKd`}hfa`D`VE@2Ih;0>(Iby7>?AVsMaO%~uyH^6|0j|P%fZe?kPQ5y8%Um$lR(8Zj zqk)6c&-K3kf$SOM>56j~V`8COZHC002ovPDHLkV1n|;C(r-@ literal 0 HcmV?d00001 diff --git a/emojis/1f562.png b/emojis/1f562.png new file mode 100644 index 0000000000000000000000000000000000000000..13f69486f59b3ea5388d8124591cb690733115be GIT binary patch literal 699 zcmV;s0!00ZP)4!9gYl25^uK z5)&6=OdK2xEQUA$2?G-o5f}^{jYAiOL`(!}ay_}JKSznu<7n?by#`1~1M2fIsL|Iy z5RJuqhW)`%0)UKTnvu^cspRVP;{4n?&R}ptk|V<4$moP5M}`2f9LGZ7c~qH}1>1Ju za&%3do}HW+(>1jO7Xz0hM})B#uip!zn5Y*$Xq6=dd|nVjP(>+4p}3EojE)2I5N4^g zHvaNipRTDUD~KYVJbnH)&>VUc^83)y-i8KI0K+gi#V`y+!Go)zW|T}5W!njdTW$nD zr#>#S4<7bMJMVW-)(aleajOk1OK=fF7&QB@AZP5sBR1TrRLV;v7VjMfz_o@Yuq?s9 zuq;7qSb~d-#e0W|KNw1I9E*U@i~kkydBJfk{J~Iy0FVWq2O$Ktas>nVf`M9u5C}XE zmrQU0N`GVN!z$DtyZ9RdKr<~1lv14a_1hM5`2x;EDTQfSaB0NIXBFFaP$=%>)X`BH zsZZ;O-fqWv3dMccwgV%dRY)qiG6lfi$>?w#iYjea$KCduXl!giEytnQ$>?y|spQHO zQI;1rbWNQ(Fb}c0ordF3TyMFCuFfcGIS$3O!~Xh5$o zBu9n-a2&@%;CWP;mId2(;Ieg1otd4S7}Yh^go{CqzW#xGv3Sp8e=w8)Amf;3?Q|5(pp=pbb8tJmdf4VUQFk8h?&yXFG92}N6smM} z_q4_n$w6KSCIK|!$fj1vN$Hd{IX^qIf)gkl6GIWMcW8J_3`P0@&yc9=O%5oB)!rUrd zE|-zb{8(&@cf<}&E1cK1!Me`E&AQ-iXn^47afV@#*NXVMogj$DI(2xu+6&$Qfhk|CY zTMGpj5y8Ph%p%nxEp+JArC{xrG&saX0(G&HaydO5lH;0Elk3sEJG{^ep-|iJ<8aF4 z)b!{?GM$m+Xd1u}j{UUETE0}w=Qh?>%jm-4grdg9nc2ClqQ;*9;3?%H3IaN8#{pw5 ze9X|b<(0+kyrF9?_&E3!H7?G-c>Pff22;Ia0Ew6aIUE8Z1Rb8|!EEfKQZ>-D4`H`j zTW?=Jn>2LI=EYzTPZyrQiws5|Mx_CajSQnND1zfS{KIh^dc^>)LY}NOCkqDGxau!bQp95Gds#$^Em*lQZ?YZ9?s*s9x7D>KK7-U&ym9BdfCvmrKWv|Z#%niT@Pn* zT@Twk6*TQb7`nEc-&`;A?RFd0%8$a>#NF{D=EmyQ9(sB%Llk-t>hFgfk#LDp)b|?L z{$4@j;1BFpYwN?CS2LDbZ*w@IsBv*-b}p-^@y7rtr94DIK!@!(V9bS&8M?N#vY4GW zbj^m3!zuTtrbow<>5L>tQvg&P(=D@BC>8U$jkVP>y8H!aQSfH@^xBL700002aLg!(BoBJYg9r7H zw+TU)h@eA<&`U@MH4Kc%4npQ_b9B&43QCkZ+8#bH`{%TL&!>CuM{j5#L#xk+L523N z?xs+5kSMF2=RBo}g-_6x(>rI zVKEgsH8wFaJgCSi6&3~-Q3?oyPo94i?Dj~FU_-rMgvaFsAp~WVQsj%;f2u!5<96z%JNu;k*~Bs^P#e{r<~W zykF)&&#<>Ux|*-uXdS5$Y$Vv&0G1^<4PhA6xz8b6*n-XOxN4M2pGZsiW*-2q-Y z3D%N7u)n{L)37W-y#(R4Z}pfxQ+jnFK)vyOcZjNI9W)X$7W9 z@h_%Hv7T07F%}ZBQ4*V-UQ*=L_^!5xmDMCnlj1a{NwKn;#ICjnMNW;!W~Z0fQmKS= zaxETgX$>71raxQQ0$+UwHoh9p+FE!$Zd7p`a$7|#e@~+L^A|K#oqP4-Sx+ICEipJE zN&%r~AUY&UfnER{$FUH29%Y)Y!!S%(3`I_jPmByl6*;BB!k|KXS9en=+}7{*`XT@% o9FhyUOng2O8=IM$T*NWI0jo^_#3IJhZvX%Q07*qoM6N<$g3W6)*#H0l literal 0 HcmV?d00001 diff --git a/emojis/1f566.png b/emojis/1f566.png new file mode 100644 index 0000000000000000000000000000000000000000..935ba6791f35687e2d94d9e89a89b5b069e5cc74 GIT binary patch literal 698 zcmV;r0!96aP)R)Pvo@QiWX{?9!7554yv= zDGYWQW3a;xLk|Pl!45ol@+5Pfw3ZEenu4-1B`gig*l0toe~G~+VJRwZ^tXb7Po&au8G^!3J(`DFQ&^SQdm3)a$<0iOT)~zW?}%MuZS>EDMiBa0x;vbj5DsSFwn{Aplg< zvf#Qd{ym7zU-?3O2vWs2m)^G>o-3uU?Fl^-`6>8BvOIBjXcO zq7)qkz%UFAj%86}S{7{EfydTVB{MfOJ*laR2@iz^L+Rl=iR8dTUI?cENI0dI^A!waoY3etezC*X|v zg~h4aL^2gtB1r(_ICfx})m*WV%kFG#mT-!I6HztBmX=pCQ8o4m02M_FCQ0bB9S5Ad z@Nq-e);Cr&X+zgq@Coom)fh`ZfAxXM@?1b>h>wp!2?aq2L6_%wFzZcJ4h$T&+OS)# zy*DqO&KtUBQzpxJ{N&l&kbRt#<)7K&G!vf>MINzI`vF-e_X%(nWL;B49K$jG9%)fIN7e zcRC-*Y$BNgK;vo@loFhWQi8Y|g-@JGBvT};M3SONp@f3yl@ba<6e+?=WR3tBXOaX$ z2zo^b0h1*7RD%CR036tk1JCo&E6?*_I}Ut0vCL|Ya~Ed4iC&rYCOCItnbkZg7IIkt zyrLU$T@UART@MxAfRBGJGB*Y)r(uIpjHT*0B;hM{Zgx!vs& z?Q}Z$S^1Hlp1nPD#NCOSRY!kcADGmS;Ls41kuWZZB5GCx`{fE6zkb7Rwf5e>ez|0s zwT^%jQ8mVvmRB-SHTDpID2fzJlF(&44mfw=}qLch57-vyrI9hJht8R zC+9w2J9Ocz4-9H}wdG*M6@hBGUqQ5i#+ACe(=f`^wU*A`CvY(v3IP=;0 zhl_jePvrg&FO8?CKEhK~-=VzJpE-TXD{KF(cT3C9PIQ@ugTZKScIMdJ?2Jv<{A(k^ zk683l5(tD4wybY#Sb4VUEy6Zwr}96fZL-VtsnO)`Ro+`~n=Z3*kdInxhJ%6k(bN1_ n+|A7OJrl#;PWM#%OL*-$Pg;k%WY6zj00000NkvXXu0mjfFM97B literal 0 HcmV?d00001 diff --git a/emojis/1f570.png b/emojis/1f570.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6ac628d723be0ef0e79a4bb62b341b8c36d9c1 GIT binary patch literal 538 zcmV+#0_FXQP)BMu@vxi~p2 zj-n?gM^1B*9WW;@bj#*~3LzPi-N+izY$)F9^FI3O+o@$IH=hsxKZytZtijqC^z8@s z(exa60%%t89g9a;Wk8S{z~H*D5*of%9RrjM=A3~Sw2`r`G1{a=WM+FJ6w8mDpm!jH zYw_g_x3Ayj-NN^ZF(w1N#$%YulFKp7YnP5;=5%#&%B=flJN*TLS#wE#7a;HXU$O1_`N(4keAf*(lKRt|bG@qVM z^YK*)I%Bl-r-x7qC6E$80G}~}OCU@`z4n6+QG_=q>5D{(BzDnKui3Z^5(a}yAqK>N zn1tiNeDMJoO|Ykr=+3=Z{s6x@b>@rraU2ja2?P*OH2FdDG)zrCqdHpvZL`9$sm>Od znk>;Ic>%uwQs{~wty$)hU&~=U(N2r($sP0@8OBw9G{^LvH!OYDwEVP8@mtWjELWoO z+?RlJkAKjiIqqBNvbz;Rn?+y_aQK@7hJao?T1>a^;QR2n7FO7nxv0h5WDS;)GXX6V ccr3&CFLmpb_@c4~EC2ui07*qoM6N<$g81n0r2qf` literal 0 HcmV?d00001 diff --git a/emojis/1f573.png b/emojis/1f573.png new file mode 100644 index 0000000000000000000000000000000000000000..194c86f8ae8f2543458125d91254763a1afc8a46 GIT binary patch literal 405 zcmV;G0c!qhZ(2$!f-xaJDul^|;9z3nQcZNg$wUVS6CIr} zE=I#boYX%91{fW!n-jjm;vzl(3H4DaCHL8Lk0orEgMOcQIXjMt7S`0cGr_%T$r{PE zc#O2(VjvrhlN_M6MSFWeJMNfB5^S5}l!Hk?Qy_^`40K){_>mnsI!0#)FO3u`$3$wS zFwkOTsHv5>K)H&xgBSeiXbhy7n4+llv+I0Y{k=4PqJE3Mm96el5S(^wDKiShrRnPw zZMT0t%d%|d(UYfuX71qwEFqqIzJH$r`F-sR2BWU$)BNxi!M-?-M&mf5NOFiYiTV8I z6$n9^#2iNQ59=S_@jvqBl^R78r@VZznTGAC63|yGb;CQ?N;wAd;#t8#=}dLF-W~LZ z?$YP5JHNj5X%+-Ua^d}X3^wf&8(B}W$C8ze<<{gT22$lYCb{ahw6@q2MPVz6LQLe! z@@q^~PdQ4d4t4*Yg{-;bS*|I{Q`y dtN~35{sJ(9oxhYq`pWnP>z_5OyIEUDSm+ zK_n2ok}e~<8`@nA>9U)m?)(EmVVF{P)#^fQkeasDHaGJ;+q2*A+gYA74pgs~j=ugT z{j$=)-jUY$XFvnE1FQkN!R}#p449*jZ#2i~5xA^8Fazx2i5gqfj235#V(kcEbos%- z3R^7hi^e|whjYmbiSy3@vvm38rFqOun4VhtV_~XTFEm)GkY*W9jt~PI#Rhr%F)Pc9 zt})s?HMVQl1&m(+^VRAwhTfI*&PEa3ow-~5IsbqV0~kocC5}?5%uuaPbNi0B%jL>x zu$Ki_yabqiEbRHwR_owMYddB}3<1NCgmVd!*ffw7RJY|9Bf3V1fB)!pI)0Arc;u5W z^~0w>HYNtQ4UwiPwMs&afrZ63>v_&!k5+kW|LX0j1H~DoKo%!O| ziTj1I>D=)#d;;%Xe88sEi`Nd-W?5OujVHYA7^kOFN~d3a(Y^B3cdLvyQ(k(miW6MD zvBGcj1&5y2k6RS%xeF z=`tOLC=Co@me9`Eh&T-K57Q-ChAcyt;k_a~0lqdcKrsek-Gq-bo_qrE{)L^S*c7P8SXgJ(}u1X3QiJ8CnZe*WxC7^N&JVhp%Vrt4R8^G s+$4QsjCk)U*4HsJ%#44Ln?#Pk0sHL$AMxf=VE_OC07*qoM6N<$f_*|!q5uE@ literal 0 HcmV?d00001 diff --git a/emojis/1f576.png b/emojis/1f576.png new file mode 100644 index 0000000000000000000000000000000000000000..0d0e55567df5700ccaf5a65792776c6e8501adef GIT binary patch literal 327 zcmV-N0l5B&P)G!eqcTUUOYqZ+lG0?$r9IVZOd8YM5$|9#yQ*OP{Y<7Wt9H$P} zVp$~1_{}{y?4Go}&LyB&DFF?902Vj`T7Y7uT*lF<@<*>%B680r1+;_N^gNhN&j1fl ztPzocKYHmY5h;^68uHsRUIc@1K79mYen{eIC?chzlIo-nSk{QhT@(gE5=Ws(amyx~ z>ZDJlMkP!2c&D-JOOc1UG0(=B>(8-&VX{S6B!}GE`ej>gO_eR( za1ay}SwUrGL&S|01%#~YuA2g?WHn~}VOXVP9=SYDkQaZy~(G+vaxnz)ZVfIDzYxLbTH zHj|v8FJ<`1VByZ?xt7*f;e3(}vIlqJR#!~qa^!ycl=@In7G^7R*ZC1&lY0|uSaQYG z`jS44FI;Ca;y>vg@)}mlpV;M^U1Bxz0)Ey$DlXYFnrb@8>2j|6csS^P!U1}`bxv}+ zGHMtt>IjPUH0$`?jeaA~CtXK7O-DNYZ441P*mhmJ)^zWrC*A0|>fY8`+x3xgU}RXB zt;}sXi=XhM}M{P)vu zBzZCEp=5EoS$>9nM!rnaF@`aQX?9zfqQ@hLjXpvD(4K2n!Z;Fk&^_7{Ws5sTLPBD{ z`da#vT4{5Q@rv1zdAaz#b0={TUx_tAmvWe@d@KURK{qyE3L%na^Ui@=uya z#Wt)Dop&aEH}YfR9sELGz;~6uBY)u=9fv!Q%Sqoh<_q+6JMWytO)CgyL_nuBPUdr!GIl3fs3$cC!}%m`8WIwc z1v!aN7hSw}qlpIOp*qoS94j0000ZpFKR)*3i2V#SuH?%T)vP@Sn1ET$T60(PLo$FH z22uOicuZm~3?c?F_)mfX3dPbnDbu%CmcI;p?%LbVw(p^lLZdKRnmk+_`v5rnw(D}q+*LRA?Zv{d$)<+9ZfC_uEX3o0wv%UUoH;#AtLuzQ)G*6zI ze19lqOp)lI{2i2qUJHmxD5X}HKQGQmA%!zmIWbi%AEnP?uo8WqyE?v7uQ`%Lqh6y? zukkMoKmm%srvN2;VYk)U@@LJQ^#I89!tTpn7`kYrGnsNaGjt6IcY^JQy|CN*1<9w7 U%HW-Z1poj507*qoM6N<$f;1f6-T(jq literal 0 HcmV?d00001 diff --git a/emojis/1f587.png b/emojis/1f587.png new file mode 100644 index 0000000000000000000000000000000000000000..23c118f51ef4750f00f6c0060226d8afd13a8916 GIT binary patch literal 599 zcmV-d0;v6oP){twYeohzL4J zm!dcm3(Kc(kL3rCx`*EnTQ^MMz&Ay*k!*%G_^`y)HO0i5Uo%ICvX#cun)igw!S_X8{4ynpUDdPW0lgnbWh+HY7J-b z1J2=y@(nKG7MT;rl$Vv;7$sx<$X=|L`>x;$4un;4*N$oI#~G=hBj1IC4L9*z%A@H> z>4mrOnL?pZe!>`eh}gD>XZyH|x5cbj!v3ndQ@T(5)1X!Fs(1qz@FFhs?f3$7cp7U- lR-#w_>m7WEuW%8c{|Wnx&X6`z%`N}{002ovPDHLkV1ku69-aUI literal 0 HcmV?d00001 diff --git a/emojis/1f58a.png b/emojis/1f58a.png new file mode 100644 index 0000000000000000000000000000000000000000..b8279e8d82116ca6143ecf3892068fdd1f5ba308 GIT binary patch literal 624 zcmV-$0+0QPP)#RBI10z)224Llx3L>=fFm+OU|zk)U|pYVShyVQ9Q((5q!e+=DYuc)nq| z*J(fd5N9zZdAi`rV+#65y)@>Uoc5(|;M=sZEzN==IZ4?MI;6UP)JtO?OUXH<>E$OK z7zhjm1_A?tfv}Bzpu}mubAC-u{+2L*QX=;ykVfMR#uu#gv~)C}0S#!dyg)U!bx)V? z*c7IwJcW)vm*KGht#}o-)gjALu4O4KOJS|g$Utj_)(YEF81!|6iUkH*yAo{A3{$f& zg*QEJ@6d?9*Yz29eQp0sM4ZB ze({Xtj>Szo;4oLS=S#IQ;;{hx(^P;FY=L`#!z_bvLu)Q4g;W5Fh3LQtHDyj&K~{Jh zvnD~JD7k1v0waPE!H8f)Fd`Tcj0kparsc#cR^FOSNYd$s&r@&v-1iDO9myYOr9;_zx)8N{PGpcjOG#m0000< KMNUMnLSTYLq8XI{ literal 0 HcmV?d00001 diff --git a/emojis/1f58b.png b/emojis/1f58b.png new file mode 100644 index 0000000000000000000000000000000000000000..a92c836967f7ab622180bdc7b38b933e64b4a969 GIT binary patch literal 621 zcmV-z0+RiSP) zj?tkGK|!bffgnK{*tKIt9>SWMA|!J*Wo>SIpSgE?pNJG>Sncx>6Un=@s%Do)x}ve? zZSCy~!kB3=dnz1`&U++8mD|j4lya$nmxDF$f_Xe;{-R%xhJtlxWtd>4dGT^FT0{ z&0v7D@j-rDUrB3esVQw&X0%;Fxo(5QDy3oq#5@pW-*z^G0AlAZICaOlt?kMT`&36T z!~t#F{z_>#1q5l5%VxA)DNlL5Z8IFAHrCfTaQsBHLwP)*y5rEK3fw5~7UyVUbw-XM zgy8((#eu7nx88)ix+AO0X;KRf z>*s$I&aAsf$(Y|yG-`<3aq)$S2!00000NkvXX Hu0mjfU!547 literal 0 HcmV?d00001 diff --git a/emojis/1f58c.png b/emojis/1f58c.png new file mode 100644 index 0000000000000000000000000000000000000000..9b458075a9e6f4513fa3e51f96613c0f28f67067 GIT binary patch literal 499 zcmV!qYfP!>|CtjmJmc}s2~>$ni6UVZi=9W zpq8vaFj{h`gr=yWEox|KXlUpkIYfgQh@6DM!3m!C;(5Hkr;8ixguArQNBB>g>T%uu zLwzzj^Nu}o39~a^hMr3&1Q8(o{3-u8KH1vm|g2xC{u} z9*MYbs&Py^UL@s3o&slS^BOaTOZWVeBMkcyYIZ30isJ zl8Aj4nw%jRf*}}!Aspz@ao`%Q4449*7=j@ff-}GX0}MEQI2^lrEc+^#Nh;esa0i$M zjK4Sm1Q1{_Du%TVx pV)tP0m98*&n>v{O3I@dN#&3Lfm4zUFaEkx{002ovPDHLkV1i7*-3kBz literal 0 HcmV?d00001 diff --git a/emojis/1f58d.png b/emojis/1f58d.png new file mode 100644 index 0000000000000000000000000000000000000000..fcf2d26766ba6814190bc5200c8f047badfd1ac4 GIT binary patch literal 700 zcmV;t0z>_YP)O#;jPzZ(C zg&&|5)IvW&34uUyqZ{9F;YLAmqboNf6?GQl+!h*VXq!w8_a^^)&T)!FNJ8F*yqza52BRjhdFch=ebIEZLVR8Ec-T;;ZPU2Poh zS*6TNX`L@`57>&rsm4<3|K5GW>Pm(GV;2_M?ohpV>&6YUlU>J)@ZPCsxwyT_N8ryi zoA2ANQ_cNc)SRAQY$r+5%dY-v?%ce^UD{}B*74!d-T8;?e2IM`;!RjVvNb;2XljxX{)_psVkP$<63ch7E2?{wcu zQ#1T)hnWKhAL8hVC%p-w6MWfM&T%gtWQq)jZ=F7PxH~8(=JH^ZBuz={3oJeH7^}}b z?M(a=mos6AO8TD6C5eOBLi3f0000&TzjjraJVOQ9pRJV0OGPGDVW$qOAZj&InG!#d&+Lgq7V5od88 zSz0oqGG@t;%9ytB4qI^wAEn!+R0-?-$Nco1xv5!2qqeg?u<{K0aa#CNDpXRxWz4+& zF3QliWtFJK1(oOIH7%v|&nG?RCTA4&LVd8IONu;)-&zV0L?B*bQkUOTztlH1^mrlN zlSm4gWFmjyvVVeNMUBww60txa6e5Tq0(lX4v?cY;4Lxq*rY@zZSrlev9+3+ta6HP` jfda3{>!NlA^Sb;2n{$FZ&p>c`00000NkvXXu0mjf9xK&O literal 0 HcmV?d00001 diff --git a/emojis/1f595.png b/emojis/1f595.png new file mode 100644 index 0000000000000000000000000000000000000000..f6806c9c2dcc128884681b5d5b51610f9abb2806 GIT binary patch literal 442 zcmV;r0Y(0aP)lcR6GTwdMI ztr}>&wUMn0}h0H>6Z zySka1T}WFJ%=P)R3y?w`nIfhU7Peh zB4^HJpQo_i-<;_-tGVB?V?|L=5c!RT2n*50^U;+j5L&hvl!BjxhLP|p?yk~-9|YZ9 zHFB?sL3tYYnJXK$*q6UZM7)J}$W|Q)GjsLmpjcYN!{+Ke1Gilk@gQEu6%k)l%~BXE z?x_E3YWn9y49kd6H$Q|tdcGJS}#7L}_3zoiDd~B}Du#{IEGQGMh zY8ak4VnyO@88dT5CYhv5xN61h+Qe|{h(j*Pc2PF6DgJXy=C%VtY*fPkWxh`|0-+EH z1mQjMOAEyg>i} N002ovPDHLkV1mB04}t&y literal 0 HcmV?d00001 diff --git a/emojis/1f5a5.png b/emojis/1f5a5.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c28eaa6d25fb306d3d517acbff2f60824b5ffb GIT binary patch literal 428 zcmV;d0aN~oP)ePZ+N*!E+;nMT&-Cf?hDk=@7gYkYpad3RHRi3WY0hj*#KKt=~ z+bU02>WL9lWa)BFX2U4*hsN4ae}Y?*j3gOJGLmE@ z$;blIoJ5QjG=hgoft=( z@ zR7Czsj;kY4;+#tX52-NxCj31iVE9k=NB1Gr3k?>fWpwlV61QJu5E1H8RlfTDL^|W6 zP2si$fmvJJb<{WNQl*Vt*ZPLz_2(Q7HOFZ3yN5l$J>|soS)(orbcMn`ZJjaHIT{f$ zv_^a?Vn$um5-`Tl-WlglTCH&PScDrd^Q`0@hJREjD-&kqXAz-gvxkO;e ssU}N5%ZbE+y#v(u{_L5PNx%{K1%>XyG}&07zyJUM07*qoM6N<$f}UOik^lez literal 0 HcmV?d00001 diff --git a/emojis/1f5b1.png b/emojis/1f5b1.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb8e296db4b06e4eb66230976002b14f620c097 GIT binary patch literal 533 zcmV+w0_y#VP)^+&h za^q%NOD|1LhJwTIU%v<=sYtzj1Bd#3{t3WLgDFzSUCc*hJu6 zlnMpOVzqSwW{h+|XEU?KYU@N&F~}`zeEIy5pUFkEOp3(!Z(xEb$SjhA6q}3W6Y+(|)R2fTJc`Xl@<;-M`25#NZ}*vf+Zr0W z*uqMwI5skLf3T3tt|JKy3c2k1hhX6C_8mLtUG44`pb1z5K23#!cb+`FdrwQJ)-d=3 XNB5s!n1M2U00000NkvXXu0mjf;=%k| literal 0 HcmV?d00001 diff --git a/emojis/1f5b2.png b/emojis/1f5b2.png new file mode 100644 index 0000000000000000000000000000000000000000..647bf79ac43eaea41dc77205218560c9b2d09c2d GIT binary patch literal 727 zcmV;|0x127P)hqWM;vER>}J-5t3 z(kU)Z=N2v!+Eb)*$qI)%moyWvaDbiZyv07r8oc9u4__0KWnXCDVRK?B2soE3%Xj>T zJ^n$FM@%;9Ctq${iI$!7mjBC&HQ!Dyjx1#gnU9Sz1BUFaKW~ycT&{dkbd%>@_()h&DeCZGpb_QsqXGCPA zJT=CXl&8iJk(|byiMtMo;y%u}d4|Ska#UtZJWge{#Q02(lovNYkUmz8;?#{Xw7s*# z8z0uV^UF3HfBnn-orqL%Vub0rr#P`#VQs5P$~iscy}^PZ9>lTtp50EDHJa2GkMP3j zDqcM)BZe>@1iX4`iPVjitEh9NURyd% zyWK+6HpB;5H42{V?N-Y_J2!8fI{vtEjd(C1ib7KA9GPsEg_E!I+}u2k`dtrl-5bSv z9AJJ`)zwC$UaLLxJTEPrq`7&ILa{`udUTrVv8Q?PpvP*Xj;b~U`3*dl#4?l^V?I;j zZ#LG~jfgNhI!eDEk#ZjH-noscGUQDXTtp@DfR%j0p37c?6HeWys%m?^9?;_eXUTqU zM}o`jvDsvVJs!9eN%(_0zwC{F6R7gYmQnfHc=;+oR=o4#10KoD8bN5{78}>!CBDP|&7ou9Su*Rlwcr2 z>HeX0xp?);b;q)AG9V)uAex!DB~?>}Ib0k+=>oG}(IkiCLScb4q za3-Q*If^a2NmpU(6Xk-*=}Ys(swNX(p3oxc5C~=xlI*BX$PieLVrkRGtTfsEn&a)m zYlK{f`ay;4^fX->9a4krs7}Zbv_ysknYe~qtFrv)2De9&+)rM_eENXhZ#lXo9c~jI zZ`3g~eycVVhCj%ixdnXBpD}#yEcY&4=5;Cq`BhpZJseNrc>Lj@@PqeMP?Jf9<6)Y9 z1AB7~G}EGOSat-q)*XOvWgsi_X=jmXpwZ3YaYdFgDzRj=-SQK8)=Z409Dw)awpw%WrUMHTsbp(sZ3UZ-a7e2Rs+) zet;1L=#*`j^Vtl&60rzf(g+3Y$asq5x(SX+TU-Ewws;K2WAvx?WH@>9E{GSPbOxZn i1GO#z2h@t<-~0l(60&pW{zl0F00001m+H}H%CyrM#GR!3M`gJ_+knP_eJ!; zsn?fyswXPvr=!OAEs^1od#W>KG-%-pB`}UJ3}WZhrjt(6I-h02jwKuJ~UXFpLwMYW8z{fm;*n_KD_`|y2!;mPvK z$|o)K5;gMi=O{HJ0{3OsIib$kea!r^DeayGaUI_cxDlOZ)9y}}oWAsrf5ls07XFq% zUjaTERjSlXCOl7#UN}!oDLU*BnV7+5CB(O48$s_K!u}A6LoTBihe&vy(r~{*6=`4~ z5LrK!#C!Sz@pYbYK*wALChrl1!-PU1_Qc#Mek#doK7ZOEgrPyTd-1M`n`6jA2`W{n zR1w7zr;-+f$D(+ygXcPUu7l?~OysW7?!~(_T1lbtm1Dc6l!PAKMX%(k6UxC*4y~A` ziE?arc{T6Ln*NA#c{cNogNP^>BV_c;?w+1OM=7?pcQ^<~DNgoh2c?QeEgER8`MtPE zxm>1EI2`7v?<0g@Pb3ntBu#=KU}tNKv8$I6LQto*=J~7F1VMmlnlzHMVA~dcs*^^x zZPALPi4cPP+B$FEzDEc_oz|NC+BzM{PMS$T(?Ci|I+I~_qe!E4CWDlcCR#?7GgmBa z(nu-Aepr#VIcbIERN`ooo$~G(K(IeL>R5Ajq;2Xy-;<>oq6=M~00000NkvXXu0mjf DIVc`* literal 0 HcmV?d00001 diff --git a/emojis/1f5c4.png b/emojis/1f5c4.png new file mode 100644 index 0000000000000000000000000000000000000000..578de13ec4772846de04aea14825276e442eb239 GIT binary patch literal 433 zcmV;i0Z#sjP)EY<1VLNsy5|tuJ4iQz^ccl^l=ckW z1T52qh!Kn$ZK@545{Hb*WRh1OWbp_yZu)(Sk=gwG_TqB!hfF#i&q(_5SD9V(RyMih1M9FH_Y2G`GXT)o0@{XAKO6z|?_vQjKyySS|J>*$zq zLW=6eC5>haTNs9<5iITd7WLXWb+WbZTi9~^C&A*+%&}Bl#b~!0_|wxE?J&fjo5$#N zyV!&b%S(%V+TF$Ya&W*ycR(5;L+$zxd;6a;h8kvGE|5k@;W!S3l@hjI+#`ShXLc1QfNKICX5V{+y`FA4f?t bs50^oZVZGnAkv#C00000NkvXXu0mjfDM81) literal 0 HcmV?d00001 diff --git a/emojis/1f5d1.png b/emojis/1f5d1.png new file mode 100644 index 0000000000000000000000000000000000000000..db8b3524f8ffe8679694cdbf4dce83c21a2b79a6 GIT binary patch literal 638 zcmV-^0)hRBP)=Sp&*zyP&lR+7@ifuLtZ%J+W?%8^OzaDt|3;KNGgOBHaz)Sw0 zd#Q7G&@`iz((*)I|2AkEbzMKe?ZIHMJ7}6++^*~T!JuhO)b(acX?f5zqm<%qZ~E}z z*{Od2&AP7V_V)H>bIy~vhYzu0>^*#n34EWb^m!iTFO!%}{r;fE!?tbD=bVohPU9%% z@HG}Ohod-+<9U?N<6&0XB#H=Yn8BThvWQzaiOaZxlemRN+`$aiB1olBiVb7ml@bMC zVY_g%a1-0aLWwB&*4RcVq#TtJY2Da6lnQU431)&BG?dq)j4HgVQzF)Ls`OGB>8xQ1 zFNZjVW4Mm@jeUb-q*FME>ru*jl#yiYK5AUUC9L2RoWKd3!wN3p8ZtI?lCe!Zt(1B6 zaTUv0#VVF@6@A4OJc~`8p0OcX5eE^NL_&>1Nth%;coKUU>hz3d{El-aUoJZ|7fROyST z(q$aMjgaT@OJO|+Iq0qa{FBc9op$%FDy99y;c%(0>t}lV_Lbq|#}{;_`u+0H-rkFC z+b&H_O&!R2^mecc^Y`|)&LJEc4u?8D5e**w Y3oTdINTGD}d;kCd07*qoM6N<$f@ozqjQ{`u literal 0 HcmV?d00001 diff --git a/emojis/1f5d2.png b/emojis/1f5d2.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae6394225bd4cbfcc096496a7448725f1bdbf03 GIT binary patch literal 543 zcmV+)0^t3LP)txSY9W6#)BPc{bP~mVJQC_yR30B)Tty@L$R_*{yI);j7ka zY;11POeEX}SR7IKlxfl$2+)kB6x2Cpa7GGW-F4Y3muaTOwm3=Qvn`8`ixCk1AR;K! z-^2JZLV~6@-GSx@YoGH4ymg>oJLg(hj#G55Yc?!vSxrqPGP5R h@O8sk6!eUU<~Iw)jtXRX#?}A;002ovPDHLkV1nJ&`L6%~ literal 0 HcmV?d00001 diff --git a/emojis/1f5d3.png b/emojis/1f5d3.png new file mode 100644 index 0000000000000000000000000000000000000000..549d931f2df9379170f91f4471ce4abe668b4a18 GIT binary patch literal 685 zcmV;e0#f~nP)K~$x|zmL;a0KoC@vtJya&y97FP*Q~-cQ@Q2fz+{r;iMi?)d8fk!O$*< zrIp&Pe?kX@fDy5rj7_95kb`h_3pS9ktm6CNgT(|&-SB+q+)=jd_LmBrEhsd z;5U!0{wj=UB8uA>>wDlYFl`W*5$3LeEn!3xQCtDq{L8+4;UcR+;4~^rKl)R3Vy!>C zKk~err#k%`%PKuRtvX+SzW4HnNws=wB~}M({o#GbvcB1@I`>+L+`e`8oc!$JAHM~? z;njbF<&CZO&UWg#LQJABzuMVff7)tzo6q(xoji=He+SDOTkW0gGY6f`qr>Rzk>kgH zvHZt>HsxTry*3!K(i^bn*lay}!LALe$ob;Qa~>@_tPX~(^akuXHl<2H*VP!c3)3$6gOL@Ywj&V=t{Qb}6XS{r2=VHr3F+ye}K zA;J%0EGQt@Od4-6MXOf-4mwBQd*CVH(dU3VF&2bBgsmu0V;hG5WDBQGFj*{fn9VA? z(_Z29@JnD9eLqpX1UMqL;t$cbmaXhtYq+Cp&DV|NM;_AEYBq0$>Krk4G*+7MhXevpE9W=t!k~MFfC94&I0#E)zGCPA<9*t zK*VB%uJz8!3Xzn+95E_F#2_3X#?bcwC;}Tm00ck)IR3%Xx1_4WBH|IJnpe+zys=~O zAYB8E=CU}qK#YBLew;`MgdqDHtE+b<3>HL#M+1BI<}%U(rCI0PxWN2xK9jY8Dk#>)00000NkvXXu0mjfpxW&o literal 0 HcmV?d00001 diff --git a/emojis/1f5dd.png b/emojis/1f5dd.png new file mode 100644 index 0000000000000000000000000000000000000000..b778e702bdbe96650cba219d96df200b2958c1b3 GIT binary patch literal 608 zcmV-m0-ybfP)z4)I>`yC8QvPnu7=;GIgjHi591ZptjZq z$z5m(3DU(Tr*g5JCtcgb+dq9Wt|SDSKJUp2qYQ*aE!; zMUZ_4G{?XI0}L?003+upFb6gV<|PJ!CWu`HOGE6g#Bc!Oe@r%uQEA2%U>xio5CDB( z3E&B+D+uCo_OJomC`xArlvU&E>T*^-dtGSA%ULLD&n4h1UeH=yZ2r!1!Nse7=y~$3gbf&GWyrK{ANIilHq+W8O z$g#SzoR0|kBRElioWH!~wPLY8Ad1Vi$K;3DAwPh^!^I&x1k;m~Y^$z2*_NLu==0tu zrp7-`uCJ|p;sD|Wg-I%_>sm75}MQ2{P7A}-JYqzvUr45%3xy0|h-ER1~x zUEu}r5@13COCW)$@C*_#6p5--2(`f_jU7M7jqKPx`|kcflocV-&qu!a`dgmHy>ig zWj8aN&!6Bq!UYBH4B({~cEc4f^}gdcKO00q1Vrecj;pQipk65lUNPshw(8O84|y{` zrIdyh2lh)6x{mXnwYFhZag7KU+Py*bxYMs!%7M3)*+4`P5iajN&%FmtuI{`@I;G*x zdR$XzhzJ*qRi!%|Rh!2r^}XHayu81K5#iqbCP`v(T?cO^#pRq0gLG1}RvT&+wTfEB zdF9Gm*KYrI_p5%d=UG)s#XKA9X;xA$gVC7m)+U9lA0|msLum*gfB*uRKM$K9=W=+|cK-b{QaSdpQ2qJ=rAR>qeB7(_oWk17qf*3)JAVv@)h!MmHVg&d8 zgTv(6QsKsrzuf*|`-(R03jY8Bid6k69d)Px0000u!A526| zsfP1i-Q71Am)AeZ<0rbX7fgiagQ*LR4fXc`oSSvMnqR3tk^&n4W1FVkmPtP_}mvb?n5ktz=8{p$PyTN~tL8dZAwlEC2-oF}%7~*4RSC z0>lEu0>xq>`SSVGYwzE@;`SpgW6XR?DHUa1FZ3&c1t5@8UT1^zY%thhNG8Iz{G59< zH|IX9bDSX}>QPEXS=WpFN?-w~lE9#V{(w!5Z9Fh|8$<*mLZ-E?kjv$M&dyAaY;2UZ znK%&oL0|$Xv6KUG)0`ldAeJDOAeNBjAi%ceQpsLgn7?WmF}!>Gnu@}HVqkzIj!x-UaT&c zdh^~7gtc1Uh{gH<(HVxde!aOV0BGz$batKT7Z8taCy{P!YKBvnoG<(3%PNY#U=JiT z9%|@xd3_Bk3X4mNg^SRb!X8Ngc>t~0QVoLpg2E~6gXlPUIzvJXD~*EI`U!v#`|ukQ WKkPOo(LGH700000WbcEP)q6x6dbPD|`K+QkLb;#hpubVp;MA_wZ5+ zm0C}qUowXx;xab-+qdK@PGQzOWv!=|j9n3NAFKSU42H0R95+uPEs1aqOZ`W12#d{A zA@*QEdm$stQ(&WosgT_y5{Xm@UoA{EA|48RMG{G*N?%v=(fdzDBD6Okt?uj2^1z_o zn5^75QcfJal21O**{+Suynbe{`pCBOG2Y5JUi2?-Hb#c?B))5H22;scwZj~Fo;)p@ ziwZv-8TPc=VO(n;8_nFG>CS_?7sM!Wi8xnCmUXbMCm(BVpe&+ZMC>@fFAk$Fb5!Qh zLhyN(`iEHS|2l&_d)t*;&pa0~CajN(C$^ZF)-yRBuh8kY=|<*FRPZIk6z-zor~WQw zf44@g*|b%lHsQ54V%^}N-=c;Mct`Vv1^5977Jkn*q#j`a0000(v+zfi1y9-_1cI9hwnDP^T7*Q8j zH(k3$tc7@vw!b?e-=usk;=4;VqUBOs<~Dl%txdcP@g!0oC#5y~IUCvRp=W$uaxa=+ zvvpYN2IfsD#e9~!UNA7dK|#m#It8bucUrJ-di#ZD3uh*GMzd8yd2D@(xW+ wVN4(JIe3Lfeo}K~$Z=Pi&KQ7{KxG^LyX6Z~rmYZSBN~j5%?OfUXipC6y= zCy&O12f{@zdNVOzjM0l;7BPmyq63-44G9SeAu&o63f(B~ADd%s-@b2ukDFO^7kBXU zk%O-E=whU>aRVHh4{4Z}ZVI+aR}0f#-$JMhTEz3+%{{N~9 z3xrO-P(+okOl#{%%Z7A%*W-^x`?mF_W6`M7+tVEp5!1SHV^o*rvK?v1nEu;;OuYx( z5>yQcB64xz&xKP1JGVy?iMYoqV~oQpV~o?@mT|1rcuP9Bw_@*UDy5Lz`kdW zc5S-PV;#vv!fS8KIE(j|zEah<74@BgLUCSIugxzk?&!>Avn?Ca5!R8*b+|^PZ=zD^ zu&Ni02+MSAdS>>cxx4eewKilOrJH5{W_hBd)=r7w8dN|r2-`=_oxgPX%GE0WAy{UN zG$(FXhE(|gm01(2B~-OdYmdib(dy1e`x8^sGxe)K|FUFN?buJ3=2*74c+aognF_u> zJ$%I&bI7Xh4%OmDjA4Z;`-+9ZXRnuT`KO1!{UVV}KGM-T!8oP1#~D6b+M`u+NiV~Tu!jhrRD^oIl0Yo)?QzG$4EOhBKrO0^o`r3WeOd`#e*kC0mDvH zz(Z2(sq44cW)v7>cMaeX;Ak=IWQYxvEIl0oM&NRPmX-hzQYaR!==<1;W00006zV)sa?}0g6A>jiwj?U`7m&GJu|ZYy&pE3IuW_k&$LQA6<1frTJcpe(ZRc=*}0Jg-1;kEec;&W znfaN-&Oh5O&+RL+VK11)$W#4e{E+YnPf*6U8O3QPX@CZ~p`V zTtP9qj0Tegv5rnCJ60yB$=UO=RU*DkmW&3^-5QBxi#FE5GBW`1>r2J6Fi_4lOIzxkAgI*X&m@_6Ai~B zZa~~UhXzmcP#k!6w=9!Ug-A%%c?Tq1?k2uK2785O>5MZx0!$j|K?&rjGYJKjv}TxfK~R&L2z zx11L4Cg2;!FllISPuzlY_H_}xX`J`qeFdxntE%#8HpFE=r#ipFJE@EIj&yoDM#{yOHaUNqFu)_6f8qwvcpH*C{T{1 zgvL8#mcwYwk0K>Ssv;SW`{{485xA6+d~+Ud7zy0b74}h%5Q3QJg_fri?B{!mRM-9B zd~ciM%rZNMPG)n1^>mtS_JX0o1p5bvm}VmZ(`03JjY7f3+YqF8dXDDq1Y&q<#=Sm0 zqDc38$>sC>NeHaYJ`|5ak`ix@!+$;AULvWHl&a=XB}J>VWzcF{QnWgo3Q1LS%y4V! Y6QKG|^1=N7iU0rr07*qoM6N<$fe47M?uM z@jr?dl9|Um&=?5}G!|}g8MnBM#==BlF!@xH{rZtmr;@ClHHe}xkaZ7BHwekV10+!t z2K(Q)(ceB1I(R(~g>j-N3{rN5+jI}1lwH9@5y8>{Df@!+!Wg0M<3p?C znQH$Kfm8%iQSBcheOxArpo#MC7+hcFVq}z9%^_BEI3Ib%;QA`cyQ7%`Tp-S0vhI;z zDUrPV#qj4M!uJWKj}C~{9P%qA_GTCHAGPz(jU1hQ_ZzI?lwE1he<^X@(@S}Jj+2Qg zgzw{I2lzR&fc@en9n~wIZLZ;D2k?@eF6a+`0PtUW=sI${*Z=?k07*qoM6N<$f=$TE AdjJ3c literal 0 HcmV?d00001 diff --git a/emojis/1f5fd.png b/emojis/1f5fd.png new file mode 100644 index 0000000000000000000000000000000000000000..5d4a0facaaa43a239cf7b1583752adec3937e562 GIT binary patch literal 800 zcmV+*1K<3KP)f&|0KoCTpE!12?6yhMg|^AMjz*(Q4AyCE9Rd}JX%Zg*xbP7` zLPDG-O=H@D55S3@kamH?dO-BRi=fb=GT5{U*r1fGP12zxi|xdT6DQ8YED?zd+V7{l zcm3Ww>6!V<-~IBLsYaqKFJ53|^ViP_y>R?hM(WK6tp9k8*H_;1qLJuDk)D~q3Yez~ zE8N=IV88kYBbHmka%+sZp2OPaDrXnZqp5maQN(2d#Cas48$5G#ne`jjXm?vQI~FzP zfSPkav(v!ucUjw7C1p;rFnfZ387lvAs<6WC-S7GMix2SpHd0DLtLs-t=qA0s$D6Ob zi-N+4dh5>(a#IVW%`A;pm7$ajBLS1g3UulZ2_-U8h^sNdV+`sPQd5tU#VaQw*gsLvif$MWI@ zzP$Mfd!75}VOV=sV4{?(x9)Q2t??Q10w$ z^zm_qzE87Mrq!{z@%z_+L{;N4V#zUDo{a>8ejgEyq8SF}> zo@LRsY(lZr1o2b~r(7W-r literal 0 HcmV?d00001 diff --git a/emojis/1f5fe.png b/emojis/1f5fe.png new file mode 100644 index 0000000000000000000000000000000000000000..38181631b932b4a3936c07084d7afece46d15c36 GIT binary patch literal 452 zcmV;#0XzPQP)iMXOSElh-nFE*x)F4vk@I*WoeL9a-Rpf#0Ddi;P~(xLYC3g z`U$5V;*p9CiTHOK!b5n2?-4>Fm&687po^R9bA(XHC$S-w{LR+-XJQ*)$tSTPa}`HX zDyRu`kxx>>(ZM`Fqa(O#+Hre2$R{b{;_o(lu{kXBma-Q*g{V9s0F&#?8K?1OeyvVo znYZ}rKJdC_oI+F{m|26hAH!T;?4qhp(y2omE&v@jP<>!9)Jx4JVT~j~$=72225?>}UdS zMC6eeb065I$IhOe=P%V;sNPjoeBY<#w{a3fgPEbBp$u?EgTR8^qsOkStl~&y*GTG8 zwOZqKsl@lqEmRdpL>Nh>m_9j0E}NMzFINOmA_J*?2PnUuXp-#S!J);X?;yrf`ytuT8488gr*- za7IQ_jE{|x-aX3K<~La^E}av2LBt~T$fUIv&-2J-Gjuu~LYrv%QT7p9BpB#fGXxR0*$po_!4D-?M&% z;8~0FtJ|g3YSCC*r&_BI0&~CT30K9vB7U?C1bZU>SG{Jg4V3 Xdo=bB$C8t!00000NkvXXu0mjfaJn=3 literal 0 HcmV?d00001 diff --git a/emojis/1f600.png b/emojis/1f600.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3654997d4682078187c1d7b12491aad4359e9a GIT binary patch literal 587 zcmV-R0<`^!P)njR_$oR_RYd00_{p`g}!ZsW(ky~p<8mqqybge&J>^nk%? z*CS)q?)F#lj4i+5E7BBUK|y?FXtyn?oiK^hX!B2f=p&3{3KOVnh=QheDO^I$|7*iI zdIfKyo=He1QSZY*nAxUuZw+@hJ;MFo*CmZ9b$1^-fus46)5`T@`F-DPN?Tg%Wuw>x*&yfDz| z0o6>w{k2?2rR?}{j~Fv8F=mbr_vomU-CxTUMJ!>zz{lslvA)?MTD9xZ9ZIFBX?;C+ z=Z_7!icN-rI*snsU%l9-r)%}>G zho9E9r()X`!GwlrOC2XLiP5e-m3Zone*YoIG$tf<4N=lk$Gi9hXHY}cmL<%SrU(lP Z{sz5Ood$fyBn|)o002ovPDHLkV1m|AB;)`9 literal 0 HcmV?d00001 diff --git a/emojis/1f601.png b/emojis/1f601.png new file mode 100644 index 0000000000000000000000000000000000000000..5faf916029c426ac0104f8e5b25cebffc432044a GIT binary patch literal 601 zcmV-f0;c_mP)@yM!1^(>lvkkQD<~?WUHljcMAZyi05gao}*z6Ruy}=WVeq zy|F2mZf@#8+Pnht#9qRnI?18-brv+C2dB{BZ5d<;UFb(QUaLw3HBF+QkoDghki%BN zQIt|5q8?DOF}rEphKOjKM(um z-cz%)bG|yYSIswl1C}gl@X4+Z967K>oos@%1u;fhya$mM9Pgm^7tQVsAoo1!R7EFzSb^ zPfX7QjmuYBv1*<1vFB=5uidCP@yhhnq-9H^<40QT-o8OqAweFQ{LRPCoV#M++V?hp z_^CYyKX>iN9yN!Lce{P#vd0f^*?ag4moI!~_x25{@(Hn*kZawvCb{z6d6ScWD^83V ze>vjO&<%^84BzwWuY$2ZhqZ26qpE`51cSu>W1X34H;lUimk16l1MM0U^)nF?tO;h_#*I(1T4I~g7l zdK|MldFvplJuoRkDkv&K3L@xDt`-VLENQmuxZtYWKIYL(CfFYOKIwUH4LK@Hi`7u+ zb}a}5SP=n6fIi?OYl!;&MXazjka~btK;d8IKsgWs2EgtFk~jp|I5dzR0uB710NOy> z4fatWDf5Ta12o{6o=q@586(&DWQ^(A1b;Pv)Pq9?sS0S#8WuN)M;W{qCSzFS%4AIj z?}fQJJWAHEaI}C_DFdy5a_fE=P4&=qvX-j7+sIW_QB2p#S~S(e(ETtD0fb~AsK=AU z^kteF_Yj_l^5EGdv#}*s{hV9k!Lv!i6H%HP_Yl>W(c?)RK>-Ac3N<>Kt9do$;pw9< zkIvB9dJxx@8*kB64{txskPszwG*{#EC^!NFha|y=Y#rDA&7AAF$WGrk(is!W zvT>d7IE2ru@HJgVcl0bG+fR-6H7)@}#!?mKee=zjwqST7z=6~YHm>)h`aQUQrLx2q zQoQjW#@HaZI^RNpvPgyhb3`myc_Y1gTe)cqTzY;336UTY{Z2Z$gv+PpQMjoDU9HDu z+JauajqdGdMnre?^mM|^XH`5cV;UKPO{dsgybIUd>=f^w-zJ_Bpz_CpS-_be7b4_mBN^xM-Ag>Va~VliaM_lLZP^&dkAPatsztNVk`>GWU<`*U|Dt`zQw|+0#phM9 zOasd_@Oc&LYszRZdxBq1@z*ECHm*sRAH4u1uaJy=CpHd+wu)E_AkrC=n7)i_%cgbs zyb2Cu(aP(8xm0&GYkS5dtc+y8KSqv9AOr+~04pNE2+#+7WR2g)v;zhA-ko{?0000< KMNUMnLSTX}?na^j literal 0 HcmV?d00001 diff --git a/emojis/1f603.png b/emojis/1f603.png new file mode 100644 index 0000000000000000000000000000000000000000..b376ae45e0f3bb47ebd32f05e038763cb38111b5 GIT binary patch literal 650 zcmV;50(Jd~P)`Y>>PKemviZG6}mKdYj{F1e1RJ*mTt9EPIS~IH6FNrbgNC@L8ly!taA)l2BK_Q>f zRmf+gLQu$Ognr4R^%ZjV?Cw|G*(ZcxgJR-7uf6hw7(L+7 z+k1uJ0SV?%((-NfR||LU8tl(|XlqV3lW1G1H`Hz}`|Ixo`7J&6mxpxBC8(k#aOUSf z?cVo}n_IS-yZVQf(JpI%TKOX-=<&F1L z-hAKofycF7zk12+4@aFo{-u|n?I&t$5DzCfPn;%9j8=yHa_NTej(+U>uRjq|X>GB& zCdO#jK*4BbNXInJr$3q~AykPkY)aCP?cFnIrQUGu`W>sQ4KX%lGl>_Ud&JmV&&Xvr zA)ds$gw+s#8r9KDn8X;8`rU?qZY*ls@$hDuo+*%WvxlmzUCttWFEvlPgwfss0T!2 z#i7D%akwynqP8l^#05b`m*nNK0UZU*;{>uER6>a`D_X?6xThu2R=^jS@ZS>5;b|Ph zMn>B_Cj5UBm?z3$3@1FiUsmsc>Rp&2Ucl%DweXDCV=Pz8ha&6VW zOeQGmxODYbUoQQqzmT*1{Y|H5j!K<9cST>J$CZ^EHa546A0E+BOmsO|8Z>@*L zv2AB3O1*dTCHY)djM3d%L$?G~l(bx2{>5LlhT*|S?0IaL-h3kUcfD!-k4?9JyK8rU z&h+G{j%tE3N&=TFH$C(GoBr$@P`!OaW3wie+tu&!f&J|L-Q`Q4n4TIXN|h7h0%2B^ z96Yek#c$4;dhMiFUO#2;@KaK2w|=s`^r`Q@{n(2~28mKlEF`F45p%Cjjr!r|bzgn< zzOO(3K*(gJ;?A}hqy0mVnw}cfu}G|B&&-vyl!@a#N%qMjhlbVbO{;4)TU$*r?&!@Y zUU=>aZ@=-ZLT?Y^65%bvR)|-RX$u9+<2aIfW80neds6%M^vUP4TAIW~oW_QhM9>j8 u@D4r{!%RMxog5k3UDQ@ZnYbXR=<*M$U9-Uca!4Zp0000_YP)jX*v!7rK0y0+hoU^xB`Am>XLYjh z)*lS4dybcr3lN>G?W64W^m%_!uGs@dGTa{=G3Blvb5 zWmefjOhW@7>F&D1!{9|Wt}X?IDFf=91bTr0aH!Ge5f(5s&~xR|UEh*sPNEYv*%dcMW!%g{-@v z_5%|_J!>S#0knf?0%R(kVenf5)9exlRzs4N0Ro^}fdpBS-x9!K;4IK=HDp6Yxy!>Z iVITx50HOy3(|!WzjoW|T{UY!HEO3S`>L zwLc)(t9m!z7MPK*HiC%NXl%Ll@M5C}Db}Kc7!&4nHx^^+e7HNm-KCKABI@&rF247q zf7svInjY?KOXtvG-83c%@8buX#Lqmk!-h0QF@)IPWsxNs#s@ftMHMkYMH-(G_4{`* zh6#J|BGF=vKSiTN{r=;E*0ClrPkEdIUk+5YJOowcQzvgPM!YQ#K%8L z)yDds=+M4vt3;wkMN@i7|3O9n2a%oVL{xxuf^BrK9oEBrrhD9cDC+Ob$j-j@4h_g()kHb zKiWc2Rl-b+Q4AqoSuH8t zSyYwTzD24wR#761;~4I%i2db0;SIct;Z$w>?C#d4PV27Y0$~hOHu(d=?#wx|5tXh0 O0000E>S2G+pLuZl)WNbY9n>72$_|Yst@(nv+?*})12TIqSz30fK)}pg#Ppd-wGFok(=I;-V&uZcU-x1xlK2vjLwa)GAPdBM6l6SwgMN zw%GtsVk*5`7V5G7O1aiF8N2R#xpjpTa+PAaL7}#d6b4yorIR#mY@~}>Ntcl_Exuao zr&S@>`{k3Wdrk~TNz8EZIdz7wyB;OjYHp}D*p>7^CI{xAzXT_7;s7q zM-L!fdJKPI5I;fwlLUG+po1JM>j?(N=9rpZ!c+=VDW;~E7#N#lWj(t-rxt&(rPAj?U>&g)PC9DB6?29K-jEn~fEpK8f#Q{?(Ld%_EEfySOB zs7_!INOQC_FbJv>R1y@DKSUC^4-5jmKnLJuPZ*d1H3DJ*1P6WtVe{BGc5AU$00000 LNkvXXu0mjf(AX#q literal 0 HcmV?d00001 diff --git a/emojis/1f608.png b/emojis/1f608.png new file mode 100644 index 0000000000000000000000000000000000000000..98b33d73d91105df36a7fc030621e181a15908e1 GIT binary patch literal 559 zcmV+~0?_@5P)QC=Fx-ox*l4juxS}cE^V6aQcGy!myf*5M^kVG5AJ!wZ%_W*!-41l{y|&t6TZW; zGhJ+%gid4!H$oDBMI*(R_(t#=zvCX}{MQ=RB=J$;Iljdr1_^eZS;T$J`LsFQ$D%X4 z37-0&B2N?1TTFbuNr>Jif`>?azC`da!G@_U8#_EaG8hcR7+n-&G#CsV9v;cEv6+n& z%cim{b9B`A=FPszWTMsjTCMhlLcjmFy}dsqNupZ4rcx=peEE{8<-|;>bXB{3$I{YG z$H(t&Z|}(ST%PB)w|5*Lzt?Qu)NbEVDqVFhLDxsd|>sw!MDVIymmCGgT>n*)r-)Qu~ zOfGtsViz4eo}a&BI2?KL;-yBTu2QKeoSd9EIOu6Mm(0&!G1I|rDkyB?D{S1pz2^G$ zYxej5^6p(%p<1oFd$*-tubFuz+BB7l3a9v9@B}|BEY#A4g_;4>v xgPBv&&-f*T_@iJWgs|*P7h7WJ#AwGy{ss6ltBL3I&WZp4002ovPDHLkV1m1^5fcCa literal 0 HcmV?d00001 diff --git a/emojis/1f609.png b/emojis/1f609.png new file mode 100644 index 0000000000000000000000000000000000000000..3685570b6810b48f24084b2338a82effc9020e40 GIT binary patch literal 616 zcmV-u0+;=XP)X{1W#CT3{Q@Ugnq^k9XzFbyYCX;w=%dqX+ zHd=U8bMgDz-q>D{>rE3vE5U>ndv=Y;=dwP?SYFw+_vzj=B1%N9mQ0aBnkGtHRj&^ zC7U-5YRl)cjvw8twI6)nI>*(UBo*%%#Lx!W2>+>jrv#dH$MO{i(M8eAe-!d#%yLZ05xDwm%6Y zcvDATE^9|=qlnR0hkP)()20pm)|e%JlL~?86Kq9U$4FtF4<~nefy;tp1c|nwj`uKw zrWb2s1_wlSkyNy*j*p37;|QUQqGu|YBhC_j(d8fV6R?PlXO21m0000S->P)Rd4KgQK@USg4bHD;6OZWa<*D*7GnskfIwzkEDus}2`vz^44I{$@Rf2_Fi%YD^aLq|4~Ry=vc_k}@m zs-~-ng#;yB!<@Dx6`MReWbDjV!Z M07*qoM6N<$f}#%(kpKVy literal 0 HcmV?d00001 diff --git a/emojis/1f60b.png b/emojis/1f60b.png new file mode 100644 index 0000000000000000000000000000000000000000..bc78070c7b42254545d97fc43951120cc6e9aafa GIT binary patch literal 642 zcmV-|0)737P)?&iKkrxVLX=QaPfSE znn*Dk7#shLQZ74ARTpu#p&S8BeTZXO4&<45!ji0_!XQP3L3RkBrJfKw3i zQ+K+Qfx&59S96%_Y6b?UiP%x})05b7(*fP*yBTR-@deZgBdF@DD+_r)_myWa<~d^e zkkTNTwwak<=fRU{aun}PL)1L4(A?4S2b)_l7e$8u5AJ{OSpJOGj&y z<>lIe@&an^Xkr8FxTsG)fBZo`Wt_p=D7jl5b*x|=r*TVHE)<3(U!vjvm9T=xghis2 zO9~&MkrKcB_NSkJy)KI|KU-7y?m|;a$>Hj#LytTlLPK(f&N~_D7?#@Yj`h#CocsEc zh%hu*A`lD>mK4r?bIJM_TiWf8t|c7HiBrh8ukD!FKWypsqp}G7o`0sQ@Zxii`s&-C zY+u`PaB^=>oXYWnu7i_%O^jD$5el77(n(1ni;!g@BD^#=ZD^pRXCX&b&kviIZT`4z zWY3^KuD7hbaa`f-XBUl)mi@JJ+tW`@S~zh?Pc7G{@oY_&h31tTPQE;2VyvQY@|79i zZ(jEJ;c;`bRsC`_QP&j_=4Wemo34(Uu8#T-%^Vx3>(jh)!_C%h2gWN3SAV~0&+wq? z)IPgx0YTKEgHRNm zh5m}7d!c_ohw##+i$PaGFgi#Oj8qade{RoyJ=?cO++fP=^^#9_9?>G2?v8(m+QHkM zSC0zOsqF!LhhO6B#kGh7e8ZTRAcr*Qn~4j(2K5Fpm&GzQQ&Aaw#kC0br6R|QYms42 zJQ3R@j7LBWzreiKM&vDqS&U#RLMw0A<}6cH8GHtAA&ACEigN_Q9{*(|r2?_)BJC)! zlP-4B1w~s{qO_>u&wdYu$M!%tr6ZL`cURHfRXS36P7w%??a}jeb4UZ(@Wd{`L6^dE zjLLc^608%=?9dd=>`?vFfhjBOfg;Y0eXRZxzN`k4_^kdCu?JfiPrwLb)oD^rjo#UH z5QAt#i=^fZ(FQP_C03nwG>`*E@EHRiKmVXJsEPMDI3bH;1-Huf-vY(5$CG<$L}nPIe6G-<7v&I~g%nWCw(6#8)+0xoX3l8dBZOJZ;~H8zQoAzzh=%`H!Yqb~=LxOk zNxP62aV{@3@`Ajeh@MeI@`Ah|FEsMP+`YfHgo$@2KCg6zZ(5r%iIKEKt(rL2S2ECB z5(0n!lY6k9d(!-o?BXO8$Olis*prwXtvDzIrcZb4sHZx{UM>6jlU|GW+G6D7(UOm6s`g#~wAT-> zG~Hjzg~0ew*_olT9Vu1mjW|S@2_cw#=aly+PWiXBX-7|1 zkpu_C+xUtgAtJVL0XML%BMH>16}4(b671V1-oSaZh*F|GE#hbRmT;9YgSuTSSRl?5 bmmKgPs5`&IMD5Xy00000NkvXXu0mjfzFak` literal 0 HcmV?d00001 diff --git a/emojis/1f60f.png b/emojis/1f60f.png new file mode 100644 index 0000000000000000000000000000000000000000..1bfb23cf7e89b6e16237178cec6b2bb745060e5a GIT binary patch literal 576 zcmV-G0>Ax9dRL~6HQ^x_i6F^V;Hnc%hkqMtBeZz(R~h+vRV zO+-Z3G2p`uh;E3R67*qMU1hCia%#cD@^g(ImYdSH2F z-Jyf68XY>=YI$YdwObF&&Mm3S2&D|gzn0hi_{*Hj!>4q1w5Zkov$+{1NwBS_JFllZ z@AS!!-TZD!&*65R2U?053LW_t-;A7be|o|F>1S3eHE9}L{kq@M%ZeXJ7`9fM~aXXs4$MCcI1Z*4p~Neto=1)Mz3j-XUB>X3J{jl|TNhSXuqY{Njq= zW*2>N_NWFMxRc=##&O9GS(fPP$m#0H`TX=JI`b`di{p5d5!8+12#V_3TAQ`CHrvBJ zA&ja^1O!zKVGJAIZ-Y2S928?!j55)-D!#&PVu?^h!5j0KAl@aE?eITmCZv)x7kUi< O0000J9Fd$* z&?U`1zcDTQq;5dq?*y;g(cIJNZ=GG(c)h;4XNqT>WxRcS?WydOx;Y_7xmerMSb6T% z`{a!H=+4Eao=*QWK;S=k-Ht1J*@JgNBpm1i?BwZ&$+osjscmf+-7qO)kAwq#g6xwz z$g?aMnOJ0Sc%B_SOTmtwWpH?&k%>htizBj6Y8QYS@+`|@Z9PrKFxgTK3bs^(jA632 zp2o5)ipX|~2!f5amRi<+r14ifDezZ2xm;g`zuJW$*eGTP6ri5G+cz(P4X`*OiUJSr zUI&X(id{+RG5NeyPu|96hVRKV$GPBhQRO~Gfs)i?Vx_Yz)z<9k1q5II3LsKiu z;%@dgi=Vb*J)QnmN4Z$b38=r!xvqhwh>|i)k(~9-J#%(p<4sFrrN`@bgaCo#?Z*?^ zSl7T(B%Vm?98#2|9-Ew59gB`8mMQWF>?PJ6RQ_-m00000 LNkvXXu0mjf&_f~G literal 0 HcmV?d00001 diff --git a/emojis/1f611.png b/emojis/1f611.png new file mode 100644 index 0000000000000000000000000000000000000000..0c716f8fafec45678723c6000edb935a86914542 GIT binary patch literal 607 zcmV-l0-*hgP)X+NNFwB4v-P23De??#Q}CJqHh zFyPh}o?M>Q{aP;|`8(G}s+VgW6bKxGeYVXWA^5`v zn?1T;Ygd74vILAxE%9|NN!E!Xg^{5vWZfTo%XVg$tV*Aop-?l}Wa%meHr&2`37Z@N zNGZs=cjqcLIRb~xJ_(rQNhwgIK#>9|1qD(H6e&=oKuW;@rfSAh5xrciBX50UlP|F( zM>*$rbJlZ`0yCC+qm-2t#oL;^{eZ-=8c*`^(>D@UnuL`mVWmk}X%bc%_o-sMXEgG5 z9!-B9Qb(s(manz>CWC>}K^*n9Ug~ST{7clZCP$}NmX)8|zj*iId!(^NZ^x>Wi}Stbu7tiLOMxdiq8|SF1%#FJT+D= z&5n(hUPn#ODz2c88~UVIpDWu_!aUwZwBH0KFo!xWVp~VjQ^FUR_TM7rFpe4Q6nf?{ z?f;v`JXyjN&g)oP|I1g)>p}>gIW^*`u}5|NwDPBKf83CB_QJDA9UC3eaUKf=c@}By z)|UF`Uwiz>A(h7tTD*4C?%k%{yG@JNZmJwPXmsR|`e#elZf)sEn2jIKo%#snhYuu& zhYpA_im`C4I;2_|6k{Q!LI{Nz3lk^GP9A?mj0M8sgqn_r2BOWz9gVGB_nK|reD|C2 zC(8y>;pbmAwOVbBtzDaqJD#7cl6BRRK5x8y(tYRNI->|d*V}KNc3;k!>>mYIJwOqH z2MHnQvy#YH2ow6WT5ZceY*_uZp{w@9u*s)K#8}ubFD6{Z1tcB!nr$C{dfnQ3LwUHQ z>&xpaj#r1h|IS$hsj#O>xSX&={)8~6dYSU}UiYmzUKXUIEbiD1tT-oqvG lEa5eb=~*E!qE5J>&)-|}pP|K&n5O^$002ovPDHLkV1jMf9O(c6 literal 0 HcmV?d00001 diff --git a/emojis/1f613.png b/emojis/1f613.png new file mode 100644 index 0000000000000000000000000000000000000000..5ce1c1181d25ab2ab05c028ad219bad8149bbb70 GIT binary patch literal 590 zcmV-U05c{JhZL9!`#*+xj+ty<_YdVkyUH~R8ZK9Oywd&?cT((w2y1uX8?_+IqN8(*o139kG9|csSA&Q_M1(TAX3`d_E)h(Z6DC6vt9mRKzqdV z$`$}CY8kWA7dGUE+S`4N}*stW_zlSoHPm;lbl+ zwge2O=fAOP*~E_Tr70qD2^1l{L{&Q6Ovf+-21-GxT)}5ZZr?b8-zQN@Q7YSbNuU5k zaT$h=Vdyjn0ij?UUP1^$K|dY^4ao5yPF;~-TqeJ`j8j*%kdvTBK@0(sCZ!ak<1@@J zEYWb};4X%*^df}7qXueJ0<*vvkfzD5I-E~NxqA5+4aF4;yXxTgNj%0t%t{crMu2@l z9GBlG=?n+?t1}#AgDGGHm&Q5^7z8pvjn-;F1{ee^ToR#ZvVdXWA&Mao2_V9{0+0ih cMKFWM9|y&+XcenOF#rGn07*qoM6N<$f+M*BbN~PV literal 0 HcmV?d00001 diff --git a/emojis/1f614.png b/emojis/1f614.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab4f722671d7e31b63e8bc784ee2de9fa5e38b0 GIT binary patch literal 554 zcmV+_0@eMAP)p|7|vy;9ttj-se#5wnD8 zqOuP0nf~3{QcU79vi?*;iD&{3aRbYmVl63VFk)+2jN>rQVL78^5+mB)efXlfQnRVL zQuFS^7ac}$k066ST+*~2g879dk7wQr!EYh(c;>D7g-_N)&~^!Z**g=Z+ZcTI{Jlp{ z-l(puxpKZ=*Y<5TB}vxFWBbg#{OIZ2d)3vt!^NHq)?e^xyLY8N ze_b{_(5sM7bXbfri;}ioI}6T@9o1>@!~y>nW@ExM(Kupl)s>o;ua|`2mndSWzgHoj z=ujt`&Y+BkwiNkWct9w}M4E2k2u3s&@`A?fKb6%Orh@o>V*4*vxEvk s?6*+CHB4cgXcR>)i-cKB6P0!N3A$XLotKLg9RL6T07*qoM6N<$f= zT~luZI)@A+W`=?j(XqgAWC0tAEU%|TeH-w;^m@+r01C%D2uI>$-GRlY;YfU!422A@ zr=)25P1}U7sSg2}lgVzEv$?B7Yn_^1f4{nsvXs)|Q+#}JxYVGy{V(42{nr1V?mDy(0rUSwaYwR}<_eEjG83;ApVAOV6SiX!u* z`z8qT84e?6hV*l4J$3?wfY|yrKYqqBlNJ@_Dvb?Q$dW{kv0{eg;6!v3*vBTZo#NBi z?<{^>qo6=Rt3JbNrvo9d+Ye4gN0o3S5xd(~dEV`EHj|aI4!GLj=2BfbT2(QXguRzbrvdhWE2)SkR(pDwQWsz_Rsr`Skh9+Slvij zQ?tK5v^17gxLr;!AalI^a3nt3*+1_OM-nC(5_tlBp6h;JZLhAW?SRf9!&osx!O7@Y dU^udX&0h(D*FTe>Mg9N)002ovPDHLkV1kX;B!U0{ literal 0 HcmV?d00001 diff --git a/emojis/1f616.png b/emojis/1f616.png new file mode 100644 index 0000000000000000000000000000000000000000..18aa58f9da3d4dddb4bd0f6697b3d61694815ee8 GIT binary patch literal 680 zcmV;Z0$2TsP)m0Qg_cVW`w;-<20!LSg-=)|dfq3FiUJ!j63J9r?a zw&p3jYHO0}_dnyz`EfU9?s-%wD*1@0Gl4-=ef#~awZGTB|IUk=($9HP|648EnqKf@ zcG0i%E8cs%EkPKJ(WB($_By%Myou>0Gjk7w;C~@7Gxxy6^pf0aUROt*9Z^q=1|y5|7*~`G^tO7Xqh3`UnOj`(<>)OT1R(@pjovc1u%arCbhXzR=xwzlTul%% zL_sRE5>Ge{8EsReQpiNFVaC9eMO) z1RKg~Qq^iw)hcWdMhJaE$O}P&;6IT(KE|hlL87Bb+c8hLij2sV3jYEUv+nM-Yp#s| O0000e9F!SdQyE2|}QOIzyZ zmbR>{mMpK8q!c1_X^_iioXBNkb-8TpL@t|=(j7~=b+c3MLae{9P2EVLNBfnFZd`Ad z7NMj;CT=n`*ddqAIB|TO$YnEz20LWpCMnwy=KaAz<;eS`O|RZ;*xNsJj)jP13RUN5 z$v3-q`xZEC8R#C;s7i6!bPcuX>hBB9WlZ|)u$ j?j^B}1(GSkx&}W1VxM^?h0xK500000NkvXXu0mjf!mQyM literal 0 HcmV?d00001 diff --git a/emojis/1f618.png b/emojis/1f618.png new file mode 100644 index 0000000000000000000000000000000000000000..424d741c4bd149659e863b7c05100931be62c701 GIT binary patch literal 701 zcmV;u0z&i zh;Bjmf?Wy}(mHeqiUQGNi-@%Bj~4yMU__=)#r(53x4rGxMl&Y(`G}`ojjSSQ2>7jz zK!w!|1o$TcghBP7cuN6!a8D_D77zm30Lg0AKsAVV1ie5fV3VbR0+a>x$LwUsK=`{1 z^$amLA7>2`=m7dbS!8J-01+CWT5P`FJ%|v3){{FZS?^{=DwQVXWGK)KA_NKv>;l@J z4Mk`@RZmsWN1^3}!;S72EGN=<*PEO=Qp47ukE}Kj-TJkT>Z`!s`fcU-N-T!ok2CUl zlC1$BLV%PS2lfSNZVXaU?&03!4^(d1fY)PcKt=+G$Wf5VDDL-t#EvJ~UFXMN<{@V? zy2z{1aW+?Yxpb}()0E`3XuuZogaEfG(KLZ!NOETX#JPEQn9tv%JRJDMhi_2~mrhexwv|<3DeL~O0f`2Qb+?L6xihVQdd>R3e(Ur4V|3C*gBlP zO5$HUe8V? zjUBp#5C$FcFrlNMiI*e_yx3rLspcpddz;K)EsJ`du=wztUj)OMzI{`f-gFijbsNZI zMzpL!>cZJWc6Hz$uA{}T1~7n|f?3=~Sxrh^8ZVIbcP*I0aZCud5_R{H_3y@UPmB`c z2qyi%NsJ_f8%X(oDZ-5eSq%!sk_WjZ^9$>$F{;LBeqr5%+>%1Eq)9eG#;zF2&8-?6 z?N=y%wY0ivX?0VfSTZ)+FE_U;MvXElO)ih0Ff`ch=#hiIl)l?BaO|+I1MNcan-n%M zpe6){2D|O(>TK85*{)iRk|fx1X0S(-jRbjruvOmn>h*h1pRf7+<(oa^6XG-~_Rx`T zbLsqXAp~zfeA1+X>4dO?S$imzw>^3G#>e7U!>4*RnZZh;?hf*r>`%9uyf&i0uha6{ zM-3KnS4|=yC}RSTP_e62-u5#8PHSso_;in&3LfJsw$!9l{Zz&+!6V`nA-g}_mbr5A iB+&-)#Az|CXz&B55QFtC{;#S40000BLZf0tbbS~MeC#QLV4Fry z;a>b7)`L&6wO_FJUV)_SF; zH{WHy-h7w!O3fFSW-TnPYKw3#Lh;Y_4d2Wx`uyxWUg(N#)LPOs6$F7TX_`8GDChL( zfcM@$?#ml@^dIYX=*8@4gu+X$UQpM3bHEjPaY$=^wndWW(8 zQ>KQ_>uB9Wr4ZQ+1#@qRH#+q9+7M`UHtBQvUN}8*XU^6j7YCIxp2;JeUVngi4`(UyH+1o-T%F!uRqKCcevk2 z)Z&$umcZ4B;I623-N1th&y#v4SL3xMJFeqyXxk)8p5th~%ZZnJtgJpFu&YEmsV%fE z!5A*1WsjflJ(SC4eD?8Mq*}O)F@i)}h#eIiV_3^>giuazQj7dL0ezy#5lgklK)n~DrSi*gmyyI z*Tj1MLyo&h(pkPsS3hH((L0ml zCQ745(t;2;>K=R5?%LaL+yC>>)y2BpZi)@e>HFpBo~uJ3%M zdWAN^ck$W7yb*j=qd|A1i1RrT)<-euZy~^9QTh%aKnHe>^j*uXyRNo#On#55zUXwgGHx^b)&$pV~cn-Ddrmt+vy4PJf~C z>Uo(-jOI{5l-b#Bxcl=Xzdn2-r9{Z7_mr)ythjvj6O)zCG!ylnahZrpL|LZUOuo9k z=+DQ0Yc`Yj$A(<}Xv9ImA?1i+nPxM&_VI}R;!%xe^4H2HsVS~i6^mE=@cnmUd%Ij9 zt}SR8j#^^O8R#q6lgkCK_jlXV{^VPl+X~(9(Re04n%B1RlYJ4(C<)xT`-kJl@_LVV zDs**-Z8<{2&hl-W|9oS0eaq_lwu@s!Bzu-4swheP_WM)!etGPJt}#8aO|7|Y&nuzB zTD|5@?Vh*a9B}cSAuZKNx=ENqymG1J;nIq}wxV-K&U(=UOOAFOarsh7OC2|Jg!`D2 zDW2%^<Npd8a z8fgNvsCNu*Ijm!FOQw!l(gbQUQLwK@x`EmJ$VR2U+CIMZpm0_ue{ORrKeDkvx+R1~ bf_?u2*%-RcU4NN-00000NkvXXu0mjf2Es)@ literal 0 HcmV?d00001 diff --git a/emojis/1f61d.png b/emojis/1f61d.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7682d37f1ad477f5b4cc2acfc4e13d20c4460a GIT binary patch literal 628 zcmV-)0*n2LP)%xTS{FNCavcnP$aXWb7IsuP{ z-Iw?e7_K^T2XA`t;4~gI5O>oUrf!&#Kmy4Ej4i~JQW$Od{1$qs9E`pfoB#BJV_q!v zW+zLhvlmfvWEFFSvsln3c&>6=!eGJae3y0`TRVRHbJO}( z)!QQjdY|nIFp>CZs{Ao}(&<31Gv&_WrmwzRv{QXz@JwD9^5r-8eDU?~(y746YyJ8P zIf+DEBo{|XrK_#fz3x%D{I@bnWXW{!&+7Y%%Lm{-Cud+*FV<1+4-uILBihQt`Hruw7(j=Zr6VC z@^G&=UMXss3-B2x5nQ=+*8P>o3W>aPsR8X4Ejy7-xqRuYmIh|yxPzM_&z$OXZQ^x3 z-5JOAbZ1(#2uN&yhvZ6OMfxvxc*{JUm>Suo^V1 z&~g7jVGx0)g_k4}I+%e*3JFPsV?la RnX6rmYz&Sx)eIO$;&}5Y$dSqM zxGKtK2RkRU8np)y{F`vttnIzsH5aDlH(#x9B@MZg%e=WU?G+YjomiaIn0(#q9hlEe*#Jl0=>bhyZROB<}dnqgVvRs*kGV*==QlC$YEIP)XzYtbqVbv0iM8S2 ckRHP1H~yQ+7+OjDLjV8(07*qoM6N<$f)vO;^8f$< literal 0 HcmV?d00001 diff --git a/emojis/1f61f.png b/emojis/1f61f.png new file mode 100644 index 0000000000000000000000000000000000000000..9be2ad0cb85e072524aae5d195a9c5e08b24e9f8 GIT binary patch literal 606 zcmV-k0-^nhP){L!+#%=_uktJ6O`ZW^3ZI;PZrq*>^lIzEOB3 zS1JtWW>B!NiZX8DS3T0Hw+`vZ;|AVG#`B6OqJ*#T5q7mDM8q7v!xdy6H}-7Q>bf>+ zb&nf++ESE=^T-P%1caNI))r$l|6|47XE5$eQ`PTMM z^6d}5n=eN}5SL@#=|}to`}7+js6+uRV11@C)*}>>1+sDJ~<;=dw~yl3;S;g!AVLHn-~XxvaL7a5=$y+VX<~&YnE#r@Mc+{@J3{>b9=cwQbjK zE?W3`&G^`m{NR9&nFJ$x+~0ht)r!{ts_R;>)wNpD{mp;$DJ1$#PK-D{e9-vVkgoBu zA;*Ugnw%KXFGUqa9TR7cnK*ll=sz#NIOvlP&lB~lCMfF{J+2nK9 zDM8y+ypCyY#n%q`^y-vgUqqv^=b5;Gj|mb1!7eUh7R`Y)BX}ktJCM=V#218%gdJ_E sR@AYJ4+OI)5oS=ZuZpr5=dh&5zk-ag;;M#C4*&oF07*qoM6N<$f_zjda{vGU literal 0 HcmV?d00001 diff --git a/emojis/1f620.png b/emojis/1f620.png new file mode 100644 index 0000000000000000000000000000000000000000..9b42a9a3b2d7284b596c4c499d109786188bc72f GIT binary patch literal 534 zcmV+x0_pvUP)ifcz`{(>&qBL}HzEnIkgOZjS)=4Xb zst)mm$v$m4Ea3*a>{mvaa1#%(h%K3zR3=AwglT`*g_}5u%lH-%5SB3Q-%VplCc*^f z{J%L&M3_hH|HY*9F=k}meW-i*_?4l79uudF%40``;HNa@^_$PCFF*S5so~nCQ$~jl zBg{l7$&3sZ%w9dKC*N(kvf=L9retSVva{>%+NR~ohMs)4*{f%b3>LJNVr@|r^!MfL zB)j(18{2-VH@5BBNp|)3<#dWr(_y$+5CT)sUO zWUyf1Sk5mO&yN`|4;bvv+b>;@QNaRYnSkEI2Rz-VslES7pfr5Mxyj>#eG)pF literal 0 HcmV?d00001 diff --git a/emojis/1f621.png b/emojis/1f621.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2776c662640d3cf195a27544011ed810d2a224 GIT binary patch literal 630 zcmV-+0*U>JP){>tkHFJu z_DG!N*qh^*t% zg~ml{8A4|WofrlY6kNcMOm^FOIhK5XIc4V^fhS$GoyA;wzQ-2`9#(6*8bkpvM0 zbq~Q~Xf_5N^P+h2Fb`!C;SxM3k>Ol4|DkivO}F{IeYOpzM9(AUC%U*m;clug^EEYC zdjSVIVIT-hB3Pn`>~Y)4QC85#KzRYlMNYs8_)z#kJpqy!Bq$745VN2>{GSQ%foKKQ z2P8HA5@UcTlhs)aMF>nS6N{fv5R0D>m|A8r6d{w(t|W;X~~?cn8XC9y9voO3qYc|6!jiPR{P z1tujB0{q9i_2ELIi-Mz8FZZgxB7m*k1ZzKbX}?}a5kIJq1chPb`)SLy6J_y`m$KcU z>t+WPT7rL=2Q`90BPY3=se20OQX<6xW(FA$9S*)0gCOkPthDX=6CKRo}MIeSv;}2y3 z-N0Eu4?daVUjG!U9y|-v**lI>N(Y*N+kk;hztZFZ#I?C-;&|xkG<}b!`1oa>Q%81@ z;m}#Jb@N7^4}Ic(|1|SIlN7p*s;o>|0IFL8UZ4@1Gt0q&eN|MOZZu7>%HhyCebURj zPxFL7L`Z7{u1g>Q$h_Pv>U<{uQ(3-&%JL1QNg$vBer&P$B12;{%*@76O7Sy!x0YF zZsEk?oj9Ei1SwZ9`H9CD8Gk!VN6!e=rki7jwqpxRAP9Ksd{rE+-;SmURwa@aOUnww z>A>Z5;H@cT_l^?gq6tz|P=aa!aV9^{DM?cb`W{VkCp3X&EwgveCQdfgAaxB*6XfSP zu~{HmG++=^8*B6g-_Y4RPG*KACp(k=7w_rl9$`Jz3TjY-z;*$s2KImc_LJ{FVq897 zOKEWqLI{3D7PuRlR literal 0 HcmV?d00001 diff --git a/emojis/1f624.png b/emojis/1f624.png new file mode 100644 index 0000000000000000000000000000000000000000..35659c7e2d73114ce0bcf155e4d9e7f1aefa7538 GIT binary patch literal 727 zcmV;|0x127P)IcBJs*7wQd3+tIqx5w%$ zdSdl+HUcsJNP&86L@t8#QO4e|qKXnDv*wEN&j8(k#dNKpTg7kyxB}(~LXINqcuxyO zm4dnV?!(B=>$mzoVTiSKJ3J{{tA?*~=o%uYmWE7t%wfr54HPzQpX731!l zUpR?-n5(&olS>ERr3g`wb$_UW8E>13AAeS%Dxh{_I z9~)%90y>y7lpbU9X93p>Fu>~eMXYXLgaKSHVDe{yq4XI4m<}6=G3Cv`Fjog&W3-{M zAxu+4n35;YQ+)dJ15rZz(gnm9*Dxh!Q>JTc8#}hN@|!gm(UX*P?_CQ)o)QtEoB~pm z5fQX<$i+`{?M{+wcar4dr_stmM3^C^Kps&hmCo>byc6wvB-$JjZ4TP^cr&q?R64_S z@<@TX1Oy;xBRqH&qGi=yD!lhBX^ya@IYNc^p5~Q%cc-ArK|+1@Sm+R5RV3wxnkexp%DdR6 zmMZ?pn>w<27pMaZd}}`6oTEuQJBmFKNkkAi!3@3~h!ZzKbrL0!GF7y(-9NegUFk|Iyw;faU-I002ov JPDHLkV1htgMR@=K literal 0 HcmV?d00001 diff --git a/emojis/1f625.png b/emojis/1f625.png new file mode 100644 index 0000000000000000000000000000000000000000..c7207755702afafb35f75ac96fa8ef2fbdc118f9 GIT binary patch literal 701 zcmV;u0z&8vLY)YdeS1&MUWGwLiCWzASeqZr70hybc&Y%2%Ut;e~DebD2bRGmu z7U^z1!XhV#E})S#0Vw_?0EMoJ)LwVqTs5dB5T=YJJ;d$&cA$}r>-XO(a+<7&zw3Oz~wYZiMecKAnuX%EOQewrr?m{9Ai5xgDV$?!roPooX|q#!&yPj~Pm-NBE9XXioj zFG2nMWb2pN)Kb#ABHL+j_hFea&UEw>p0!Bpdp^pswgx;dgB(fVvOZ+3+eOA?avAUE zSK*lGWk;Zf(&cW_Lf@l=Cg$+CyyUn74C)H1$T5*DCgAf@SZkKNOY(n7;1bXT!eo(l_dx1VB(-#`K#ROC*T1$^7-QGG`jib603IL(d;;#- jO72&POA3)t2o!=J?ojde@2X>s00000NkvXXu0mjfp@Tnv literal 0 HcmV?d00001 diff --git a/emojis/1f626.png b/emojis/1f626.png new file mode 100644 index 0000000000000000000000000000000000000000..ca95721d9b36c92881bc1b697e9e6f7cdfdfcc8b GIT binary patch literal 654 zcmV;90&)F`P)Ymk6 z5;@K8N_qZy=Zxx*djOHY6KfQ6Yp>VYF}Jw=Hnx+=N>)o5@1NX!raI&v{*k#{s&8+! zRlWJR^+9@k?@CLr*Et4={D&IF+>|*yo)!H*R{$`Pr>C;S6KP7t6KV8RmLev<&lM2W zTG>OMVZi9r5k?CXaV?CXaNjVv%awS-}CO0AVWBA}9I7zUfMBnPQ1@!b>!KX+3c zq_S+r_Am^CBC3fZqA1YSUeD(DBo4cU0;k==wT5b(_DV!ipqL5JfClpJ-nj|_U~o#3 zL>~6Ffk7!v)S`NbQU=5mX=X!f%!by8C(>Z>2Q8|HB%7ry+SPio9}vmg+s`mO_KDA5 zVtify!OCisw(FNDKPOS-Xyo@r$9wBCovkh$b_)ms zinW4*a3t~K{_yIAls^2$(rP@^>veXR%cXj96l(=_PAiH{MzP7%Ijtzx3JP}jvh&@8 z%YH4I%1Y$Kb~4$y#qD?Pjkc;9#oPplob4zaNlbJPF8jlgq)v`NiQs^{#qVb z9`foX@YE^9ARJ3Pbqb*t;i0Ki1Pj__kgU^23^onte1EonZ*O1U*n9Pq`h3Ezsn9Ao)|r#r3atk400Yff)T=5(N&yBRZ}7$=*0{s%hfEm zuy|KiZ)nTv4GW8Rm8)5bNz4d(gdq3H+Z_wl<)2G?mNe1S;JS~EVzE- zj?-_w@B!gUiV5Uid1=T{A@A?3VSS@+f8Rcx);G3vcjdfy>X?NQb+c|| zwJgS{LowAMNrDrv4O>}zXt0piHdM%a@yN4=3QtRtpi_!vjA%La=1~Hof8=tBbML=O z^rWQ}vl!7Svc9q9m*4)h>y4M6x4&l>SP{q*ay3+Il@ z_jc*9jp-Eg#H)l!Evxq`PL7up4m@So+Fuo`_bT$e{r(ld#C%H7^f3-&OjD`YuT<>U zRvI4ggjDh%)+Tl7T#Cfa(RGSQZ9!T3FxbizCKIGg z*u$`nRdno0K_3+HLFbdjTKg<2je^c8NIO`aP?X7F2peS<$xN5cU2~V_a!KxIkF~Q? z{Cvc>ll!?VsAF4u2GhHr9aWoh`Id-eSY_yXG2U93?eu^AcuRF=jt$hnquqoWMB9te zgX3+H{^vD9Hu*H9pBSNGq}s2=U-;fJcOIy_ ze~I#yIij1kA`O#J%dfHY+bm{uvuL$t`dqm^Z?>E-d~sjhcxCJmH>`mvM|2;!{LMRD zntqL-S*PQ{0aPSPsIjul!ue0Q{Po*-PMOUQ?d#Tt^*~%-FBnHpygGQ>+;jTZ={H1e z`A?oa{yCXPo*`mMOzmQ54;6{h)%P?#gGX4L|BRap^CWu@_sYQgL3u`MR3qf}{^#iG z>LBS%6R-Zv)CNpy!X*8 zOJ$e0P7M)@T7lF}zPqE}stu?r1 z*I0MUu2HQuD3%;V;FI+V?5d6vU}n_){yEbAPlTit?0q6jaj8NkonT!iouGF|icGp4 zDFvale*s(VMD=)IE&^HB9NPad2tad}VMxY~_JiggJzil^T7i9*f74)BJkHEq<;=`g z?1~4P|F8o4tO6#1V}N3fQ}uawe2&}8HA3g-7kPc`DH1V@4Vu8D0xkkmz>BOYm0gC1 za&)EQgi1GDN@bTsEXf8_z(u7oSanj++yP=Qt8&>Sxonbkx$GA1rO#>PNf1cxSkb6q z5EDR?|JMX2G-?>+3J6qF##plgjDnsp1NRu{At1{gzXLNZ(KZzb>lZfo8wM~DK{_tX Qo&W#<07*qoM6N<$g6$x7)&Kwi literal 0 HcmV?d00001 diff --git a/emojis/1f629.png b/emojis/1f629.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e807c8ad031efc7a33520d924f8475bf469f49 GIT binary patch literal 708 zcmV;#0z3VQP)GE~+Hx{j^tEtF8)Y6bA9LA6k`%zF* zCL+oR!{|dYJGbE2iE|q2D%ICjI(Fim*|`NJDf+}PEQU-BlK1=a2p?g8jGX%Rf-k>1 zZ{G`@I@%jG)K;pmt@O#~V-}Z+9&X(%1lzEMIGkc94q3CgA@kmmr&MP-GuH~r%7Vu` zo3yty`1#iv>l`Eur07MWWbW?;xim3$e#&=eC+*#{&F$i{@5d(X>S~r%atx;mOv`Hy+WPtSV&ozE;U7Zq+?v*L-TU)KH1exH8W z>#fRiEf3UL6-QFyAmK35lc#?%{nxw?-hCF)e+A{a3MWs`dHc=XN{WQRGQuc^gkWm= zrlrMOk|fxa<_YP)^uk%(a;1T>%aQR#E>n*xLYKekGr3!k@;=%z_- zwuTUbl&;n~)+2GUG8I%sW|xoz46%!YAcPCIzCr|1+$E=F)tsCBRpGec_){i?O`@{VCY!( zc)cpj3T*j~OajNf)K!&ITUE-bdJp+|naHxlO2Wyf%|qA(h-%3K=1jM7{ag2$xw!i- zkkC{a!43gvs*Ej>DMg3bv0tt_e-#0&CLQMRded{@MUk?+rAtO0kP9S%FTfM9F6Br@ i?`WjquxY8~K;KU{JI+S<<`;ed0000G(*BBHk}S1$$j z&|4rq7ZLSPk=BFs5J3;xg`!zfb|JOEO1iA&T3LzBscY&yUmI>={eDWv#cKW`S>Y+Q zGE?6>^Ni z!2Uf|ga&@m_wEO}E=j8gE(qWNAjT4t^!0z|#j7Zb7P{D4Q-RZACSy4Eo7)fG)Bj-z z%_La9xCE!eEPw-srhxwx;Ii8^RxT~YU{HDZG)&iv2t1ab!RI%QxoHyz4DdgN7kd61ZgSYk_z+yEu?jIM;IDTAXDSm zwK2SDfqFnNn*^g!@w%NUpcyy{N`f?jBFRbs2Z8fQ8bGN9Jj@6K fL6FTTbTi8zSPJB|tsVo700000NkvXXu0mjf#Is8y literal 0 HcmV?d00001 diff --git a/emojis/1f62c.png b/emojis/1f62c.png new file mode 100644 index 0000000000000000000000000000000000000000..c3498b350810c6b8ffb53cf03783490101c6847c GIT binary patch literal 586 zcmV-Q0=4~#P)HTO_RzRN6BQmH;{6%i9C24fw2x`2o2~9*t1-||?pQv3PtBCOko9;dsbMES>xmOF8*RHa1^~YXJ{A1CF zAFVU<@|pSBX)Bhce19-w+m?DIg&5bcDSz{!Lnr&)&YzLp{JGEee&^Q{IytmR)T>xcJjowr#0bl8*^JL`OF?)WuiNo-#c(Zf0u254E?6!?}ztIJSlko z^iLZa>Xanti7`m%{rW&t=bfQPCa31`jIjaDYn6@tAzMqfku@L8*xu5lq?a%l6Dc`S zld^H=)=aDSa~&s$qzDK_w4)n|f0q!t3GIX;K`gQ)6mg8`v=BOo+K^RNK%USeiUw7A Y1CLLzl9XZ}0000007*qoM6N<$fgp;-cDU)XI?;wDY0Yq<*4D<`HoZYHYbGyv zW9GFN@`f?xC9M~%Rd49eE3KHKR!&K!vq?ucaes84pSyZGxiz1U=($%yf&%BJ zH9G!<9XT7YXQtx&79h!_l4Mqi3H^%j)gPq%P!6+mKY06o4u?IBs3R(nMO3bHJ-3=C zS+M1it&XA14{`b20b*|4eU3=q%9PxR)z{0#s%&&wDmtelgR+_{H2bSKmU)ML$uCfZ zAm-|YgS-qDaeMAOWf_lfraxtc0!*V*gdk2rNB1}#-QysMQ-olZX%*-KTqNjyHACw& z4>9RhGsgTP*3hMZYy=`C@Or}3*{Z3tRpa%9SwjS9RDc1Xi3BF23KEcDGO4WL0WhGl zL|y`1fE!)K2?t|S?}({zIvCPeMfL#oM5#}{m+$%*&MgjVNy8zTQUaJ;{m1E4j-q8K z#3+7^pIQnreS!Vq*P*;&4S5piQyJP)K7N zLziIxK;)r<#2>ATL`8&lP*6((OHo$dhT_wanq)f5xu4QT6V_PZ=Od8A+hcQju3Nj+ z3Z)gO=C3tvGd$@V4Gwzy0}Esk$Z*&U%COh*&|y1u8<5B^=?{bkZ+ZQ9{ek@hQY2Cw zHiI(#^zx``RyqNZ{}WB6va74j;vS#fez~<1jZ4Pj0^U4me59I{PEJTJl4_djOHRL- z*cg-U-K=wVwOO73A}Qa0{O04_I%=g6Q4~l^B#xMvS)o{8h+Ziq%~UEkL}ST!(y-TY z-&kC5iHzs3zwrK(hN)anrO80r{MT=cyj|jFC_-a{g$z-xP>w{kLTTlM1pcL(l@=XP zO_m#1&rxeF!DTmd%w;#TyBFbt-9!#mM~*XPdfJ=oNQ*=hq{&4(+MDahM+d9{Hgc@2 z@ACNB90+j7bCKGr67tYQZ8JPc9upsyIXH}Q5RNfEvrInPMtDl}jRpsR1UX{yB*$X0 zBzYu!W5EHjZ)A1R9|#SR!|k*p2m*p2;C5NbgU2PV(TqMh($ literal 0 HcmV?d00001 diff --git a/emojis/1f62f.png b/emojis/1f62f.png new file mode 100644 index 0000000000000000000000000000000000000000..007a696281749032cf7f985d7d7f67807d371c92 GIT binary patch literal 589 zcmV-T0kt?p}AGr_BQ_Nl>9})0*1c$`hR(Wgy_?e+B|xqBEmxZsplF_oji6HXjK*bTu~& z4+T5Wq~uNFJFypE88E!KTb-0_Z0_>t=?9J#^!eKv3U=UfHb~%D0uz)d%2I1t4i1l4 z-!Q3K-!M5iJR-H0rA$#F#wE~2jnJSEcS{q!eh*c>eh==JCPITgY;*@U;n8l!Ms%bQ zR9$R8$KwaLkV0T5febcM2ugNx1$J@;N~93fk(R(Rb!1J8xrHQi3rVu3MSUtEK`jDB zY<_O#DeM<1>=*g8il#=5 z`%}Y|DQr{{h=M?Z0+a!vCilAb^Bw&HU0fGt(xCcB3H3MQC&^eU`l>p)( bR;ck0%gdvC6QSMN00000NkvXXu0mjfa=HDH literal 0 HcmV?d00001 diff --git a/emojis/1f630.png b/emojis/1f630.png new file mode 100644 index 0000000000000000000000000000000000000000..890af3da11cc2b1842e1adf83e148d4e3e109b0c GIT binary patch literal 830 zcmV-E1Ht@>P)RjLq}ClU&bX6XO)4S3%avkMV+a!_145BYp5MNx6>lD+nw)x zY_v15b5J8>lfN|yCQ54Ck+SMPye@Fy{Yc~bF#~&rRT5tm?K4Aj-Oqnk3fwoO5wiT- z&$y07o9kGVb3dUGvSw@=D*6V#ke(YhJO^1;TUZD@ddiaKgRHVjIi|*jaO%snHS7wL zV}~it|3Hgnm;&BF+w4BJ$;66 z-g%BttdEWTk8|gqBZEObdq!ERcUU82IFTm0p_A19U95Mr#LFLJ=v%b7B0$a`COtgN zY$?Jm|LtgmwAIF=%962+z~z4P2Ak{)ynZ@Mp;+a$6B&Z*{IpoL3U9vg31&3Ni5K_r zYsW!uumelpmXRL*c)B)9(jG^64h#7THLJl=$)atkWKpvkEaWQ)&mn1#ldg^8;g74h za~adQilcq_WrK$wxPyg4g@hTREn$Y(dRL5u8A3`yi|JgYr0zi_?elX}wcW`ttNVD_ zJjql0(;xuNUkpPs^6UU;{vl4=75Ht1`CaMqd2Mxp0`^3)ZU%N8wPe>=x3BYO#T`B|eW&}Y^6_3eZF z>1H#+w0$>$#R(2P(noJJNK3w0CBIl9l#0++6y~`i(Q8U0HnYZJGfE~Ep)VDotuGnj zU$Q;Aay%^RC{KzHrKg`^m0vj4*3KV&fa3o(t8|^4miHb9>Z~%(zob7edp+~r#>#gw z-_l6jxA<;U6+MCO27*8n_(dZ=a_Kl`V7%R{3yoe~pjQ|89gW>L(lrMK@c;k-07*qo IM6N<$f@6z~LI3~& literal 0 HcmV?d00001 diff --git a/emojis/1f631.png b/emojis/1f631.png new file mode 100644 index 0000000000000000000000000000000000000000..05beab2b87a49e2fa5c52d8909e6ff03cbac2cec GIT binary patch literal 747 zcmV4CG-=x5&~!Qr75}guEbU=TS40oPn@kaQ z83k`Uc=e1Q1tVW z&(5D@KwO7<=IOceldmjzg~w0C5q$iANli#x9H2)a?iit z2#&t0h~Zxd>W1Q*pA@@4zTxS9lZ2<45+M0MvM*f@&G-!eK@rokhhB5yKRVG_enE(v zMt^N^d+({m(2UQJm>9N9mwXC=VW1Egrb|8(!5_Z+jk z=LjTXpnSlRQpB`vdBKEc{DcrQ8D3;Wwiu9T6Ny744v}b+ff3naGQ5Zo6PmH-jKe=T z-TJ^ywwLhsR=G=K{8|;Kic`g}RY7A?-rg#c?IosLA3BGB(7yXJ^JBX!Zxh%Dz5Qzs zOH{+Zv&72s=e+mv3Rk|n!HBm-W#k4XT*v?GQ&i(`bKAeYGu&J+dd2Ol$5h?38tYkG z;+VJdWvUz$c7eCvulbY}Z4& zJ;y+|=h&`?+!gB=w4yVBkLWK(JadgytaI9PYb2C^Qtr_xUZv}1Nm=>HsB_mzDOrug z<9}!*J`j*{dfiCI-l9)YLt-?a#Ta407-2M@<(}BkCs|uF2tuFWEYK?!a-5o! zzU9>X6vaZ0L=VMqA5SCq2z}a&mg9)3DR^gJJbvWl@tI16#8BY>u06fdyB(jWtA`A{ dNkTiW@;9a(7}C8h9*_V4002ovPDHLkV1hIuZAJh9 literal 0 HcmV?d00001 diff --git a/emojis/1f632.png b/emojis/1f632.png new file mode 100644 index 0000000000000000000000000000000000000000..f72753a33d5cec576cfeb0aeebf954ac07482d62 GIT binary patch literal 650 zcmV;50(Jd~P)&Qzh}6?T%V6bKMrz*k^#f#2pVlp zKVWbv4n#mLAZ$`be=^WSkrN05#)xLf<0$dU!s@ z$!Ug?lhX_z7Givl?(3;cE(Cl9<;13e01`e-B>mH~8x#aaO&Z+}N*dh`#zssEre`-e zOeBXu!q{|R02p77#R-g>-08SZB@ys8UE}#sC$|j`>#;b25px`v(|{nL2S!ag4G+t! zyQI=tR@U}7&sv;kEmqd{NTstZukO-mcnFM|*mO`q4e(Q-Kt!mk)tQ=!lFH<$sji}? zx{7or$J9)ex*8o30Y#Dcb-7%dP%kRCvlstXdLGRrbe(fZvqyurF3!4b^_q0;bexrfUKXxe?etZi}g#MmZD#SG) zLWR6i%q?x>F(>et6U;4blUIuWsfY&50~eG@9G@Ze-3$%~85|BG_1z?n&!}(#GOq($ zz#=6|ffh~4>5z4ZH>BPy`$5YyGcY k^cY-5P)RAf3lL^e3K#~t2x^Q!n4Qhb`N;?L0dc_awqgc!)Ppjp`7C8hK}}7N-7VFuSyjn{(G&+; z8{?o72IvIL!F`Q5%iH)`vma3&%xn_xK$ihxxE8$i z6apO#T{*?fr*|AUdLCW5oszkV&0Om}M0GI2o{p2~>~r+D30yG^gmH;Cz=84 zRt_D%j=w5^^|gq;T?Nq<5c-T}UZ;4r0W}Tw&p|YS8w4_6TcKZ;8-IXyKsS( zX@@d@4yrT!qdEir9KWngJJ`hw1{h=Wi+<{+x^WEDrpbPrV9Cy> z@F4)kf!e8lkTFAvUg)7Ny%t3bm#r*Tuc|_XACv;yYk|js@FWN$DCxmvSd>S}UQm5N z-0QJS^TrVW;ehm`=mGM$48P?;4g(2Loj?l^W>E?l2Du1oj6Zw_{{rbuv!`f|00000 LNkvXXu0mjfKvzMF literal 0 HcmV?d00001 diff --git a/emojis/1f634.png b/emojis/1f634.png new file mode 100644 index 0000000000000000000000000000000000000000..1e1a9503611a6aa36a003a77f806e82ea89d899e GIT binary patch literal 672 zcmV;R0$=@!P)^rUo7yn%N<79Zd386hwFkjp~$A zQFQE7k#-U+Q|J^)hoHhk7(|ewO*>Q?|piW=wfy#)nUENO*OAzBW~TkN?f^T$=z5M?9_#7HKV%z?2{Lz z1P6=0vJum0eY%$${t0VrG3&wencQ~>P?j8*{ge5WXRo;1YTiH5g=*k8UBs|rf=81D z94`4n*XuGWbCz*vN;>t}Nw2YPJ^q-l0Via&H^k+AlU;_(Y9K)XgVSD)ReZ*@bTV8& zi9|I<7P2{BF~_T5j;zZIjrwxGKa`z^MtzyOI)zOns#9O^jnxeYW>n*R%@mskCJPu@ z@Nm;VUNyfV56Eyhr7hD~m)N8_ELtjONTz_X#Vm?5*60qDN>6I!lFT#K{ro2ZTyJ=b z%`OQPlCZpLGBQ5T&VmfW5sTF|lQ<*Ig*!zu6I`OUDxY-2MM9CpCf#tc`opBFcbM&l zi*qeC#C6{vWo6C8zkes`h6_6h%mKSeIMTF-#`+RmPKiTm#9h1K$K0?;b2~{gs{unK zNpm}i#T5Mm6Z8*E5Q{0&+)lPIq$#)ySR|R64lx`EG8_mpH63CL7SO8+2mpN~DJjgN ztk^?Yv4@hvEVj@GDj~zck0000rL!k{1q7dv5k%AB#v~Uel(`~r9{d$KR%-wn(2~S_;2t}`})#`V( zSO)+nhho5IP(g$U74)0E4U|}c05AfWILZTfKpvr(1)c&a3>t^5!247tH~Jy8VG7Kw zvbB?;Y-=aOi#Yk1uC_=da~bil6x{S+w>5sq2Rj8BG1WpdP* zP1Kl8q%%3jC&O53bVLLcW&JwfqC_c(Z~mpF$wnf%N4`*?Xfv6jrOC#x#4bvK2xTsv zDp$O%T)ODs+xl2vg!{wBbBsr_9-A$I)n`LKtKW1k>|T4~87b8=wK`5fSb3g=X>v zh5PI&hVOP$YcXRu02Krt0BH<5LWxQPkAZ0v{<;&E{`+^jTpWr5Ay7et2o?ST6CcdUiPY;qztZhWJJi=uF-^7_YE_-#0J;{~8_vAk}iC;MXhpl)O=3KR;$ zp-Oe>L))wtPE{rq-IZzT905L|)3+H)_P`}0LayXyM^H$|51u%AAr+n_6XfbeTgd$Eiar$MEPfV^gb0$r&x6whN$vA}J+XsSHQ9!`^|-sl5Z6Bimss zl|f2L3C&FjAzVCZZDi|5hM>>Osi4ox-KJXveU%8|qLdrh1VR)&dwK_4faHv#2wwF) z0!cYjm^;=2lbV_i4WlU$K*q$ftEH`bNo++S9| z?=SX7f{#5FN+XwW@Y`AH9$JfMDKiMeDvHg2p_;vcP%z+INCa8UpN002ovPDHLk FV1mXg1n>X= literal 0 HcmV?d00001 diff --git a/emojis/1f637.png b/emojis/1f637.png new file mode 100644 index 0000000000000000000000000000000000000000..0c8585c842e6534953aea591c08e4523ab26e90a GIT binary patch literal 596 zcmV-a0;~OrP)W!@xSW(0(pn`=cGFEN^oJ6hrcmfbZ^0>Esu#VE zL03h?z?TqFbg=|MQX%uwiwc)cA=bcLr=9Jb^E6XKVT(Q=S$KAb)1P znd38otu1#HEk z43OggrGN}|3g`pU95DvUc9n|ba;)OGl5fYiRb7=I3A7O<()2*+$-O5Ea8sTC)IL7K1eef>0ScCTF4M0$(_ie&1exbbxdY+8Q(u&d9a|1pO1XHSAIM<%TogS zHR$Icc_7um8X&+QgFq+f+rTHF6l59DqH?o5)j&B2ApA!*kPTAF-+~4p%$*oOgt?0- zAjFK3h{J=nIP)xF$2t$Q-F+5gY*MpjZ3<~#gBc+MNHDFbdyJZMLkx^KD_|4G}T%b5sX|b!!!|{tDigGNn z=9{ZkZ!|xjWQS|D$-I0Y<<#XcF28MX_HZh$x`v;OMjc!ys=QpQUC3}Ehu(;pr)(AV zO*$4|Czdkd6E2(@B$)D@P(*k$;KOzPh)KFv(;v^|^^X8w$H8xnl4QpHhHXaTlTH$7 zA>cO|7!NX~O$K9L8rutKY%gFi=4DEod>_vy;8$o2657HxBQfPw(N5d!-EjR$l)^=d z!bM3KA{1tX*}19@S7AmNSFY;d-M0zeeM_*v+(v{h1^SAJZ1CF#H#%2RVy)$4a~si- z&m_iraXoEM$4*;J-jZTk+B+x>b|JzvU9W&!z=5igluiD$KCV8AptZ2MVlOL}FUR$& zr-z4+9`pW7GZiaB>|Jj&tqHiPfCT70Aot3aMoXC(rmo>9FIwBsTH_KCk}ct6wU3&0 zHUh1ncLNFY%+V!GivzcSr^d&?eL>NUt xbjLRSqA36lfow%6!likOcJ8Bf1Mq=aegRo8=_T7A&jJ7d002ovPDHLkV1h~9J+}Y= literal 0 HcmV?d00001 diff --git a/emojis/1f639.png b/emojis/1f639.png new file mode 100644 index 0000000000000000000000000000000000000000..024741506555e55deb1256cf672fc6af750a207c GIT binary patch literal 749 zcmVq~70&xU*0eG6fEdvvvzXRrhmw_E1Mx_-E9RUvTklwTRv>9kn*HRlHw`E|yj|Fn$;BBsHY$0JmHHk>1uR|o+o z4{zbZK$O)|6G=x{GAy0QhN@=X>tHV2z*istLM)gflNbD++Cs(9`#$PS%~GL(k)=2_ zUYfeYQ26l5349}?KBNy^?l6}QJ~G3#1r-u@!v(+dz+I4ZY!a^$)JxUZAX@r@NQuI(ASo`P&pXZ;dd!c$YoTy8J9WiaJ0^`MV^L0~+dOM)!1N zM4;?3a5l^R`(tRWsSrZouM&LpMh)-o4Kurx(SL5l1d#JR|Mn-7XmrqUKWz_8r{giF z^VQuUX&7L;5HSt9cLo{ii?BZ)@PyFcx;pr|!cb4jl`n)&9ON-tv;ut~4kBo$LNg8e f2IzCZERXmL0$vKS^3A6V00000NkvXXu0mjf{Rm(n literal 0 HcmV?d00001 diff --git a/emojis/1f63a.png b/emojis/1f63a.png new file mode 100644 index 0000000000000000000000000000000000000000..8417ee0bb80ba8e58c5203225c3c7c26e42e047b GIT binary patch literal 657 zcmV;C0&e|@P)cmD+(ZC zL6=Vb2hm095Z0wz5!eqajD9f}K}L}}gNd5?V{LQhv+a`)A!tE|dc7oZcmMfNb=e-! z55Nnc7EC7)1vc=@H1H1e4ln{V1KU7eS)uCkPM{5hzX$?BkVC8$H2fz6WcYU(1I)6D z0_mLcyL3)b{xEAm9aia!<>{UK~1ep zK0ljx)b`9fehNj4KNrSecwt zv_S>eL~av`hs2DJYXf1f4TMR|_)t7dELP)E1V?RrRyJq(tZY2wNwoC#XQ>NX)YX(= zM2G~^9BUlM6$zwqZMNckPA>6zJkN$S;oK zdJZm3vICX=ac(}&P*lUg_HMRsZ@~5b{SXfx zK4K*KjP{0Ey7&25){p2d3za-*7s$QVt=T4VX1H{Hp4V^QpsKh;1g|Yz=&a=UULOLl zLAy}NdoG`=V_6RLHsB2f?C8qF$V^xQ=%fUv6l%KC+V*s(=REGjkSu2U`N+oE zXWq=F`{q$yMLDmb{o$KkG@xte_FH~^HeNaGTx9ygbG?sTk2nd8NL#%T(jaO_E z>s(C}3tNWz=cAy2Q3jv-6I(wuHmRYolc;6*x3FosuYPK5(rPG4{(~6`_&*v-((#Io zGwi@*1KijP9$@yON}P%flV_@%A^l&)eT*^Y;Y7?F9V~c5sVrDv43%wTDci~fk;|_( zPx!E9v{Yd@QKj2+xOR7t*vv?S%tDnr{upI{H;zPPLiVT*oX)pwR8p|2mE_ZBikzwz;MgGhxV3nwTR3dF9guJYB_->`P; zI~EFcUU@9ZmSy$Ll0}@Jb~zz#bo%j`);yav-u|%8g^NF+s>DQueph(w_#m%7nnIL| zQOCXv1m>N^X|{AwmWZ6biJX~x@j%i#4m8@3O&gBPdAz%r<%!uum!7<*9rFfC9R-QL wKgxE}7v(_~5uQhwA*Nh|=nK$~fHk)H8&)9@K*!93SO5S307*qoM6N<$f+hKOuK)l5 literal 0 HcmV?d00001 diff --git a/emojis/1f63c.png b/emojis/1f63c.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd389d076e618beaa8ec633080f4098c2c04d24 GIT binary patch literal 671 zcmV;Q0$}}#P)L_)R5$VIehQMn3f zRjW3&h;~7=s72APRz@I1P!u*4QXnA}1YIO7FX8Ak9_Q%soUa+0Vv_24WcJCvQ^|zg z0lWpC1MMJ(fh|B2KTQFnpaZ~rU>C3vWY{JXZZEKh|7!(WK@RYz)rPX17m<0r$eb7P zFLPc*=Jg^uFQQB=Fi%m=i+J#|z@^(cc5kZY^q~Z`)k2BqD_8I3c{=K|r6b1LltX>o zP&99WEJbTlmW#)e6qb}LcfWJ;@(j1mG*Hrad4{fbmx1$*)Wn1eSpzIlVQAE6aJWE! zPXgBpt`+)w5)2L(7#j6iAuzx;D!dsBn9WBd;|9loV;~tf%;qEBj0LQ))qeEa+YCxe z%{ZHHyPnww7y|^<2xW zXDnNb;xOT_0s%z`)FtkC1sk{CNSpn%n=(ZZlyqaB-mWhokZ#N)0$s^h2ug(!1A2oB zf>I&^-JMf(r>9sBm4VCxAHD|sNpD(2@1SxF=%!2+9*+2A^C6$7L!P|y>1eSW+*w0~ z#|U>UD$AfpK?Z@H6p6s*4KX5BN>1#rqak4setQ8NK_#$=P&5O&7v%y-KTw^jH~hsS zqSq150UkvbBFYvJ&Z2r90)+jEP)~IN<2R!8JeZNE|t2FF)|Xh zxX?P!z-XFvnzcY`zAvoO-kYGKrI@08gJeo^6b#`HM`3rs;_3+(XAXI2YG0(P%tff! ztg$BTNSHi_&Kr4*O(bb~oJ4^_pK$w?TblwcIuu{gPZGZ&F22kKn9eALt~f3uQ(*YaWGd^pK!uWg zlW01`s+vS?A6>&0bPZP!wSBCrNpv|#Nr8c?ka1jiO*>_IEqf$vO&w%|A_z)lAVFjG z3~^ft7bP$SstZRElpG@l=o4}X${G;rs7UHmB3Am2(2;?$w9H@Lfl;Z1j_S?NC|0_(MflPp~=@;@0 V)?Gg#_NxE@002ovPDHLkV1iwr5On|m literal 0 HcmV?d00001 diff --git a/emojis/1f63e.png b/emojis/1f63e.png new file mode 100644 index 0000000000000000000000000000000000000000..c14793f81ed80462978821611e6c6d34c40618e3 GIT binary patch literal 687 zcmV;g0#N;lP)B#C9KiAK@BcjQ({5cmwar#9OH7yyV+*k@-W?E@Nrc4PK}dv) z#Nr_4=E8*_Vh3>{-XdHUHwO+5LO578R@>)iSxu&h&qp3#ZKgo|+Q#X3 zfX%==^40-YRA~YRnZjPv80Hscwup2A5ug)@lD7p2A-WoP$P_kWn4tJY^acZ8f&Oc zB@@_NSNiMui>zAo#1~TGL@9FyXs&Z8DKZ#~2}j$4(bkqC?6OkNOi&655b_KW&j$FM zs-$I=vTxH{&?Il7B|4PyEFMxb%kCd4vKCY%C}hONXHq1y#h`{PhA*iImEQMUc~T>p zoLTR>x&8K+fn@K33jQD{WzJX1oUcq$1VK5lvX`fC1CP6VK3=rfEYdEN6yW0@axTP% zbBv5Bjz_4g9Aw#?;qz>exP9irP8H7F943)c)-CmMVpovzkcBaTl2Fy13NILEn?#Or zX+(CSoCa+d!FO_Z2qXMX`2_3{W1b0lHmdxT0Xl%|z+oe_0`ti00d4`8ff%Yx`T_jw V{002ovPDHLkV1igqI;;Qy literal 0 HcmV?d00001 diff --git a/emojis/1f63f.png b/emojis/1f63f.png new file mode 100644 index 0000000000000000000000000000000000000000..747c0532b4f658b1f4146acd320ddfccc9c97900 GIT binary patch literal 712 zcmV;(0yq7MP)UqTUlZH#4LVGPR z2C5H)7sPR(8pvar9~c4k5SRpNfpQRi(o>jz0yxML!9TbF7l=mIa%q6zKS&@=H59HaACO>IX&TRl z=J6CrR(J{|?tIDaQX8fmhYeqJGltTY62>|v!X-ouJN?dmJic)o!%&ROWMV3D z&e46-i9eptXs7^97&xr6*e!8~mSNHLxM4*p!TVS_qtOc9MXUJ|NT>Z}G3_sl`4UJ+ zVPPifVu^wU!%BuFtji3k4}0Zwoq@*v@EJ_Ka|gJbKgjV)AEs@2VT6FH>|q3oRfZ)P z9iY`s$2`m|6k-~WmGF8hlhCbv^^WTzdahyiyH>IzAvvq+*?ayI9|wYxu?yb7_$ uDSy0aboAr^+gLUMs#^$k57Z=zKYjyRo%r!2vhtDu0000pkNo-7 z>^ny$N6vchu6rM~RedY2a!iM5Kwz>+Deqg1G3A@)&b3CkgXCR?mflAO9UcgFSH0IR`?AIy=Ef+5>M2ZzF&!pUPf;*8M%I|4?)<=0y&pL^++!&AoOouN7biDxJHN8Iy2w(u&Yi*7&$ZsaA5LU{ z*PZtIuQphoby4>AYJBvCPC79(p8Ui1y^O01e^5BnJV3n~vzi`43F*N>=ZnVf@+W{e zL~ao5oeRq9A%@6<@N6W{h^u$#$ej_gJ z|AdBy#wS?G{KIq8yo(F~pzv=L=P>z$z3#5rg{>zWJ8F)$Sr|OO({Z17kpcWCQ#IY( z*=DbM{3L%9Hc*rSCHZ_2vv0n_%2t6TRVd*cCa;<; zyrd^Z-z}SkIfJrC&pzYz2N_&Fiw4e$lEp9I5qYtM-E;;WUN_1p-bsoS?f2#|7sSHlHa;U%?QQ>4Qi@tyddPXCKzJLcup#ZGn_++D; zRHD3-2+&FGXAph2jMeoNN}3vM=sDj4o7Dt8IiW;pyM;*x{Ix>>C}<9pEN+M2BbO_J zt7l;S*{`pi$KVt`D9??FjGls5Ho|4)Q{YJ|L9^!PX5Z# z&}{6ex!HxSr=4x~I?iG80-$iTd|XP8_m3`y;?lkXjR6(J5urVFv2mDpk!}Dy4#{#t jnVXtf8yCY;3_8C7O?JRsFuwzU00000NkvXXu0mjfb$%kk literal 0 HcmV?d00001 diff --git a/emojis/1f642.png b/emojis/1f642.png new file mode 100644 index 0000000000000000000000000000000000000000..fbd559ef388ca3765ca18ba532ab9a88dc8688df GIT binary patch literal 654 zcmV;90&)F`P)$1 z9^WOw#dZOx!LCJBODAISWK*!0Sy<<(4<=4@qncC+=i;AZ>qpO^~T-_}^^ zd^rAXl)ietuBE@*a|Zx{;rovby!*HW!OMXV3I(~`4#wZi!)7gql`TgB?_ioT+rMAX zBU0cRXDd5}qWe!i;q`kJe3cbm-j0Hq&tLK2`5e|#TWD?apoj==c83TqwhIR&xY$k$ zfEt*bJ97-RzDfie+}IOraAR$K3(XBYN(dH|s6J{%xT6kc77IbRqYnEa02Xm@Dp9p` z0wzgKM`CIL`bGx%d>;9H9{NTGiKzu7H63QEmY%T0;>qas!TJFJ78pF$HoST}kEbuc zfIU=(g7jtsT2^!|-0t-94kic#MNtSGci}{R6{?+wA=Wx@wo^n$ zn;(Qw*dr^c=;a%8_vo$d9ekKuo9OTMgqRB24+BL3oSlK-H+W+!`x zW+JM#nWbS^Ud?33rdJ-fHC8%#2h#+AV1GGTNkw~yW+Jkpr(vK_LK+mCBR#$W!Nqn0 o5U@*Cwe&b%7 literal 0 HcmV?d00001 diff --git a/emojis/1f643.png b/emojis/1f643.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8c012a9bbfd89e857f67728e0b332a3770ded6 GIT binary patch literal 681 zcmV;a0#^NrP)I<_UR?&ZMW3y`HTT~9IX1S`Nrl9EA8~>zy_xh>Y&eqaLfFR-h!WvJD@-MfVO~Dem_2Za^U+6pj)KN4a;W2~9PTF0vcr z-MmgH9L17rCP8txmv<`;yVgRICD%+_Q#HrYR1yVUiSCpk^s#QnM5kS&-uO1&8}b zSC{17y*M8~|DNe=Ep1fIauxq!dnY#A(YxT*1Ak*O2^(9{*!2A7SVK+0i4vRY0tCm~ z_xgfE9lZ-~uP+oKK_Y{v$9dL$rTnJjq}B{LIHK!;$jr#Z`jBVPw?vwM&M4X^=5d2L P00000NkvXXu0mjf_~1Bo literal 0 HcmV?d00001 diff --git a/emojis/1f644.png b/emojis/1f644.png new file mode 100644 index 0000000000000000000000000000000000000000..180664c2e980652963dd3f404fbb7de2ca63709b GIT binary patch literal 589 zcmV-T0UQXv5!_CS4QU(t7ZTDSJE z-0M3w3zZe|)lFMijJSz|KBBsoJXu(`1q~8*LcF0Ssuer|WYU z&mYyfbGuDuNMi(<4P^{r0u^4Q_K~!zQ-D_KQ7{KxG^E+>8(xh3trd`+8G@T;ryb!8v2%}Ih%GwFyE+$^8 z_y>qeFTC?&|AAP<`(3!JAq>O`6Qz#HK&|a?rtHPowQJI(FF83mzsDX)pbS4Bxq0Ob zU5bccX9%O&Vj(qLEckP%4kPjq&$+51R|KtbggbM}qe~s{Gl}CxNC^p5{-au?)&4}_ zqQ!Y##jDU^BGXG`dWlngrzDO)0)#{=;D4MJ?B~W;F}`Aa#dxFnSuf`Xj%~gKcq9TJ zCdVNa@GL>+QJuh;K=Qd+mrUk;bv=<-U0M-jdtsyio(IoQz{VC-YY?^RaHZ8c!{9)P z{``BcwdzYx>NWM;6%m2b7_o)M(45xkpQ-6VT-T5|Jv~VOU=MNI<<~n?eD}vYbH&L=<7t2A7Z<}0hni8wzqR%jcPkBE zIeVKIr&g)1ha_@iKC8dKz|TLPrC!f+C?H{^>b$!!|HJ0y(CvRJ!=rKRj<&*p^8E?! ztxjV0YBZ|@e0ytwmEWca!+?bEhs($EPe0ykWWI2NgYttDUirZr=az3&{+?W4zJDQG z+ig*;E1O#j_^wZv=d^gWbiFY;vUWj{Z9;Gdh9Ww)^Xa=ws^Nz>SKg#Io#Uve9Wq_~ zn$pR?mUdImZPVc{U0o!h$_$pv3Ix8;rK;5TYJ^dfpZ>hWoptYRG4{H^_Z%|X7PKv> zl|@BPg3#3r4|r0o;24L(u@iW%k0K-1I*YM2#Ma=d(3PXZs%2-linTFD46%(-RYZi2 z90&=QXEeio>iaw7(tV_YG>QG@9$U2yvY9?oeh)|e3w>N0r^ag$EdT%j07*qoM6N<$ Ef-;|c+W-In literal 0 HcmV?d00001 diff --git a/emojis/1f646.png b/emojis/1f646.png new file mode 100644 index 0000000000000000000000000000000000000000..f30acb7afbec1b30c09f0b7baec356feaaad864f GIT binary patch literal 722 zcmV;@0xkWCP)A<39KiAK@3}kM@k>cU+Z0SJ=cS53QKwcFQhAYzGQb971{T)J ze@Uf^1%@(JtXZnip%gk)?U1o5;8Y}TP?L-E>KwL1?w;q@yXYcy;q#H-ez*Z5qn}=X z|E?kz5ax`>9~jd$;r1t}PB2>i$4Ri`yr6;77Ia5!{2g%Ue}1!x2p=Ny4VlD3FPh*e zf~e0abxl*NHch1nzBfTeg4@6||JR3K(2uIK@kxP^AmXdJ?-7^4NC}+dR4;;Fgl=|O zZnqf5HHO2|taaWq|IgoeQ5F$|RDJvh&m@djw;1f7BQhH;JUUK92Y$qb%GB=n#7rI!msr!V?vE12%;ZIZ7iv?EnA(07*qoM6N<$ Eg1z)hO8@`> literal 0 HcmV?d00001 diff --git a/emojis/1f647.png b/emojis/1f647.png new file mode 100644 index 0000000000000000000000000000000000000000..232585ddd1bb18fb729f74b1c1f8e45ab3e551ba GIT binary patch literal 694 zcmV;n0!jUeP)tH3~ayCnwvH3i|Tq;UvpO5UgaF?{D`OB+w z^23elI0pb_F~W9ZT&F+}F~tg1)HDDBa!*xrFlIM!KaX#+Ri7+3;uJV)1`W<&jG(+W z^_OkiJ|Q9@M9x~MMi6NOYE?P9O&*jt&~Y_Dv=(74U=VEJRRVWo0nvt+W@k7ip>9;0 zT$TIJ{m4v>-?CkqrAM^Iw^!P`-2AEm3IJi60ZKAR9bCiv&KSYMOi5nP=i6h^&MIcO zK|TOs{x1T$39y-B6hRRb*#v}{<@5h6Oc@T?J#A88HPFih_sUDW$b5)x38o8<<92qXTw;q z7}l)@kzpXh46EmN8EJ#5yzIE~-Q1%?Cx1^&xS|8&K#;WPz&ORF%W!+Lcs{nieP}XZ z3)7^o>BUlnOR5|e@La3wl5*b&3;8(e=k(JCRro0)ZK8V4C|ptH4B%Cej^0X?X+4n` zJ&_n`3f%6kL_q+rs-AJ+iUsUrp6-ECa+f4HRuQ3MLx8lzWCpE08+krZ%0Kp5z%a0a zdG35#$FnbG91p!9t#xP{qseR*Fl;F_3tY`~*<7rCMAET%*uRS2cz~9#^`!ZiB-m2a z&#o1HWVt3e|E8X#?Lwj1GGcBx>eQBa;`^%#21(l-`htV-Degysa^DC>lvyR7IDPRz chlsiH2LyiTH4{gmEC2ui07*qoM6N<$f<&J<%K!iX literal 0 HcmV?d00001 diff --git a/emojis/1f648.png b/emojis/1f648.png new file mode 100644 index 0000000000000000000000000000000000000000..b45fac216e205deab8294b64275a0be95ae2efc6 GIT binary patch literal 728 zcmV;}0w?{6P)1Li7=YpXdC!~kk(?$?o6nhrF`Y6p6ct7t5M8P;BDxu8;YM)b zMt8ax|AIT+yYLr?3>^^s0WJhV1wn^VOFL~kHEGUC(v$P?nAmoxuDmY!?Di}CN2}%8 z58IXCEnt&VzZ%#5N{oDt$bbv%Gp+iT=K05}`V>$AeW1m^Z58wR7VtiBA28xLzlbrP z+9J!o2A<^qX#!0aG|ykqJb&2&ZO$0$5MI87SF2KF8I%11OO;LwV=c+?n0R-OBFj0` zHo!eZ5D`|dY!IxkF^^*A@r0nUPNmakK8{Jo5nipv>Xi*d1QB83o&o(RSgX(0u3hD1 zIAnVGh*DUAq97R#NhcE!Fvc*CB9hUFTE9o7+sRP<#GqPNRlig&6JF}#*H=k~BZ6iV zaV$la;jh&(uFF!T+reL}vtU6h7UX&w#eyovTCkR&(O^0lphZD=xy$VE2vf2Ijdjk= zqX>}e2I%E!%IvQp=Tr+Soi^6@m>vu$w;H%BA?MP`gn2vxk)B0xS&07FK}4`YK#``* z;v?LZ6->zz@9k5nlyN+lJWUz@z5}X&x)$Y61d2RobpHX4>r&s`AnbPd;rkz1diJ@e z$xcof{q}%tHsdj6$AE4F31{3|6-%`s6)s3Xx2+iGp{mA!$AaUQ zI36Bz@NfVkEbZ?e(C)TytiuJV80W~U7B@iFIg^aW7|-XMyWf%|bCx{M<(>C#la0n) z5ULh0IqyDy?E~ONPW`N^U-+I^?QdOeJ~}*-uo`mn%~y+Zp8u3Y(U%lO52$i#Xn{9) zOz&!%-idej?u6~uja#=~zsW*6oo=6uj=!^kPnxDr0B`dTdF^l6y945A%SHYG0000< KMNUMnLSTXx{#slB literal 0 HcmV?d00001 diff --git a/emojis/1f649.png b/emojis/1f649.png new file mode 100644 index 0000000000000000000000000000000000000000..1ab841bc31b1febb8173ba2c77e2ae70bfb35f5b GIT binary patch literal 711 zcmV;&0yzDNP)$4oYH-A&a%vW@K_N|6@yARfGUu!ta3DD|d? z9typrhn|YZoWDHnW}-PNDAW)`RB=WY*P zx3gp`S_S5SCjWK{I30 zHLH@ShpAR>X;muCleS%!Kw@qp@_M|qW+uLTB;5{jj zcu&q{8B$3`sb%rrGD|B@*|W6rl*N0?j8cnK5@$2s@g6zu57vB^G3;(o2&&l3F-k3i zBxTPaNg1UUn>h+WmEpz)KFb*Q2W#ra>DHOJ-8nOkdbl(rtWVLJp5pw+C#Vz)jm{XU<}wy!YhlL7C85x_>^wS<5@# zvm=y1$N|b2ieW(R(duI!tv)7K3az59Khk%OQb@CIW0*!Giv@=6zgXb%y=R26C8LcYwMCTFjDlHGaW_Dc1e-X**wT$+hPqKq z7+Y-O5SR(381a|F(}-GRz@OTU-<+iTZJC^xN1UTL zHj0fRg5?&YGt+o}l})~Ar{pmZk#e!6Fj4^#a6);!L4WNho?pe^y$fv&F18Fr0*|$Z z55P@Q8|@A#MZQ$R6pIAQEs9&mP+EghIBSV}JqG3#>YWBf>IQJNzq%GCVT4!ni8||) zw~eE)LFcY;qhm2RiSxfM3370tB#s>YBRf5(E0_PRn z0fdx6Ykm`|ASaV3qWx(R5p@Zt9)#__);aeSI6z9l8AR?f@C#z4{rq!n7bO4y002ov JPDHLkV1fWNGFbos literal 0 HcmV?d00001 diff --git a/emojis/1f64b.png b/emojis/1f64b.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5fb91ce781cc34ae7dacf0369fac317bbbcaa6 GIT binary patch literal 622 zcmV-!0+IcRP)+L)75z560mmcLw*-c2&Su)e{6G74M+bso)W zv|gu4V>H?~=x&2MlmfpSf)G+k_HZ1_9U`lUEJPM9k)RxfaunLrP}zZU1r8sAq{kl4 zi7+MtB4B=%dieNinwBG(cMOj^;JR>h3^ul4y97Zqq+-b@mP1}GUHzYClwgq0s4;?bn(;CVIjD`gh$f2C#N!8h{j0r=f?GIVeg0SB`^ z%+5{HGCMa(!gBzjlc9r`sG$^iNrz%CB({Il&`=9NgmxN)7KPweH;DynHM*(+UDbeK ztwzIki3X7ZA|Qf6YyMG!SI9$O8f=ov^CGdH3mGW>gpC4qWs>fDlpDPz;7U7MRRXyp4ixUj+mV4CF+c|rht-VV1ha;4zbl-mM@==5nIh=vEtA)5?S{;!V+}`CDzg5d}Pf- z+5~~ii^VgvtM2a5l}uCTqi8VHMbS->P)J76Kn4Bi=Ej~nXlt4CT@#Y@s#E92kuf#d!{|po@qa5 zc}jReWD$9Ryg(N6MVTi}`4i&|& zbjK6X0=3w+h9g+QI=PAuaUUkcN8~Ejv4kU7Lv#o{X`%Il;m_Gab>HaC zvQj75L}1cxv^R!pvxn<}kut7_aTu36q=lTP;g6Zo1Irek#wNMtZ}ELusn3;_YWDL~ z++Rc&7P8>7g<)$)cW~^EJny#r&Ytez*l=yfp34QFps)LvL=Ag>lX+GqnWQuL-9pq* z_bplI@o{O>`M1N3`8k=grJN00*@olU+LdfgwkF%~W488u&f1oiWE!r|&JEXRn_XF| zL=4%QoHtQoTgFBIlrDshB>L49lySe%TM8!_x z=IT)T21H$jT2K(W3f%;kYD$!rgd|{^H0HefdcTm=7~}KEhbPO75MT}DW@$d@m-30* zfDcqaU!wX9XfncGyOQG%d5Z8D5dKyId4$Lv&>M&xF<>x&0fdVP4*8sK3i60lT+RFZ$mI+#T;fWd$QO3cB^Wni%Yo(Ib%@aMpD8R3Fn1qBor zgfk+rR0I+F90$(l;oLm@>_M*wU%!EpWWX>%?Wn`{7)E#jQb6)pPEtQ(ys^r0000PVAD&FmMu6KO)A^y)aDF(v z3tR+>pszunp_FOk-@1{eB{ok%9s|PP@*s~u?%~^MkWCT>HJ}D!a~0$vAUHh{U0lbS z7gz)fSTHD{I8#7?6Q*En1fr0C$qdLS2p||*#KXy?A)kdHfQeDKFbIK98y}b?;e*g3 z0%JLB43$!qv*#nYG|X<0A=4vx_6XLBpoAn0U2LpXSbF)56HBkYv$0u+OqxzUU5t$P zF*iTSiMjbnQlSSZoqXD7cq#Zn)*l>I@s9qKQ^{>`V9$ho}v6GFF*hQ002ovPDHLkV1o3D^mG6K literal 0 HcmV?d00001 diff --git a/emojis/1f64f.png b/emojis/1f64f.png new file mode 100644 index 0000000000000000000000000000000000000000..77a5639ee8d3648bac20006e79a2d201ddff5ac8 GIT binary patch literal 576 zcmV-G0>Axr})+m|W_h;;>S&Txeu$z6&$9B<5{MT{NmL8Z~c2Kw<`C^Ia?#8u`sp zW$JAQ#h;E+qKm~JI>BEP`NnW9>%ze7N-NbIHD*^@12E2Z;H-X literal 0 HcmV?d00001 diff --git a/emojis/1f680.png b/emojis/1f680.png new file mode 100644 index 0000000000000000000000000000000000000000..93c1685ee17c3076117febbd23815029bac0632d GIT binary patch literal 724 zcmV;_0xSKAP)%VvF;ClMh_sLtp(qXck36+P zZ7k(!C@KF)M9M?{a3X7wd03v#+8UB)LLPQ&=5UW+w`>_9ua``!4D#PJN`yj3&%kV_ zFEAMhDBsWt{0A$r2v`RU8M>hdN-r`D}z5r>L4G|Cl5fA|p z5CIWvBJ2b%0V9;%N$$KdqHWDI9;u+i8KwEjUmMKpTN_*$@1D_GzjE93l+`SzgU#i| z=JJxibQ||iRgu=D;f4}^$Uj&yExRUoQX3Zct&RIhSxq`wBW-BIAYpgXEwdMSiz`Xn zEs!v*kv57BtS!y137!SqZ^oDKaaaMJvgYWFI_h%F`1qZI0n;>uWJ$QDUwv?yjyPX|vPL+jNsr zd&|z6pTkkQP=WUiM#-40!{YJewKRUgh($@6Htw$8nToo-lJy`Yfs3cfuB%2;iA=36 zbfp4g%^^0Yj3doG(9VQ%KbifkI@fW2=F6(`iC;o*H}FG?7#tUVrTUCC3jrbAipQUU z$M1k}YePZ&N{y%BTj+X-Re(hl3zW-fCG54^&!Evgp%XK}uo-Gqa{s&k*N6Jmd z(@rH<5}qQTKVjLX7tnzWU;rjL#NdOQ!Kp-DA5a76K=jAVbTS@~ch)yH4LO~8TY-GQ z0EQLZ093pGT}QcV#wmNthDL!?wK}WJ0Iv%{7o0D=XUzS=XGJ-m;5OR;_O!M z_`Zh1$u0R>Y8tSC46p(iAm&1`uJ#Y{owY&#XrWXHvUK3etNFSMPogc-R2paML(Hd3 zE8ZJb9Iqb1t!G%L*i-VH+wZm$Xs)#M>I2uP@kB1(jdWbPKGCavSuQ1#D8ZrGJe_Uk z;rCWz=|Z|TedZS-)KYn|e&^Bbp&nUV5UGr%^ZExOohW`=Hl4&XZq_`GZsSDFYic|T z!=P>fgPZebjG*srm)2eStS2cx0fc<3?1pQNFW!ON18aq<)fgQeYEUmf_DC!GhcpWJYZvIGb z`8c|;S*J$WKmso{)Nn&Vtebz(h0QuK3fdDk&_J3XjsgQfhQHas5ZH&oN`nPhfCX5{ z$vGEUi@-@E>Ff_r`@u7NK_RUAxkj_FdnW(T_rBeA!Dd$awvMjxmCdqkTfj%9Uux^Y`yaOEJrCq>z{&Zlqz3Z)&<^tgGPc6Ma z5v-Nz{dGqvtTfB&aTN2nZG(EXb2o34bJ&PrNtQvDUeM*Di{&*tx4YHJ_ZbR%z1u;* z$6o@-v`DgW_7WX$C)V^2-*W8g7olb-(hlKZb2SJ8a+2}3?#}%bM@L^Db*7ELlOTOC zP*RHA5}D&*MTH`kX6Sk`{qSMGeVIpXwrC-@(><~HEI3hCIjp6Ph$DH0N)wDIER`l$ zx~(PmJ;Aw2#vEP{{*@>``215+ox>U#^s%&`#^c6Nn46tO=W|%yMw8moeH20l zWV`}Vf`}j@AcCd0j})59Ntb|wykM{lL&jhkK!C@0?;%QIrE!d88S>@FCs`bH=i5Q= z#@?CP*F?Z|gdjEKM6hB5Zkpj_fG{Lr42gD@_02|&PX@WE*=8^Q(fw<@cc@J%Z?M7y z?rcmEx%&u`nC0b1ys>)^<$QtPo9i@u{~LXL#ea8pq`V+dn6K`kAsbY>A?+MpKo;3lDGT8)*oAy-=wm6 zYn|hZ;ml0;;mG!1Wt;hBFma{U9h+-BEl6#w^4KVKO1}E~VvV6jV|_;y#cI;?+H1bQ zb#$~CkB?9IVHlQuf2~|7xW@Cmr>$0Ns^9A=&-40jvH0u{nXePb1T+7h00000NkvXX Hu0mjf!%Sr4 literal 0 HcmV?d00001 diff --git a/emojis/1f683.png b/emojis/1f683.png new file mode 100644 index 0000000000000000000000000000000000000000..a33665ef81a0f8e22b53274d484eb9c56d25a796 GIT binary patch literal 640 zcmV-`0)PF9P)9P>>Wwb?OW1 zAdv+HLC__-6a_^eP!JT6Q4vC?md;cpnK~V1%hBFg}Ta$YFwvox)MTqU1rjM9r{sfStj7Mne}VayT5gopq$NPn0AR(|i~_N|C?T&)4WpyvsHrM?)7VGIJ&+ zrfIUUu)yC;)1*Y#bY>z0zyNap)-(JM>9+$us*nMkI(0e%8x_C_gU1~P){bC!Rc}zN*kG8DsZ~ow#J5f9CioN=D3nd aXZQ&ob?gV5RS+xy0000L6-2hvMKj5c~?F zIEY9$!A+cW5y2w3XhCogacU8QNHrLZweclMlS^~)l6w<}NGaH=o4+6aeOAAq4uQ)M1(? zRL#JLW`IJ~!^cJ!-`Xztlf?#(iSm`BM-EMojE+GF4SkxXVR&c=b*wFtk2ttyumq z{0EYY|G+_hCash*VQ-TkZEWxM?4d~W_O@mhpAY{|q%4aD%#>vfqv;d^fd{#+T1*TTMPP` z>ra@1Kk{v#7FRE9XI_J#1@h9arfGs*RNTHQ++^4kXU`=)L<41|SwAe2D=6H2z*N-W zfClz5C2|FY7cscFOFX2Fu8`RF*DBMv)HIyi4yuMH`I5gU7!M|o?wpB=s_|EHVL)eZ g3gz&%siU;u1D2L=SdaljEdT%j07*qoM6N<$g80a;9{>OV literal 0 HcmV?d00001 diff --git a/emojis/1f686.png b/emojis/1f686.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0e0371996ffc9e3887c3f193cb356c0d3f160c GIT binary patch literal 728 zcmV;}0w?{6P)&*<0tsa4HCb9H;vIexuoHt#mrwAH>t|1R_Sv)Z{hJIF*I*@$oy)PZU9f$6Q2p zeyh4Ozq`A86Z8W{jJ3kZ)nqcbJvLtC+w}yUNSL|ki2e4L$I}Vry%&l++JAJr*Xw@? zR5;}!fB?d^FwFYm342{(vn@1Epm745ZDFq~h$n<$)<>8`00Cp260=H>2m(?*+8|156Rc{!gXZ9HP;)>MX=Q?)-<+Z@yzJo`+JCpoA$s2;SLpGaE~hKyBZ zWckfvI$BxXNX)%DP3USQ>pv0eU3i_Ae~FdV4c;oIBVbvTA*0q3Q`K$XnESZs-Q}fU zDR~dbvq|jFy*lgeHGF45xUbf3Gh*>)W(Or;tfb(U0gEBYxmt`;*G>?wDcU6@$ zW`BR5GeM9n?CexC6BAd+<#If((P&VuZf8oR(k0*zMod1RXGlpQvaqqf=0Es(k#ssu zHVlciTP=={kI81U{<(8ceFe+`C!8{&@^hE*jbUwV zm0GPfGd4E%5%2}4JQYRJ>(<&&%H@X`lc3pba@gt6k0Sa}#9^mHv)RO$1m*HWthM)4 z-F0;iqs|%6^A{?WN-CSlGCe)be<>6SEG_*)rBX?iN~NzA_x9hgR~uK@&fbv#0000< KMNUMnLSTX-1Y2tW literal 0 HcmV?d00001 diff --git a/emojis/1f687.png b/emojis/1f687.png new file mode 100644 index 0000000000000000000000000000000000000000..a1affaf54d2f5835a2cca123437af6d27acf5a5f GIT binary patch literal 656 zcmV;B0&o3^P)$?LziyeI;=?0E-FFhn7>B;Y{MVV)TwQIK5h62PvPq&EwK)~RGn_0&p+t%Ux)*( zoLT`ABJvJl8V~8X-h-=JL`Hyqz;M1IFs8~dkf+Ru2q@JE<3K#p+)SkT3W)FzRo2!w z%-Z_;kO(nU9|C!!s))!45RXN#@#6V278X*dD#2hK6}g;^h!Bgl@$%Jc78aNK5E)VB zsR4R`e#&CeD6_LOO#M1W8?F*O4pNcJfov~xaBxU08f9T|iL!psH%3GT07IFG;FKIR z(t}32v2lffKs`?B2O@&Yh{%8e;<&7>43+|6&Sh<7uzqLoh#Q~O{Hb4Ssr_44M$MZJDjXb5D6GWAY(#{F?_$o!afNd-&awcI^byP$K z0rRDJ#Ggy8Jc!>%#6nf65D`?BPl*JR*)3c}RefuKSzrtpQk2Q$98PV3WNHyRm!qOC zSW8D+jBm+#6vZ_LGGhq>$}o_itSQt)AW+Tj-X4zQ;5ZJudp3bUHBF%quFt3r3rbaE zC`?&F;iHJv*n9g{cQTcd-2OgZg<^rO&Q51(B|WOj6OcRz(tEFuGk%{R$0^>~%w``O qO9lH5< zgohBK=p>W}4;{L6?9!#f(@8MrArh+PaxKiJEZn|s&o>@$5b-GFrPqu9PA+7#{B84R zJ$BS}^IKcnG2?gWOD4$-WeB65KAY!H-s1A;%jXL(bgPxqeb+;T}e8!dUEa&=K6^r1|J^YG8ms zb$uNZO<=@kKNfqEk!G%0`*gDZn1$mw1gh00cUnjQL3;rGD4T@y4;$a z;2_E%M1Ga?yVJ!i7?j@NU#R{!W0s{i7X;tt5G-5&@C8!>0R#|0009ILKmY**5I_I{ m1T`O-T}zm9EakuBFn$9%w2nGRf1lj|0000o#b&!C0?%F#3~|OygqW z=OeP&e(oiuv}4iOeofaV`5*eDkL@F*fIaEG12u1bpk51(Nhz~vjR)GC)-ME{Zzxsc zKj=rEeT|T&$=BD`RzE6TE=!c+FG5T-M=1O7zoXGIz?NnZ5-3{M3m7d4pp($p*nw|*d$X?=3dQ5VD|%~7 zoKSgnLFKywp6>XblV=5?-cCh+2N8qpA?2lqLe}}6^n!}-1%muCz)2u zOA)at37ee#F-3m0>C zwD~F9w$0}FI#+5}h{xmO+QIQd>`-s8(R3)fX_FvLf;0)z#HB-5XL=-Qcf2$;_0tn} z%5L4(lt?6yQX<(Vgs?rY{!Y1E#mFIbZ zuIq%PQi^RSmY0{?`}+DYO%uZ~Fbo63FmN0PDFmCFn{VfHqXkXVKA4_5OZ9r?&dnP) z&_?p3L#And{OimwT5CK(5Cr(XkMH~VzE2PYR4Nr}o@cgqw8z{|_uYksOOF>83z=fE zh<5bFmp@%vTI$aY=SZ}*VObWIWnozsmStgC7Ov}3tJR3bV)vUybW%o`T)9?x0f_tw X_?H(t_*t3=00000NkvXXu0mjfYy*>V literal 0 HcmV?d00001 diff --git a/emojis/1f68a.png b/emojis/1f68a.png new file mode 100644 index 0000000000000000000000000000000000000000..270b806869bb71b7de23f96dcbd7fd9f7d6ff337 GIT binary patch literal 706 zcmV;z0zLhSP)P7?f4cZX zmiX@<$g{kygioJxE0R8eoPN3bbY@;XIzrDN|9RE{UID2$Q_hB_JFL^E23J4jBaw#d zyB@UH9v%^4mm;@PVuv1o5JmNr0`=wYulb+j;JbIrlbu=1pc|xUIbCLK-`>fAFudlR zyTu02T8Fg`Yn?`jsku1zhbk4Ks7@5siK04DRA;DCA&z5TO7)XczE;XdDIafJ7_u!4 zDf#|)iwg@)Pf8k%23l*h)@ZHKTGMDWkW#X^u+UUeUI>GLFbGgtmXT%I7g?5Fj9aq| z*J>;+EwL4)6me^ok&%&$*4pVj&s*~7vE#m!>iUx>k9Rqs+58G)48|CYF&JYo#$b#g ois~fETUOUr)o`uW%(L|Bd&cbPcKTrsy8r+H07*qoM6N<$f(YYK*#H0l literal 0 HcmV?d00001 diff --git a/emojis/1f68b.png b/emojis/1f68b.png new file mode 100644 index 0000000000000000000000000000000000000000..0600119c00acb704ec0123f92b302ae8b092dd55 GIT binary patch literal 650 zcmV;50(Jd~P)_583?a!vw8Do8y) z%O31d9K@AGqEx9d9soP4i!6+0S;`rN zJEeX6%z7mR|3WCW-k&>hv!{@^X?gLK!DVZCr^ShmjbiEs1Bnz9p`}E}Mlp4RfkcX| zBWZl|lKaUtH@0*MsYmJ=YwkciQrz3N4?R*(RL|nMo8FHns%P=sP47p`eI=E7##nO) zdZZp7KM3Xs<_YC8PbimP1akx)Ntr4+SdPQG*Zs_BF=Eq`gr`2x{pBQ{+B8WSYn zJf}|2VmS_~+kB)xrDrO^Cio zo1!creN+d7cuKBI!L(T@917z1`S2LFP0?}j$ki84^FL&+ZPn)S@$vYh$4_pUmhDS* zcJ#zzv4<=oo6V*NhlYDXRY7-MvVE_nX_NBRQ05k8iKZqj+a^?9bHp&MgDfIcT@zRl kZ=xy~LP5=M^ literal 0 HcmV?d00001 diff --git a/emojis/1f68c.png b/emojis/1f68c.png new file mode 100644 index 0000000000000000000000000000000000000000..d2d853a9196163fd6ab0d7b38f4bbeffd6ee9397 GIT binary patch literal 481 zcmV<70UrK|P)HJbNDlSp|dB3@0(^%KB6Nge@htE51!55GHRa~*p~(;4T{bEXrP)t zZ5i#I8DsI$MTn;fk6mIbRAT}4`XL<#{~%*8qeX-cRsD$Z?kQWc+@PbmqR|V_@8HH0 z9M0?q2|+3TNCbLgklMxG@B{kx&<0KCB&k#i!-!C;eP?MYpc~I~u`HV~3<-jOFZDFK z8auwe!!&zt-nh=n>MFV1Rr>loDwPVqOD2=}{#S~HF{05Z#o{>T_Sm{%If+84G*i!x zoF`wLV0vnD&9<$1pbV6OGElZ{YkqoaaxFhTL3ZRErP55@i6;u`K;|HezF#GEp!<(!C|rVFLi-0;~8r>frq-oJfQ1n#Le+O~5?GZxZB0?NA zG&B?#fkP1$G>G65wun$u5*5CX6%Cq$;gD~4=cPU8+jIY4&*SM(h}Gw#9zE-0hXou2 zteV&;5IhkB;C;Ha4ox zt{Z8kR2ncKgFqYLXhGpR4zwtx*mdPKNf>VvDkbu@-XJ(f&iwmFTS2j6x_8OK?vmaA*m>cfn?a0{OcvbZY4Mam_ z;T2sBW9a~YW9a}o5<~emR)DC5N2w(LDHseTaallq{b#n{v6nH<28aPMAO^&M7!U(u zKn%v&z_FLH^NamJUf0FO6BUVthL@lHUEf}HgJORIwH2$h)#aW$d`atMY}~v82W3v*eZ5?IrI{~&vCwze(+WkA-l zf>~Vp_0S7kkA2!-543{}3v!t~DAW+Bb07mEJi+w~qsYtWs|M*a00000NkvXXu0mjf Dlz$MS literal 0 HcmV?d00001 diff --git a/emojis/1f68e.png b/emojis/1f68e.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4732c58be44059c7de1a442bb890075259aa9e GIT binary patch literal 652 zcmV;70(1R|P)vP4_!J4Q3{ODy0sSMkz%a2b)CXC22(Du^tRN8cE9ACRiFKBZ@4Skn0h~77Z*DihMT13kFU@ z5z4d~UNA^0%d#7F*Qiz`?aQ&*=@TAIIwu3a=YuAt ztun4OX?&*OcM1Ww;5EVT6mr~xM?Am9>GOarvBK0=DUD&!go&Xj-%$OfD) z0R&cJ&{7Ntgd=cjC%>#Od(pmFD+%ir7mY-D_jHn>o>?4D zq3&cUy27!p*P`)D!+kSXn~$Fl6qSbPxPDaTl z*A*@d<=;@-cL(_PDRQ~IqV8sXL6F|=`#p#pV=GEMYHB`lbbjs&uUK~#;wv1(IM9Khk<|J-wKYLc2DmS}IOHj9JOLbp~BA3#B+AUNvMMHgMf zNpSHUM4v&hb(DfoNI?iLi9-cJLutgOUSe`{a*o<+2{AYLeexulV~_xIHv2fz6A${h zN;|aIfjv^_C0Ag`)I`QSJXI{1{U4pn#PJI7j1-E0#m@OgyPMFn)_G*xBX|Ul;1N86 zNAL*29djCG1!V@GAUi2!HMP;&RyHI9? z`uq9W#>u_-?bO$5vrx$8IN5Ad03LrWhlR<44MM)Y;Z6Xz#GQ+hmwxj4%w}dC`79f1a7_cW#y5pu{ssF-91M z>mt$>?>XeblQ2NnYBkcdS}nV=SuJmH$#CEzeA?_F9MSb!oix2(k7l#E!x)Nmp8udd zoCylI literal 0 HcmV?d00001 diff --git a/emojis/1f690.png b/emojis/1f690.png new file mode 100644 index 0000000000000000000000000000000000000000..d0e3dae233d8d92836d4372e3f31817d1e146e58 GIT binary patch literal 552 zcmV+@0@wYCP)^Ia)*Mbl${+uM8a?)^@LBMKPCP<-sntQHR3 zsVir4!%vrs~o5A zTCBm#U7MXf&7flexnRVC`?t%V?U9bqqd2mrr%vebQ0L~84?!H$!xst&h7ug@f#QHR zgrF82)8ltqD>;8_>??yrU@`uMp9Ic2ZBYC{KYaAq;E;&mQ%dnSB7#pTMW2p@!}uI0 zgzLKas?{p>dV@iZ6T)>}eAQ}|dcA>9Cuc5g+m;#Ks%)~lvWzdAU1BORL9^AyXImy) zl}%Pxmhok?OH3suXtvth1~6xu=CfiUUrVJkq|zCRg?!Dn%o0!nO15RbC>HXyR60W{ zouOFB*DTX~3fxdvXXo&}-Pp(_rjrYFmDfu-PrOA27|O^crjrYFmDfu-PrOCC)Vaxv q90~#R^sE65eiZ`d=~)9Bbo~G@a-nCuPoE|L0000;;~UiDy~Ps2DTj~J2yAh$!0SI(&<^cdwOv_ zpMawzn;Yw7vl#;E^eo*yy||vgZE3@VlybgU$d`wcDMpehiiLdHQL+S-fRa+OR4nAn z!^spQ$rQyxzAUAjH--su``!eB)s>apKs+%;&C+5ir;VPbfhDZmKs+%;&C+5ir;VPb wM)dU$Q5Q8Z$&on$`!p~R1tvK%Ct#nNA3*`E@)i{YJpcdz07*qoM6N<$f^7@>z5oCK literal 0 HcmV?d00001 diff --git a/emojis/1f692.png b/emojis/1f692.png new file mode 100644 index 0000000000000000000000000000000000000000..a2508a603e346f5a8058572612be137543d5b4bc GIT binary patch literal 549 zcmV+=0^0qFP)h(_%0w+w6Y8K5F{W7bgj`ur-qNn#!QeE9!Kb88z*ZQfef z;q&>MSdq?|fx&wO($Ck;eHlG>{acr%$lWTxp|P@b+oq5w%%Ulv9k>JZ1Gj+=;HGg+ zeKf9z!+mAnlczfuvMz5vw^P;zKa`&AsRlwU@&G=d2`B;Tfe_Fp6NmfHymD7wvs?Dl zd;ba#V*MO^G{EYB7cD7aS(c=8)f+AvYkcy^<5Opu^@k|B+`Qk|!1VeE4R35#;4>4G z=dA_rs#+BM=@g<4zH|yx$n%$~B;FiV&z2f~QxQZJML<}AkRN}Cu>$1;2XCOtKM{dM zv)HJi~1d{o-zB$kJ=cI{P*vqSu(@ZG+CnGN{ERotkXK5=$yT~m!wY448)IF5jJd4c9Cpz!$G z!u-jnT$1-bNzeE~D=a|YHXV5|C6Spt9BF3X-Uj^^Na8U>1Q9_*5D`56kJ8ff@+;(u zkSjvTg~BT2itz9=IEsr(DN#z{E0s!kY&6|s$RRPzbFq--%yxcj4ncQJv%Cr#D7oye zu*`!>xzBt+t8Lr&fp)DmWjpIZL|CuZ4_a%=M8p6dYpsXmSnsL9Tqbj=G7z9O-bo-B zB%jMN`Ei_5(P2%rDaPhl3uRxwOfff|Mhrvw=4NKM{B&06ig)ti{TQpx3jRF0-pKr zbL5wD7gDLzX*~I*+;DZF`c_R{?U;0S?O~19`heE@uxXliEz2Hd9oJP=MaMah$1u$y bpn&HW=+DTP2N6@q00000NkvXXu0mjfC8rf? literal 0 HcmV?d00001 diff --git a/emojis/1f694.png b/emojis/1f694.png new file mode 100644 index 0000000000000000000000000000000000000000..3f4f8e4965cf68ed50f675d7f0f8cef5c3566703 GIT binary patch literal 756 zcmV`2&cFTbC=NWAfEI zSB?vqqet=|-RjE8W=C-|&5oqim6JlCg#aangXvPa^7>eDV!U!qi;QQ<`i6{W$@zwC z+>nY{Ql4c*Ih1g08|jXG{pH!CKc4&PaqY+b^M?;U@I<%qr+6}<$YlexQf#Jc47DqD zOv8x72M_GIFuyRXUwmQeW9Qs^#u#e#CKoT284FV6G65Uat~OY%H^`(@RYy0Sufv80@}T7UoD zw-j!I(Zue%nR@m)`mD9Q{ni^)mzL1$Y!;yhI6h=|7O6br*A`gKCoh9uMrqQ8` z305FMQ9*bpQW=2|bn*}$>X!YXK#Kkx)Kv#3Cfi|aylBq%-TQufGYeaG>e}=0-@jAc zXU_6hB4)DX;0;gdJFe2RY(if-RYN65Ma)|FrlB0z*l@2h=niVL+QBXVeYI-JSghFkIAOfBTfdHHGJk}Tn zKP7aidDlsx$}S7%M~l481Zmyva;YPNQvCAjgU!XUWl(VWM40_MOni<3^x>OI+Z6R) zt`CjyX0ee^iw+wNPgr#J4A6OcfZ+)Xp8zR6l`icAwe`vSQaqEHyZ`Lzq?yfSt-BBH z3s+0Alq-J&<^m-*lnZxO zR>+MD<$`M$O58|(-ALBTk1&h!W9E!)XXorZ&htFq=i{7EqZ6-}qJi$N_DpwIuo4tM z2{qF|mA@!?JAcKKK;(^v{$Xb*))Lr}yp&#m56E8?uO{@|0f`5}iQOA!g=! zTb+*|M$}~!A57Fw{Pj7KTmnV_p~m9M{4(%4?l^s`G^pQJdnmd*4nv*6vCPcVn|ar} zCwF_e!<%{pa-SLt9(5_{(3!$9JsGc}kwUVPH`TQ~3peU>ohJ`yrSDUtQ7I^~^Deh* zDhc?XsU)E2vV-6ZI4mO9Anhz9Z9%)8CZ|g@>F*fju*B3QcsMbH=@Lq5j_IT=SZ<0B zK}}keevG(Ned?9E&~g}-HUo;r1j6s2Jq30X$aO7}Tmdpz19J;dse*Ih95@Hgfpg#- zRH`sj0MS1)p=k9*NrHaLj7Do29lU;iVg%FQ! zBmMRg>z23U0a#N8v#f5=Gj(! zz;FFs3pC__!c7z~R%+w;rCIFgn@A3x|0aE_J>?mq&FlP~%^Brrpi&hxHWA&49sc;o zSmH!P^=;asHR`BRbb-7OxXi!pSEvmjA5!7M58R;qu?M{%6951J07*qoM6N<$f*!jy At^fc4 literal 0 HcmV?d00001 diff --git a/emojis/1f697.png b/emojis/1f697.png new file mode 100644 index 0000000000000000000000000000000000000000..9719519b9a318b4ce2b7ff12c328b354dd42b2c3 GIT binary patch literal 473 zcmV;~0Ve*5P)Rk{*B#9LvMd=op)=&_xPKpLXE^#=V zV_Sig2DzqOIo#&hk{-EeL*^3PpwoMy2U_QQ`QH0JzQRFQ=-}4S=fi*h07+fC!LfYp z=%}qvHbl%tL_jq_B!k5ih(npVeda8GQ)RT&(mb_2GHU;bMmhI-hTPKx_UE;phQ-C9 zYR7qkumGr$K&TK2M4uI}bWY?F6XG{EV)A)3V({W|cH?pO`udxiU%gD#Wis6sk}!b; zgf1Y`4?OZ>vHQCZ9#Xrpf#vRF@_8aVJ4EN+V!19-EMjtwAdCm9wq&pN-a|+OHmCR9 zLg)i*%6v{100Do98lat!2RxSo-|B0)`SXA=wGn>%N{Q(jk0ay1s_4XU!~%KaO; z)y0c9vt--b*utmM0xrYJNrsb?yvL>NgIUMB4xC@*Ahxx+`EGgXW3`iW_R`*Fs7!^;SZm)Ep{^Q4#`CW88>w&E{ifb~7_iccTXhVh{cO_`l?X zBgfgrI6=t^2R|+e1av7Rpqn5al$^KN(eVj-6hz=_fpLZXC>9W2Q-oCDslt!IcYxAm zc|+iIwJ*4N;-h{uSSb?v7RMNRvOH(2ojT8&(a4>J7dKZok~_dOT~?GGVi>=8YQ%il z=kqS*&}V-oWMp8E`Qi5LRn3{E%cy{Y4Sn}~x#aO*%ArT-yXO_G0v7m1grRci_rKcg z5O-4AX-1YSX|D8GBREFztwX`HltaI^nQZ^5uxwG8$+FHjckkVk2Mdc7_mpuQ%e!P* zO0@opcC;boeZ$9$<4zewe{!tr4-D3+1`%tGMLJ2uZk;4zt+7Zoh!_~G<5<^6_}L1$ zeQshWzr01gu*TG*Pq;p_7cVICwsy3|jk6CJJ2Xcl-piGl%g)AjU=3XrZ;N`Ng#e#d zo0KXwb}LnC9IG}Fpk8QE@wVu(bS=d-zJGj)L;e!CmyhBYgQB3y4iOB(jkz%{49)YX zJJt%L<~KuIXy4UL2fm_AZ;h8J|}IhVAp^D7XQ<8 z=+QGEf@)5)@q|ti0m^HF7Zj<~4lm!`trAXA^zK zspei@$kSBlGS;e*B;J1ZaJ931|62ND(aqOa6i}O~HVk}~udfUzt;TG!@Yf{o_fSMe dRdq?B@h`9s`DVj;BiR4|002ovPDHLkV1k1|NB;l- literal 0 HcmV?d00001 diff --git a/emojis/1f699.png b/emojis/1f699.png new file mode 100644 index 0000000000000000000000000000000000000000..d3d9cdb017ce7f4a2efddb4ef8f22b948bf2ce10 GIT binary patch literal 532 zcmV+v0_**WP)6S7N}4a8$my9lvMM7gMS$o0!P*Vf*>@6-E&f|cPv(C5Q{2>xLpc3~K> zINW!jg-2Yu|BOGmo!zVzKK^ht60-2LIz4tfHlvXczOC(cwd=SE0S$w{B~>W=D0As_ zU~(*iulBXY^VeJ4x*Wsz_(e7LskwX$@Lyq!jpESK~B4(P@5l-Dn8Zta|6OUcr#NJp10cK(jb0p3|c6}3jV-*CLi8;)Xcw0rs zYZ6TcDEz1t8~LRi`NbUVN~sByfih4A%I!+2nP1A0U(C_26nB8T0=|iJH!}F_`n%=n znRFHn>uaSIa27Z~V=Pb4q_b#PUn{MEvw%lTo=>o+AI&^IK>=v-yM8qD_yh%@h36Nn WQ=*GPq$$||0000m3~^ap2+o>Y_)oTaH*r>{+6r^miZrAm|Pg!w!ip%QTtuxor%FtJ)h@1)PLAm*8PkraTSXt-zO+o)*7#O9c;@EsWtSx^#L5@?b2-~6&6|bH|Dp2B^4Q!c{-7TsDUIIq lR((}y^>-B8apXJuT)T=1rAaks85kHCJYD@<);T3K0RWE1&c*-$ literal 0 HcmV?d00001 diff --git a/emojis/1f69b.png b/emojis/1f69b.png new file mode 100644 index 0000000000000000000000000000000000000000..b992f86f16392d3f276312b1975ea68f886cb8cd GIT binary patch literal 540 zcmV+%0^|LOP)q5XSeM2Rq6(@GA_gMhsIf7fbzN8`85~sv z5D~spKph7$3CqcjG4txRj e0-JyiApRAHwyVy!D5--00000-oD~SFBo&-_PDyT)oi--`5Z7oV*QR5fEWKG4GOpV5Ey4lU_&d$uMXd>8YZ*~gpA8Mi~BB-jL zqL3b07z_E3ZP)4TnM^D2YT7IL0!mDwW#T^W6yW zOqZ4&?@ZPwHYHmoc~QLoi&dR;3WLw}>)8VkY2-)BChuH;_q# P00000NkvXXu0mjfVpw5W literal 0 HcmV?d00001 diff --git a/emojis/1f69d.png b/emojis/1f69d.png new file mode 100644 index 0000000000000000000000000000000000000000..c33a78ce43f7c454fc6b5cb4caf5b02f02c9b28b GIT binary patch literal 532 zcmV+v0_**WP)=(FZ-Y=96I?Yhf(_Yx#=> zgovJ9b|&HuLuX4qJ0-=^(`Nax&K5TgT0u%IGWGTW-`AEdFD}=HXyOgqSvJkR2U%JF z$?MvSLkmlD?Bpm-D&9(NPo8WlkK2+Xop4FV+enxejKq-Bz31t2OB1)BTss$&WU7?y zp`1HFF|(h1TQ})=D@tj=(uff1?K=GO(y7rC#l7Vbam>*Tf1^O1?*~A@zsS_H=f|k~ z$k*$EwT=-Pb6xkiQv8?9&o4ZsfglJdm%9-Wni0?QXvFh8rl)7nTGNbtUR)d|auBEh z_kc+vBSfweISKRuw}4lK#C6>&A!E!1F{T1c0#zczM5_GJ2iynl5R#70PIkj#mwp2Y W@`qU^@sqCr0000oT_}Oln-${LqG38G+UCiZC3C(!os&pJTK;}=_uhSWMw*%;P2E5a z=m5UrFe8x&|D&pB5P1Ul*zg=^6__;?MNt$*Q4~c{6h%=KJ%Pwmz{hWgfIF&c7=lYq zfee5g009ILKn{cS0ABuf0g=mwB7UG7I0^IvN7)bto&iC&ciRMR0Q=Zb1q=c&fd-(G zfAgEbwfy=L@9jS3@-~hl;4C|20%pj&L|u73+nJd8K_ZpK74%yisr9qT#PPadN+whFP)xu3}wn0Ob2KWO=IGy^JOWumM{d$J$Y_5j!;^-LT;@9 zS2PCK4<^X18N_2sXUzoXtEMRPqB%=ZtGkCHu*h!^ zNPd8bjwNEyrAu8SkPfLqrDdQcgd)1`=(;oS{M$)P3%97}QA4+Gw{if_OC9R&>74+& z_*Es2V|9ic0MrowRp!k}!qB(VP5%Qe=R0 zROR!B$ARbUV?NBirqVLS}Or$T%S_(qlKwlB_KXnZ{kG_cQ&$|#@e zkM$`e#U3BH61nxKty{NBl{un6KaNG^U#+yUX2^n+u4S#rZk~ z5*Kv3fjEBx^I-l|ez0qjhx2{x^4&6I!Aw6vZLN_|#U;dV#d-IPUE#nG+KR@a*)I|e zC=km}u?30QBY>c(Ng(Y50tk}!k#qw)1WX2TTufWtI*o3bdUu=6$ivl^=2So;?7xPJ z$|S_gg3^QoLx3QT3nq=Z-uqURa@4&uF98JzjuILxmZp>dDRxBsknz}4!K6=K`luYQ zi{IR33e+3^#%xVKx}#8IfWv>#3N?XaE(0?_%s=`LJ?O9&BPHgd00000NkvXXu0mjf DrY->> literal 0 HcmV?d00001 diff --git a/emojis/1f6a0.png b/emojis/1f6a0.png new file mode 100644 index 0000000000000000000000000000000000000000..ae8dac813dec635ac4dd0a08b700fdfa24143d7a GIT binary patch literal 661 zcmV;G0&4w-L=+u6M2D!X zi^sZk@F<^bnc*xh|F9Y^oWngbi_t5YbJ*@1WA;uYpUEWD{zYiFCy=1?+~BA;(NTq>1Z3s@6l z9*XE8rKq!wd+ywMa=F~QuCA^p?fLeRFz{DHtxLIF_Pyh{ol2=)TI;@*)%v9%3`d)O z@V)5=H2r|4AE0gz-eo627~V`K5|xfZA-1-*KJcwx|ERTop%hOY$9bldGw=Dn&rTYR zhF)qkUN0^#4rj92dx7uIhoSCEB;qHO7r*KvSJkDq3!q%00Wkn79t4h%A2b53VQ*`Yyt-2xDG(e_PJrjA|jHlwfu3 zPGTt~SR#r@!5{@9B8tdS6g}RZxq-}5P{3z)1Z#3? znurL9_qAH9D)7Lr|BF{R>jibwnPbTM^M|6k{VD=8vgU=e|Fl=hOE~lVWWU^m@_EOb*(WH$&a3 zB9(jxV14Ao$e5B!OBosy!u!C?+vq@DxjKttu~?{9woysTEseEJqP?XB$S+`-|Fs^G0AHu3e$r6&NWytIIL zHit+ugFty{AsWx-vXNv4zVoq_&mWbu{}w(~y#5#gOUZ#zOAvgeXcvakaSVcb1L5B=_Ru64 s3 zg1J9EO)C=;Nd9mjbHC>mlh849UY|8ojo8cK%E9-X-(`#5Co5s$ppu`yJ#g0!&kO# z-v%DjVAyBnaygyJyy0&~MuxTT`xY_7zP#`I*}lHMp|D=(PqbxWjL8CdVg?an^C)I^ zs@0)Fp+FdhG}Bts-rmk3qh}P%6Em+f3q-_r?s+M93K1%m3Sk%`B7Dl{5d^I@Dc2>e z*Qbi5@;1T)8qC7nQzHG}!wYSj+v7AO*d++8tfEAy14Vurw>&pn>q-+b-HSOQTNls2 zU~u3rO+5;K8! p{1&kQC~-jg2nUP;qr@!!(@#?bte@^vo~{4@002ovPDHLkV1n(k^@IQb literal 0 HcmV?d00001 diff --git a/emojis/1f6a3.png b/emojis/1f6a3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef8875dd9da02f833be94fef7d3d89dd2c01c86c GIT binary patch literal 477 zcmV<30V4j1P)>e?roygn=3_Ymw^}X~XK~!egKcbC(2&~Y9`sn59rJ9uNm(99XNO<#$pQAc`s3*n} zw-(tgYfYXBJyFBFt-cR5G3vyph`3o-ro~s|VDDtHmE&&Xu62X2;l6>h z#HhUc`k>XFqjU-8nwL`IfHuXk@yuxo$)ax6D=tj)6M3pumo%*)eJG5)%WOEG_rXHO z4@+Bf$ zTs=yiyU04VE372K#!laSE1W#MAgLk6?0kuOIss{ZpVK~(L*Pe_w-90%af_xJ8~@B8|`79*J?ZhLWRY+z_e2M=$M7eRL0Ndm8d zr!In*=oa1U5Qxzwhz^2K&>_SqZQvg&H$@yy9mTXc_v*HH@1LJ~kRZC)u00R_YaERw zI<#<5juMf?&j7HA$O8B=2g=-oNz8LW%)?*!CStc9bQ;b>v6TqFaR7Y1*2Nbq1D3x3 z`A0Urwv#lJtY5*VY0*iznDM^g>IwF;2-hMUKlN0yxJxhJV31E-*BRp+O7{It4=^m}bZo-_HO5 N002ovPDHLkV1mQ+)ocI& literal 0 HcmV?d00001 diff --git a/emojis/1f6a5.png b/emojis/1f6a5.png new file mode 100644 index 0000000000000000000000000000000000000000..4fdf44e23c84594291743cda225cc67e257e3b2e GIT binary patch literal 344 zcmV-e0jK_nP)ncrP+u<7z1i%(Io4X1&KYJ$(RnQC{shjnAmfCkm%KU04i z*Nr^~9M!ez#tvh^)vRV?Z-tuCJU@&{KYm$T)eQPgO2bjg`{#@{ntd_k2)D|UA}*%T z*=e!94cH7{KxWdwJ93j@+4s76h}n6uTAN9i(*amQTJsDy>GA9R2)!qAj}rUXP7GGW;dI%Pj7u*9;;11e;WB;X|*UEQ%*v1=@{>+}pF5>!D*Ei=y3# zIC$=p6M@!;5$kyTCyS!nixDyc-Cm5wqPV(swBC>S%b>C-qQ@KT9d0AQ*H1UZ{Tb_c zD0cU2RO=-+>m{D;*U)$zCJd%tzBj^43_=be}DQd2+YcSYuDUDm4> zBg<>fi(gKxjY{AD^7Dr>`{c!U|E%GhHt*`knh38}Njuf#Y0>QY_SUaAE$7M8xf9U- zY`L?EO#jY3y%R#Fr5{##tTlDl0Rx??s{(FTPEOoO({9^T<_S*twa$B`W@*O1w2rpN zhO@Wd)Z3L3%nVXI%fVd7E3|Q9--HWIGoG65O1xdVK`YKKXsPF z`N%1&n3QD|7qS|j&Mi3%Q~9v_rO=Ok_CG3?znJ9P>Uk_wtF&?6W{pr*m}}2G(UG~n zd_w1%LCieNp>yGyfik|BrUR zbw2;6@W+cHpO5R}UL5@X@ak{1>TM5hRq#(gr#b2Jq%bo(iy-d}Rlk<(Q97NTcQc;9 zf?3DS{o|s=YZ%w|hyIhWpWmpVCb*^ u+%VmNVZ#sKXE)3hPX6b7z*qm1b)WIqKdidfc^McO7(8A5T-G@yGywp!aviGx literal 0 HcmV?d00001 diff --git a/emojis/1f6a8.png b/emojis/1f6a8.png new file mode 100644 index 0000000000000000000000000000000000000000..04f88fd7bd5b16637c74743ac0d46a514d91356a GIT binary patch literal 347 zcmV-h0i^zkP)2@JPBWc~n^s8>GsFxrL(LeXSxl!Hp7JKw zuq^zZ2;_K*R}bTkh9Tov45K!l;?;wwqveos)PuN-r+7t@wloMCN0FpCp3am^5NS&o zFs9B-$;4KoWLC|pDgusg#5r(|A5>SOWL9>Mjt}P04K?E{2e`q2VIIXDTAWnYUl<`O tGfWKY3bdG9%dRiacLbK1fP*Xk>J?>>H8^1~kW2so002ovPDHLkV1kG=l0g6f literal 0 HcmV?d00001 diff --git a/emojis/1f6a9.png b/emojis/1f6a9.png new file mode 100644 index 0000000000000000000000000000000000000000..af55b601f243456f3297e9e34810bd39ecbed95e GIT binary patch literal 405 zcmV;G0c!qO>_|+m_>51=sX^xjjT0RejiDz<(92^~|c6{^OLiw{GGC8lbnl1c- z!i0B^bIS|DMdT&z4>|bAuE)1EXCIMky8c?!n1L=ROq^pb8uSa%P_{?_SgeFh2W-x8 z*zMg5Ie1G!Wnxid3QQ9wNDZg0xD%R8x*sTw-E;m|?lDB|lYsi)ZWMzStd&;vmiUv_IF zS(hs41Hpg@21GC*f&pLHF1@ESx5em?T(@e_u^VC=@F+1cmp?6xuE zk3=92zvsvu6IM9pu3lSUNK78cvls33%{weNoGPV~lI1yrEJpy(D`Pj8+Isi)Ltuqt zDkg{th(xTe@pHS&Zm-7?;MIJ(hkdpW4%qGWsRjYEx&|Te6RQhqbe&N$(Kr$7go7ZFyhly~k1H1?O?0_YpgBiAb9eMSZZ(qJ50$DmhRoGhJpqnI^2zF~3 e%mQEuB=`mG0F_lS==pyD0000K#Vaq z@`va`VhE`&h1*Q3uHFvjmd1oIStbTd*sdhf``Y8>SDz<$7M2{4EX^P4Up;>4@Cr`o z>?k8@Lm7KR@1r9}%_Qa|KVl87gHDN4v=}QF@f3Z@9Wf9DL6G_hf1yXNG~%qzrubF4gk2maLkt|WN8L6PD-BL~ zuC^&szo}ZqF8XAMfj5QSQniYw z=#wD^X37UTJB{+EnYb)kK@h|iE@2maGE~k>zA#fp?fS8WN0K$XtMV_oM-arm2l!hI z(3hOYJf7j3_Pb+?j}pi6q4-2Rp~fh$Js|hR1++T1aI0N^=RL|ue2hhWF8K^|#avh{ z21&lfyv|7Z694r~%f5+nPV$3T!?I*KI`PUgY}B-_hlzbXDKAW@uT!~Ma#gJ0q|S~q eQni6`y!JoE@0(4!$`Wz_0000jw0wC8eZ+X;_=E89mUktnY$O}FW$o`yi4xXg)3Ke zbPc!2MGSBw#7fcKC9D%ah)2>YW{U3K;3i&SC}IM=8ams?LNbjVEaP=e$1=nrp5sus zU4`RG_wj*PlCnr75{X12kw_#GsloL~4UwrV77dB(D&QSq_@42>h9O^1~#;9Z~2$m293Xx;y?Wa X@Ly$TN&06b00000NkvXXu0mjf&l9Jv literal 0 HcmV?d00001 diff --git a/emojis/1f6ad.png b/emojis/1f6ad.png new file mode 100644 index 0000000000000000000000000000000000000000..b20500a4a62303d2bec4d0e283fe07643ad687a7 GIT binary patch literal 770 zcmV+d1O5DoP)K~#0YK}cI?0KoD8_uiM9nADiSYc7V`mLW6kN?JCh3^p@xmz@f-V~55% zm>|;P!NU$Rb_lgX8M{PxS+_yvaWJruK!+})YY!PFt0R(-!`g=F5|gJfFYjxF30bkf zpZNaV75+zvaNjBCjK2&-l7r7(uW^n+All z`+MWl#SC+$EV1Aqqdf+lDwPW36BD@IZd@)G_nvRFxxY6K>WV%SxbXRxfB!X`QkGb7 z5K4-*Y8l(MiAJORk;(Aw{renQukFypj>t;O>fg1RbXu#vfRZ8>3_&T&TJ;6FT#nV% zRgUdgO)4#`U()7uIk|QFHa?$^PBq)Xy&s%>rPcUlYm3FjMbhasi9~{9(yPnDd*Q1C z3kwUJq#h14J@*9{!y%?-XDJqoBoYaH(t%f(1?fOb`b*CT;_*1Wy}g`df9Or#|1HPn zH{TJ@JmSc^9zPDWqy!cJ*y*3VJ~bsRrFfmu9)sB319GJ-QV62PSqoU!X95?VopE&a zX+m86wYJOai=SMvf`o1C6|{` zuaQD=18C|qf%CLA1>(ndJU%1RV_Y`vmiCWz$boGm5cuUOMtclm!H_lV@hzjc0hqLj z{KXG=MOX+id59gUw5)#Gyt*tn(2}55P&}r?OW&s#uJy`>GXMYp07*qoM6N<$g4+Lf Ae*gdg literal 0 HcmV?d00001 diff --git a/emojis/1f6ae.png b/emojis/1f6ae.png new file mode 100644 index 0000000000000000000000000000000000000000..6e09af045bad0b253b6c67581e76e1c68d4e2772 GIT binary patch literal 519 zcmV+i0{H!jP);6Gp$ ziYVO_ToeRxbaT?d!48V(;7~+UTY}J_F*)t^@^#num6RxHz*O;h#MI>nR}#bd>wwF@ z@qp>>EwQjl^X9$8?1h-arM+VuU9?VBBk+ykgRL*Y^jV8{3hvmwc?RY zS}Z(W=JDG#23?z%pFG+=e%avm^A(iR+*>TtP4XAC2Cdm5*iQ1FOge&Q#Idn7IoC!5 zgRV_$Q=v3ytFhz^(=%Wxq+;Z?ayGXlsNDzY!5BO*IJVQVU9jxu1mlpcr!d>T3W1002ov JPDHLkV1iu8?GOL} literal 0 HcmV?d00001 diff --git a/emojis/1f6af.png b/emojis/1f6af.png new file mode 100644 index 0000000000000000000000000000000000000000..07d027084954f426a8a9a2156b6bfb361fcee58c GIT binary patch literal 829 zcmV-D1H$}?P);)0^{!nQYp2!n}#7iAE#wWPz@2twS&XqM4-on$05NqgFylkc;E z2DX9EBYx-%@&LiUC+plN9&^=43Kgf5EneNYdJq`}uQzp8ms!IP=Yye7};`bRk}Nv2jOOz(v5;6bgihUM^%09%yVP;(3&sU@%C1 zeLbzMt(c~XqZH@wE^r~6IfxKZ5NJR!WfhOTfBSFFET$N1576!PQf+o zK98>JDB!Dq)1<88F;GGM!39QMA_SPdU(y)<{*;0VqR>&yKSeOYna*uWn?T4HwB|lK%dFLZJ{NBO_Ebyc&YjM_K;pQx-4&!u0es zHO+<#uWn>C7g{XbA;PyYRmJnSD&9TSTw#@Yj1Tg$W8?U_RHmj()y8am}SL zVhC7gi%38F8V^$Y5ZZ|{GE%5GCR@C^k#V8L1Zon+JootzrfWWceAb1x00000NkvXX Hu0mjfpU{cV literal 0 HcmV?d00001 diff --git a/emojis/1f6b0.png b/emojis/1f6b0.png new file mode 100644 index 0000000000000000000000000000000000000000..833d38178551f5270e460c4470f70930a25b96b0 GIT binary patch literal 474 zcmV<00VV#4P)!f`gl@i(Lez zB8B2V&`mdsS^N_ew4I7Yv1lR^iiCi*H9=`gV#)o`Ljy0zT^FCnD$Om-JFd3~6i8tK zM}}0%VjQ{I?j*%9_J^D)S4}9t$FfdlaGxSe-s?oTT(!t zLnvk8*qSKfuLx6K$nb2nMrE}|apWjvZE_LmG#eGiQT<6 z&AY7~UT!u>BN%K^B-vUaT9ZXcn4TzNI(u@Aw_Cep5fWyn#+jWO$Mp17l`M+?q<}8} z?ELH!MG>YTjA-q3$n#EW%YxBD9;GY>{2-*=>5-y)&~85X4cTsc0o=~D Q1poj507*qoM6N<$g2)xplmGw# literal 0 HcmV?d00001 diff --git a/emojis/1f6b1.png b/emojis/1f6b1.png new file mode 100644 index 0000000000000000000000000000000000000000..9977beac58b19d657a8dc2af78a9d9eb91265968 GIT binary patch literal 804 zcmV+<1Ka$GP)_gILH^@Kh-CJ#GP|<3qur{O zQ2s6)qH-`Y?&}#zga+mekN-MKy$Pa5iv&T77s1+wWk#>$@A7zmKVPk7&~+Wh(a{kz zGc&xh{eztEJ9+8#(BQB@T>xs@)xIGR;-j=>zIv`J$oA0zKRzWgUfPPq zA|I}-@PhxuMML*}EI}kvW?ri+McOi*YM+IDw$Szcad)y&Ie z_*6pHX~u3BN7$#EsSj@7USB^}1b#!yNT2n1+0n|yxdZI&_u^1qO_Opa54t6P(~ zpmgJiL?TQ~OkmqK&1RExS1T0dFB_JLU9YnkHlUCtZJ9VCz8>6&j09E_p@F#@-zZHjcDqq6%4- z!Uhzw+^qaTA~axw_*8=U(eU`M&-b0YRIAnKbXcpQl)|xLnY>fTvJ^J>?qHuMJ^mDm zpTy4TDO$V=);>GK}tK({7y iZd@6mR0_C5hkpPdJSOF6zUsOF0000x>*`Dp$dUnqFekg=He}LDE{}4Y6`6WmN zmB#afL~RzB;2)T(h1L90CEofONNcymBU7p`t!e|H{3ZedV)@CPlPNFikl_8Rdz8)N@jgDKke zaC&_F`q%!YjzYbnZ5t)EB7wUzfqDbP3aM`5z8g$7+60>yEe57+H2r)uOm#nU213u3}EzGDdXQ66%aXGXrCw zDTIrg4uYUbAhjjVkxAsHzL+!!-?XsfKzF8RR~cHk#)vq3Mq&<~%RElIKhM(%y;#xb zBd!%!@GpWR4kfiM*JyHXCF1)@$~4HT5y_9Pj{pliKt5*9<{xPYap~61cFV=JkQ@ka z@<%+zo^07z_N3Wb_PVX8tvuB-imrD85t0lZ`vH>D5Mp9-YrWyruZz;{-7q^^0v*tS z9WBAnyJ5!fuS${-N2}7aY6M~&M9ko^7lROklYg!^)MP%yo4x1h>hC2hD~n(-NM2qZ zm6esWx3@DB2r##`fl-o*tIXLp&?jV|;?~Y~%jr8yI4wE!^i_{E5M1KXC5C@4p=ny;77%X>TnPW zg*e-Fmc<_y(RH0*Fv!>8O=4(H!)rMOeY5*4vd`xuH#e7th6YkgOSt^yb)FBcGyZLW zFBayxI(8MC%|>ZyDc#-OOa*2+8CNWZc3aUqb;AR)=gb+##>QxBYNDf~gU*Y+=#G6H zzVSWJwYBi+S5sK6RvH@{`RV3OJ{lN6T%SxxR>h=B;Ru01fZEzxd_Et3zaOK~NI|_D zLuV_gS3bjjXAP&zMV;HtY#@LXj$l&5H!q9_U`lZpEJdiGp< z`z?-N807qmuP{3wKv5Jd>MA0k`3)X>$!f}Wr1g>0t99NDWdqq6S$W*D3eo(E-YOEhDGR67fES4OnkhqK0R=EnYga=e`FyTEPRZU znYL+k+(5+Ov6qk(6EI$F&bB!-Y>!8@gmf<+WmnS>2&}Tgvl%u%C@7B~H)ju{>!*MS zNg{OE#eWliYe~00000NkvXXu0mjf D7zwu3 literal 0 HcmV?d00001 diff --git a/emojis/1f6b4.png b/emojis/1f6b4.png new file mode 100644 index 0000000000000000000000000000000000000000..9d298195a4dff138a32618eef9d7a5b86eb9281f GIT binary patch literal 836 zcmV-K1H1f*P)fH$JZ%PCjZCTz5@Upjih5xd z;+4b5jofIA;ewbr^>Q&$Tmpg`br2IF!7LKJFlHO!Bn&A7HrCO0UDx&S_50q(5I55h z6MjEh+0ces1lY}ybsL#^f`BCMLcQGe0hSOD0O2HnPTQ>fQL305a2IM<&rvM7nu@KX zXmI%hv8&vulIO>gUc~iS5@7}a<9|?mLjtu9?hEe@2370+!PJ|_PUXRXP(qIR4gY(l zFpm?6QG-?|x^O31blYXoI}N}Cpztql5%PP_uU`V7u}J;kTDa4hCaZZ!SF59c6(5(1 zK2d}xpNFkq_w4Nww1W*gf<-Fq*r=5aXzSU&@Vie)9RKcUW~6c={ZVJd|JZ87@@YU{ zc5nqA{-d^*vbc>P2Ycea?roccR@KDik#h^ZiFW%DYbJEi9F;yWFi0gHa`ZAm0!t{- zwG+1m&6Tki6OjYjL&vQw9T8GH%@OaFO;05o`Al999|&C36vxfRT zb*MoQ9U_qb;mC6>r_(=`gI09ks=CfzRB3OuO5?tX3+?9U*&?rb;aHk4{F=+pS`02| ztzVVPV=F!g)mL zv#aVlUdvUc!)2Y{B>==3JkaEC>i}?NZK(UlKwVvGa^akn%>VgmK4(}-_kQEv=oSuH zjTr#D4QW5rR=;@wKwJTES+kufUAuUR@eT+yKVR?zD8&I(qB%xGv5fPn1mVt zV7sXHYo^20+Wx4a1icSnCjbfHH_iMu7#Y+eGzg;40K@@!0KR7C5B~u?YDM7a_n^rD O00002HmRZ1@>)rcYcC`;d$h_ z*N$+Io3pIS{pP1}wFO|2J*Gcr#7?Kr8@4wmN-hJ69Y+7_Pq0r`YpW|i3`}sC9?RqW zns>bY?2t&>HeQ&#q|B;wfC8TKARhwC2;^<{6;i>YCr-`RcGNG>V9d`hJgAKpb7OYh#DX?Y7#x`flZ z^v)qotL%}iS@_(u(0)rlF>*wTX6|Alx_%*LZ^iCr)W^53A6|Jl)BYZ!43uc(eW<@$ z2$fx&c!E8a6Wr+1pLwV4T)`?{0Hh+SPcM0T>ot$B+VKr-4^Ba*1}*F3+0Hw>-965_ zX0WDt*`H=Hr`fO78eMNDQ!JcC$!#uxUMtz%RDqp4x8K zj-glkVjo4@e00AUrT4}r_g;x`^Y$iH=j-VlP0$e1$TnKM|830m zZf~KbmI}1?)ljokBp3Bi{iKcQ*I7fcI26Q9m3cH%VIV1ls&rZ=(p0ZFwD#4IS}I_O z2yR)Ci+TBDB+9OeqtFeZrd3gICCO$q7A?Ww;Um@IqZrU}%L)-ei+9<~T}_hLVLNQ_ z_b(ZAuiy`RXb(ADs|s-`-pIYUm+4Z4hut$Mu@N0dn{(%$M+Fr%Ui&^aa%DT}IpZGv+JIClmKgr8r7 z)tH&;-p=z|@N#hKaNEJw3ye@j9dYE&Hmv4R&qPZ@n-A1%uB&H5uP5~&>JXFylme6j zlme6jl!A*Q+R@)`ChrwtwL^Kj)(0XEB7g`W0*D|SrI3VWyo-uOxrtE?G^|~MpwOn$ z%>at{ix~U18A(Xlj+c z&^m_JF|>}Mb&MYZ0CsV1wm()&cZv9JMs(GBKCI`%dOob@Ly(@w{}>&c^4H>trnX>f z_5HKn=<}Nw>COW;@ry{keTqcub{aTmK*DJqFO;6#xTe31A8#<`K6@~T-$e1l82;rv y#@KaCzs`e^$r!VV!%dd0$pP43VN?dgAKwAG0OXjfrUse-0000u literal 0 HcmV?d00001 diff --git a/emojis/1f6b7.png b/emojis/1f6b7.png new file mode 100644 index 0000000000000000000000000000000000000000..e03e96ad15ba88e17b49709a6ec2af2c233990ca GIT binary patch literal 807 zcmV+?1K9kDP)10KoD8^W0rsm!w&4&4RGnc4Zq`RQBRF-72_fGx}vh**B5m z-aZJns0{3IQ1HW`DHewa;<}H5v<1P1f`e0v73OG!v7~dO@zk+y3#4t9zFc#8&J+y9 zp}(K_x_v+YBE-J!4V%txGoFbrRophJf|_m{NK1I$C@@1E{jfj8KQ<%8NM`lP>EVZS z+H|SFf?H-oNH=yL^_#oTgj>(W8Uv$v-uoa{sM7i)9e~)35ZA63^Cx?MPs`c06054h z&Rx4Ow{GQr{xQF;l^9!iAf*ro4*Iqn5r{FMEWrc8$oIwkv6p=z;(=yrCMG5rA0Ma2 z^*la(IL8-x`xt@|s&rs~X7$Ob_x`v=JkZQgOAPO?4A+Z!ve_*E!_=ED6)2L{gnwX+lDc^pq9kZ-+1{$i4b<$3!0`fy#B zr^%qE+acYcrlJ&sgM(a4rN{&tcyKbohq{USc?QREs0rx?K~1-%fv}GHP3lFXQBtWC zJv}`PeESX0UK-%?&I5Ecg{kQbm>3940$0w2TU}iU>N$>s=Xp#`P4V5MKiNL?F`sqp zCD9Z{7lPBxtuBbKB#3mZF>tjnvV;FKaNz=#mtMerGtN*;jL%zNB-R+X3jC_|N7|{f z4*Iqn(WPv^xx7eWaglU7O)i&XL$O$7Hk;+gI~kfDFOmp`f54*`C~N(Z9aNPCj2-fa z!tti?-rM)?${Tm@;3$PaVCoG#H(%gg<#%84hpymxy}$}pBKQ33JY^q3oLxu7mnv=> lRY6U+4WuPJZxooJ&fjS79|VAr?ymp<002ovPDHLkV1f@-f|URO literal 0 HcmV?d00001 diff --git a/emojis/1f6b8.png b/emojis/1f6b8.png new file mode 100644 index 0000000000000000000000000000000000000000..956494ca0877e1360d81fdf7e6b6ded9c54b9f54 GIT binary patch literal 819 zcmV-31I+x1P)QWH!rMI+8R2aiHsAm?BCN(e2D?Y&dr^`h(-BB!V&iLm~hH z2tWX)9@W|mrM-f?V_PGSwlyGhN;nw0SsV3A^-uHdQ@vOl=cd4EF9$2k=;lESj*Ne_alImS7_1N z3<5C}pg>}QIx$_f!)dSJ#==3~dZnE!*H^jgPhI2q$207FBtW7gNXi>^b;S%*qZ1p;HyueCjorUYGH25VqZ>{n6p@4j+7Rg_ZI;H*c*mIa}t;u`Z@&%Y63j?}39) zZ;wg@_gHIr@y#*59$93&+ra+ET~5Ez1p=Pzeux+Lw{nl*9};Z#^LL`9%kvfb&dhN1 zrJd|*bC6OH-r;a(ttvsA z)0#PZ{#u~xu_pRnZYR;%%oBUI5NUsaOLG-wuT{zC5+$ceCGjzi1W663u|ZBajVgIQ z7cUjBu5#kjA`N~;gI{rCpvd%ZntU$4>^Q0y7{>qxRR7@+NI(LLCBKi6Oiyd(qc0Z% z<1@GU{^t^t#WML^qU1EGBtFKGfCMB+YCsLB0W~(r38zsdzsbc*SC^_RELO?q;>(Vs xdVz5aU;qOc5O(TWHf3xCD+c&i79}Rx#NP{jE$NjlH0}TZ002ovPDHLkV1i2#fVKbt literal 0 HcmV?d00001 diff --git a/emojis/1f6b9.png b/emojis/1f6b9.png new file mode 100644 index 0000000000000000000000000000000000000000..43d0d168ea3938adb90951cbf0fae6567feb24c5 GIT binary patch literal 407 zcmV;I0cie-P)UqK~$x|Jxc;{0Knnj=^wT7N-7c(sidgJ2qG|=v!Q~9@FVoL*3w|3A0dcV zhl0k2Xp*3*p(vt2Jx+u3rS3c$lESz_IONWVo=1wTA8h&uqG>?pZ_Gwj-S_whqG>?p z?_}R#G%Wxb2R`8?m5gIaWv*#_ed9nDxR{?DW@BLr%f)S;?1PFEfs0bjr1ABQ<+Wzw z#)E?{pI~Kf97&RpB#E{83A+3OCxSNd=?JN0oLD$S%T{8B<=Ggi%r)7^B6c2Z#=?D^ z>?U|Fy_3^)T5_7sQ}K=Coh3$x`mht&6v_rmho|Hb0FwU|Z|XTFRa&ody$^EmTmOrr_b5+_NL5@&gVBxiX6q$Ej^WG%t_ zJqmAMp=-a1sL2U}kNaRPNs1(E>H7gz8*CU7vD(o01JX$TlLC5xOG5bhE9R_4#GJJm zqL*2{J$Z3!^u{8PBSzQim}Upl?4WCPQuMz2t;#>Q>V{L&#C?tc00009) literal 0 HcmV?d00001 diff --git a/emojis/1f6bb.png b/emojis/1f6bb.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd688eb64c2d277fd5c8af31587abeb1a8f2c93 GIT binary patch literal 592 zcmV-W0K>oDhhI zox4PXKdt&PH68?VTd~ABG#?ul9ERH6v zASP=(Epfo&=qv$o30RbcgN;m$gy`|sb6AhJo~e-#;b0>bEJ>MC5RLfh^EEIUZs)Mk za65gz2BHxkO0iE;CItM>7SK{V1rA%aGiWPz76khwWy8H~guE77q^pU`-AzmdvthXX$Kq^Wa7gny0p!my0$J zU#y@>O6I?%NM;H+N^$@BBHDT?M`B|OM=2(UI;b)PniMcG7+}|N&?FUo=d-8rAM?qp^o6b{pXp;ZkkQVB@MXc(rJg-YHU&78mZ#jtPhZ e7Dtm-5c>m!V6YE=q&G+a0000uouxSoU0qdq=6_nFK&Oc_3`x)2$4o7uM<6XX_lQ5TAcS3_D~ zL1zd_`#bvLRdP39Bdu@vZ*Cx+pM(qp((@4MBMq06om+_agUIRLL-gS~xrMh#?>7WK z5#_DrTYy7IrvL>uAdyak^g%2GZ4ImfZ9=vWHsGIZ55zLi1|I(bRhX(F8$5Rq00000 LNkvXXu0mjf6}8(= literal 0 HcmV?d00001 diff --git a/emojis/1f6bd.png b/emojis/1f6bd.png new file mode 100644 index 0000000000000000000000000000000000000000..2171e4bcc1d519659d460146c120fecb6980ca6a GIT binary patch literal 432 zcmV;h0Z;ykP)Jb!7J#O{VYiF;(}_G3h3E{bFRQ33*6o-L9^1P*ge ziiLo24FAb+7A2D*g9zfie|@!FViHR#YU0{(hY?8QQ zA;^DRS-y9LF@%&b-|r_3Dd+{8d#_GIyR%;lRJp9GOyayZQGCjPrXG3q8-TN3Y2Up$ z{~f3>LH)SJ{?`Kr>eku~z>zXPyS=Ed)qoAT literal 0 HcmV?d00001 diff --git a/emojis/1f6be.png b/emojis/1f6be.png new file mode 100644 index 0000000000000000000000000000000000000000..03c8928da1f634b9d54c64dc2503cc5707393ae0 GIT binary patch literal 592 zcmV-W0gF8o6_k zx4~J~lNs(^?%`^02d~Gb@i-OlhcB_bwn1zo&EtVy?)tkK=sQYRTRm@rGpJZ1O;x3b z;|KP#vYzC^i58497rq*UstOMcwFc|S3{M8mbELkSha+D|q;s@4)*^&JEt+w{W}Nn> z-9)VW~UqF_9NZ4wMcxYgf@l!9bB$LTg74_=L- zD41R_358=MQW<_OM6qqnyKl2}xA_>GUc}a#o6kNFxN?SJe-{G5)S`*jAX=_J)f70D zL~F?9Z8k|Ea4JbUo2N(syDB|MAu!`9wALv8$>wZI*;4Q_K~$Z=PiUKU9LMqZ=Xsts&yzn*(mI_u*4a#*yHwOMsXa7UT5)r8^&n$B zpa(q&o~CDyf_K?f(r%L>R_e`%?lJ^n;6Mm!ONSGpY)2s{*HgpZN8I2)1dr{X0nL)qbYei9Z{y?R|&)2U%W4L+2 z4IaQV12ZrKGwAhtgCFYkpw((oE{}6yYU-d+V#cHyn1LCXff@KmX6KMV0ts9=#$Y7B z(Y)1oJ)bXRip3IP6iqbK^f=g>L{kC@B=DbmagKY2**%5r!*5*d?VUca&Yh(F>*i7} zU&s`TCBi5iZ{A6d8McOK@;Cp;>>Lsd#`YCjPrkP5{LB^5&E1Jgpl*7p)!1Ch=L?x) zu|yb!6U{U|j@g<-Q-J^c%p8O0p+f7aldH}T6R>qj=W%?tTb}wwy)%Ee!23odd+X!jg6&TzK|&v zOGHsLez()PG!g{Ac{_(rd}_gH0=6!XWpl*xtSYf+#(NTx@@wzae4`Om&E^UWZ)_qP0z6*p8YQI%LUBbGrrPRh}WwkY~s@1KL0~=_JY8@@#W-E%U(E53K*Rn- zu-!NXOafm3=YUzvP9v`I0736}?$J9Re8~SH_{gC0C-HGTnm2r11^@s607*qoM6N<$ Ef~t3Q(EtDd literal 0 HcmV?d00001 diff --git a/emojis/1f6c0.png b/emojis/1f6c0.png new file mode 100644 index 0000000000000000000000000000000000000000..b7b884a311cd377301802b851ddc3071ef9bb524 GIT binary patch literal 512 zcmV+b0{{JqP)DX@(a_-1QiBjd zOAa~+K@>&_4Q@3xwAfH_QAKU=o;c$4;E26Xj~{yoqFsrKMpYJTadaWo2e{^8x=W!Aa$>c_5ZVf+cL z_EGv1o9{jHYQ8ymn@xPG?8)ZZnm8BY+LaH9Z~2@c$UvWDf^U~HU!F|^%3tIgr*e({ z<2xK7?s;kG@oTvfN47%r-f+^&E!KM<$0tZ6MIbxCR(o(*#}w28hT5;0{}p2MU1z0tR*g7&EhFHX-~}2gU?&pNk9p z)&j0psEiE~q)1po2V)(698 zqtusFNXiAdiCm5xsgIE%%Vo-d0?0y$-v^`d89#sN!t%*xV=+oIl87-9LL|gM2$2vX zAp}BIt$38Yl@+SP06hNMl7XVZ0ecFJNjegcT2 znPf$=;m%ICX*HYgfMt&6{q$7pt1}a32y`EKB&p9o7{85yhh~!h{H@C$6X0=wIM^!7 v@YJXNwlnK+K#cKbS%w!$;_f=<*4XnCN3gf#FR`}s00000NkvXXu0mjf!o1jO literal 0 HcmV?d00001 diff --git a/emojis/1f6c2.png b/emojis/1f6c2.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ba36c24e65a05d0e999ab06febb696f355c3d1 GIT binary patch literal 634 zcmV-=0)_pFP)mHYsKcA&z?R1T)0>wNuQ7GJaea6H=JI; z;Qs_sa#hz2rx!3%b&Wj*PWBb&keZ^=);-K73`BW#z$h))h6uPa)5*z7r#RO^TlX*` zg0Im-M*0?#*-CNkVJ~z3kfF2c{E-R{m%Eu*_`%KgJ}P&GQA*Kr<`6Zdd5G{AGa4hj zViBjaM$?3ndt_CKrxXu{|S=n60?g-p{gWap`0=_d4DXr?W;x zxc=xRt!L|Ks4b(Rwv2?Bt+@T9pRS=Pe2pG7O-Rs5GCJ$0{_ZpC%H0&_Wf2HQ*t^5Y z!1w}PLsR&gJX99C7@l4vL1&$%NR-Zj2@+hH=`5QTzD5s~g)Y|9*~GGG;cN0xS?FRT z8W7|kjvpwZs>p>Vf+m6{!h9ganxGV&yWfo91q?QziQqKS5aEx&(h5;476h*R0u6w+?;NEf9f5C$Iz_LM`}HP|FTeg zVL;*kWHIRzLh*$Gg&lZntLQ&_1X-4_Ti+}x_nuFL1)#74hp1rS!ZA*Cv{3GQI)`DJ zir_CwnofUo99N}4k|gX3MGf6B5$qz9FL3AFQBDT-V)uA#jt8%&k@*KB6LBy>$TC8f z*(hj?PA*`n@O1XvWf#exIX=#(Fiex##bpLwyk~JKgGKO1cVHj!WSXxlYm`&HwH)tg z!6{@CsZ~n4!M7hdwun7-E(UwMcr}&aR`eZqtqpZNxq6DG`Wh@H-Qf1KacZg@oIbRl zk%>66EJ?_cghR;KHTx8XLqQtdH55uZCEcJuI?m*LibyEP!Db&8!8YouD;c`djq0uC zVQhv#TLUjY%ro^lMI;o&uX>nCEMpODquME`u5>W;W|l{>Y1$gyWb#EKp&)+MgPqWH z1I;ivpnAD+<}h1gpAw8tE?@$ge33{fh+p+kPNZ|2Tz~qO!QL(|c6DI)Ykia9u{o~w zbmCV%*k$qsEK>WWp*28hZ>mSBaIcaNjBOzfiOp|yrO;OXc0_X$6 oiPWmX4ze3X=Dw^@CJWsB4HIs}A(ePn(f|Me07*qoM6N<$g8MTI5&!@I literal 0 HcmV?d00001 diff --git a/emojis/1f6c4.png b/emojis/1f6c4.png new file mode 100644 index 0000000000000000000000000000000000000000..c668ac2b6a6518cc2629e650091a9defb2bf261b GIT binary patch literal 510 zcmV$*CL@CxmFmaSFmaaEA3B^&W z9sCF4<{;=GXmNM5lg;Gf;s-|D0yY_n38cLqX+G|KZ6JXv4lQ|}$lThK^|+lW114wV z_nNzp^|+lW112X-#dJ1Smq{h!3>^erp1%7;r#IjPGj<_U7J$h==4UPP&NN#)Rkn7j zTz00JpSAc8Q!tWuY`l_7!ici6lq05V6tZaw*)%a-V`V8v!ieIPToxRgF`bdkwHp+& zX+C`Wg;% z0GQdC6phv)3WZ~v)b{qV%_)XjeuwN#ibm@Yg~G8-YJ2+}^R>jKYi;e^`CILv8xN&I zN<};9GSuk}==25*wSz99R7k042VIW&z1HrdKadKVL}xp-q5uE@07*qoM6N<$f~=n9 A`2YX_ literal 0 HcmV?d00001 diff --git a/emojis/1f6c5.png b/emojis/1f6c5.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0d92aa521c2e401f0cf8bed6a46a535baa385d GIT binary patch literal 554 zcmV+_0@eMAP)h zSzS6tF}ep5b(4ZFJB3tGl$XMF7@EvGOH;m1m}+LV_T>R*Pm*QXX&r_yp3Fq9m3VOrwvywUu5+4Br0qg44v%e zUg|wH$H5gaymYh%sQdP-z|!w!Tv7Qe7M zGrM4sohxwd(JOS>xdOLF$4O7;sFOlar%HCkiZuJpC&Mvnj>B4pPIcpwLJ(>8Q?e_T s=)5?RFnyk+;ZY|4p=4Jqt7PB!3)!NYki!r+0RR9107*qoM6N<$f;_hUn*aa+ literal 0 HcmV?d00001 diff --git a/emojis/1f6cb.png b/emojis/1f6cb.png new file mode 100644 index 0000000000000000000000000000000000000000..b706ffe5393533d54f18d2205644fb4ffd096687 GIT binary patch literal 576 zcmV-G0>AxH3Ap^hN*M^KjHLLBpeZA4P8AepMM(R0G_GR1 zW-a#_m^0(MF0kH`H!tt!UnRWaaw8A|mK@iaLg)p0n;W~YMWYQz0?Tcu#CYLm$}+j> z$k5x{XVVMgJwPj90|F>e03M5QqdR$wSfoyD-=oY>lF3cEcb;FlS19H?_?G|?;Djp2 z(_hBsni6|I@RLQ!>yMAx3dMW}o0HL*;q8Fh;$Vw|-IVe#f7SF=AY3dI*@##|Z8FB> z^3%k~O#icYpYBguc|UtjL~5&QVr<3@xwv76)xfI?T)W2$2}YIcBJ=?gtBztELs<|6 ztavMgV_^hAQ8ZA>M66s8_&0+NL>1-&U7yjbsL&Q1Tt;?7$ksx{c!i O0000yNNJ0LT%$=$qPZsLRYXBDMA6mf;oaNGkICT`RhD@rJJ{3y4Or$* z?z-ICWKF?CZg?TfgT3f&w*0Ng>reUouUdyZ-0qn1;wx7pX|3NMu}`ah{D; z#Q|y+%w|u1A#)tfgXREqbVy;=@Q?o>7*RQd~v_AoS17z+4!`0viwT6G&g77ygLUn0BYg%dV zG#d`Gsn+o6$r=(eBxFd)kdPrE3)F$PY!Qi*2g+>2J{`O`1x)d$OTa_6VMypVkJgDD T}Yfq3f>>|mu1C9u-ykG9m;BY!Z{q5`(?*eEE86+)0{)Aw!-$*BP=bL)L3+J0Es_dK@M= z@GTO^(QYkUj^{lVU+;_z%ES!JjHKf5AbMGc35Tb34Eoj9V}(qI{|@q zG1s`}=6+1!n_DtR=a-BsP2R$r&Gm)1TMdy*#Eg4admf~sZNnTRIN)*A`!C-slg}4N z)Sb)S2{AFZi{VKYc zlacH5TgJcdL>ZVxO+(ix9A_W^zW)6A;`gy!5td)9+`?S^;sO5|#2EgwDl-6q1Oo$u z1OoxU#m>R-izZQ*rO@zDXsET+g^y2Fx)%K=XXEw z=XuexJv_NPMR`Mj3!TMOTnsSUw?ORcCN_m#sz*}O8e;0z3KK(17&|7mOI;=8hJ1`X zohLF7Bl>oY>XsnYEd{)IFpW)Nm$75=`1S|f5{8K_D?b%me8XV4cMb$e5{DE;P=C1) zk1qw=P|qwAFPE4eUq?tml0}ll!Aw{LOEYNhDna#1QZp3%d0yIX9H;5(5rp6m3J#V9 zqkZ#q+&saxd#6x6l6_^hIedJx%0g7fN#gST%O=CUb1X)61|Q9^JQru*u`^k?DI8#O zY=z0O6>Q#gg+Or{w%j5gZj%3ylBA!8g`4CbDjV~tZ3|&rUEE@*X9hRPUz~2rr{PKw zLJCaNLSNgVuA`9h^8uU`KnFBjN~-(_!EaIuj#gx1OUqPwKe7x0o2~%eKp4<)=zlnk k$CrZJ_GSVEHXXS23pd-Q_R#k38+sz?LcAM^ z;DuzZD1uRRlTbur@o%W^QigY`Nr5v7td0@72pH|L|e`R@SuuuL57AyelFf1k+P@ z`^%-`F`$bLk3|+ZnI8NwF2&0e_CWQ==)q&GGXfWYd4yKrhoD?4o(6WXZn`b}^Y+Q~ z;PW-6&<$Vv^3m58gCP8_P{_yA^|j~f8h7OHCSUw5>X(l<`CL3k zp6zaoNxSz(kz@~Qzr}=C#l{Ml7;^pdeQY)!bT{7&_74l1d9LymPgj3p!!7mt5|CpP z`%zDkq~0f~_nEcr%~vCbhk*3tk1Uf>+@lkGsL}o&HtQ=ULZogfH!x zL*@L0?e3~dN0fqOf@?eDra1jKXvH%FNOR8m00000NkvXXu0mjf78#BD literal 0 HcmV?d00001 diff --git a/emojis/1f6e1.png b/emojis/1f6e1.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9ea92203ad2b33d4ffdaa75670e025c996f1b7 GIT binary patch literal 558 zcmV+}0@3}6P){O=&XBkU^O#C8W_NC~%Rqiwc*~A}sm@ zE&2#;TGYZ#QPMXMTx3E;5Q60@Aq<2{#F&{z=f3<;N{d2>rst7I(=+Tcu|CAcj}8o+ z4cpp>A}6KTNq5xP#`iKCK`yhZ@E()bn9c#8+2M_hje^+yjYj6?O3lyBZhCzCl3^=3f zPys)2qWq^gbqe?jq#42ZPo9basRFfD&(($Ii3mYUwhq)3lS-TC)^Zu6SuI(g1MRsr zkcwhv3iIV4rdflAzL2z+) z&g`JjkRfIh3>9%uFnA3T#gew1H~a??NrrqM1L1Ak(A&0yf2?n8uIvp4*Q3$s^z!2T zY+8tHR)`V`1F<~6=WHF^Fa`sENQvLdYex40KoD8d-v|}4z3(MmKk7Ka7iuLt{+*Bo4;G z#Kon9n_CxYS{kE5N=?&%7ASXc@9qqwS8p(>zn^&i{@_`q+1deIt|5R{8Gc^CR1-k_ zLRFfrSAfkmd>fwJ5!7v%MDSyT{pr})k$}xLTnnDA3FdDRQF85R#NAp3y(+Ap}ePvmQFukfcPDA$f`%WtZ99 zdJCldn_&EPpF9@V=$0MRyj~l5%9j}l&6(B`Sf1_`Y2!%$+BZ6@cQkGOW{YWN} zF5z^{+DU^>&!bZFNmKYWIAe2m&O!5(M7o3*V=|H)%OA5AdVD()lq*%{vpLax#!98i z_ajLw^sxLfd6FC_F)=$1q3L2;1+$(p5&4Mwg(ON`ZJtj5h(;2 zAtg?+$XfdCc=GWOh9Pn^-D^Y6w^&gW@)?s+c)@%R(002ovPDHLkV1j~U3_kz> literal 0 HcmV?d00001 diff --git a/emojis/1f6e4.png b/emojis/1f6e4.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c848a5fff4168829178ab342871c35ed753206 GIT binary patch literal 562 zcmV-20?qx2P)-5H3pi<_&9lQGCY z;K*O#YU1MNWOUIuXad&KAA*qp7EDWf=k@NiNDV=fhR;Vle7^o*Br~xLBEk8z34=#+ zB$HnOkzfERpm0HuGW5j|Vp#z(1{kqnaZ-?sf)@yOJMf|s;sqih8NiOfoy&q`lp~ge zi*bls98nDL%ZJzBLrg@_ci@H`xExUo5CZEB{s=jX3<8IC^Ao;*$oU9*)W*mAxSbkS zG{tE49)7pU(C`gxljEeW*Pz{6gD{}=^Bu194cpG3v^hYVVZfucze#>M!8gCBA@3hwQ7Z2ev(3GiXZJV?U>~$WnFo4wOo1}yS=2U zZ{BiqVF4*6XGy2iRK9#>{MHhMS5N&9*DkI628Rl&7Rj!V3IG5A07*qoM6N<$f))h- A+yDRo literal 0 HcmV?d00001 diff --git a/emojis/1f6e5.png b/emojis/1f6e5.png new file mode 100644 index 0000000000000000000000000000000000000000..89cdda4d9c829140eb616503da61a496232e3777 GIT binary patch literal 403 zcmV;E0c`$>P)TyZZiSg}N;w_-a41=25L4<-3)n(M-SFu}WlVu`e!q@H{FqeQjm5SD4G?Nt4zt14E;U(NghvYPIbHWY%VA9>$``WPN}>TOdae}&0szFCIB!9 z;^<`@AQ^%r2xfzb+O+{m(Y(%XoaKg3cu}8RJWAV>2`zNop9wEftwQ*X0AK~B3On)Hq73!HpE_7?t2%NKTq z_3EeBE+(bQUqyhBbH$$cqxs=oU$(WkZ3+bZ1S@n?9BRxjy-S}tb`-2H0oIoQ>r24t zOI)PCUGfFA<~xho92_BHYKw0~xqn;dw^P#y2ZKx*PWz(Qy`a0BbQ1emr5g-N+X}i)E!m% zrd{Swx#bGS3OAdF=lAro<)MQgoj&#I>asDZm8-Ml{oXCOg{qLQ*IqijT2aO-2VaMC zErS~fIXAnCKB7`Nixu=mPXHm)M#!`gGHrxR8#mJw z?S;jeute`O^fIs2tncK){KC%A+K#WTYpUjC^F0!fbgy0?1W<5st7?1XxJb_Ys%qK} zqolthFILLa`AF~y9tls_KmAPVQ|G&EFTbNM%aizjNdQTx3g}+$hZJp%N|yCS>$1MR zR;emZ)#&AQ=R+n0m=It>fC&L61eg$DLVyVYCIskX{wT!apI5B8OiBoQsy!Zmu&C?% yZLjAKhch^w!Ql)JXK*-!!xBD&PULqzB359sDG z$YXRU=nv=;9qd-%K_aN6f-q&3MP=#KrhBK`-aYTHCp8G8A4DDceE9Fg#p`$a>w)|X zG}z?C`v$yt-(?|~(dhAn4Blo_T>8~I+C5&q|6si*KK*h zl=@5}9L(lScf$=F(Gt>Qy{305XL=Ri^U{rGQ)s2ByMlawj!bvgvA_?Iy;0}!qAjmx zBHq1|*+waBaHwwEve|S9`G%}mewXL@m}V3+62UM8iMBRZ!)*jNq^!=r97^R^hf}II zY>?G}QVy}0$@6NA`Ffb$G2bo3n#I)(`)P4z`kZo{vqCV=Ci!ai;d*>%@Xdpjh&(y$0k}r!S2?%yGmQdPZiL7b(0-rkgQqKd3R#T(Q2vAHZ7C;T0(k1h!HQHnh1LG zO@2YT?Wb&hR5gS?04xWo0>2~m$B{?;gwLOm=Z{_~@DF4>+Q~q+8$%duSuR)DXxQvZ zCuuXIY^gPDmdX|4W|T}i$(BF|ykA&BE>`APSes)fA)sXO9U-7(!Rtl75d!3`sj+n+ z!QWXoglHWFEI0)+jEP)e5grIPt=qnIw)_W6nFkNrET z&PjDSSy< z93TX&7GZvcpM(H4I`eo7Xyo5)Nki5T0!6?99KZn_zyTb<0UW>q9KZn_plBG;!SC3Y V=$*$|I#K`t002ovPDHLkV1kpY9k>7h literal 0 HcmV?d00001 diff --git a/emojis/1f6f0.png b/emojis/1f6f0.png new file mode 100644 index 0000000000000000000000000000000000000000..19f9a1d2e0e3fca9491fd1809eb24072ddfcf486 GIT binary patch literal 804 zcmV+<1Ka$GP))8v{oGnqTNk8?g}Ac0s= z`uouf$G*e=QJOJ4R6QEH+mFPG-(lbqHj%|$&tbE?h+vXNk0OJb%APP>W3rkxjoRYc zbgcMw0GF^%=4=B!re2ekw0>xdUKw$0=MVsW!>GPn^m3oogNV>oEjqc{;@Y$!FycsY z6r(1t0|=2Qw))$ZgRzO+>-~v@1^u4vc<*#AV~y=>eN*hiC^jir`oI%>cbrpZJVZ9;mobCk z@oih(&oiE)>DhLBU%A=#^BE88R>O{-50<{rTHlw3I1bPP*2y_<*HI{EvK~ZK@oltn zzIW~~_u|`b`$5j+H=;NWZ{E6-)mo1+=(l@L38`UXgPd)fN2*2BKvzA8Q1NX5?#R?_ z-ZPw6?`K-~U)5Tl0kCWs;^aW`_rgn^FFz>h#ziK2Sv;#Q9Ih>{t@LM26kG%KAYwr{ zAx!uBjWD}#TW$FXpr2#AusdZc+ez?Ri5mw&NC`Y)oF8k<&2#C>wa(!Fodw&8Q~hbP zqd$sL<|t(>b2gAto?V5z(ywQ4zQ|K=<)~?ZaT$c?B^VgTvHO+kS1 zZ|Qz@>OdKd;~;zw<_Qp;1M{Q=GkV_Svop|`!GF5|q8Pw75S<6(YcRf*%5dFk}>U;nSizDAb)|7>n6)Ssd ziL$b>RLX+gsWT}eIdPiBco~Dk^S_xgv5;g|u8Z$amRox$a`m+u)Yp2c`MC|?7?=P8 zUTJJ%dQoyW@t`d+3OL#Ob3oDc?Ze1c`fSaNP+zjaHB?6SOzan6JQHI9XX6y8E`ZJW zo4?N~>S~USt7r&;-NTHU(F>gLz9~clzdK${f#->4bN3y*5CjoE)KV7}|KDZ4r>QFX zGZOM*>5F_SFh`M?S1P&*0t+{{(j%DB|54R@p?((#xBZ;wTSr*t}Sl|a40NVLC z3pfjG1akn$DiA>8Ks*1h9V8Bd0@{FXN*q^{FE~`ne|K;kO_^?>O#wZCP07u^$6SsN zk;@lZR46!HxptrHw;y5n#Rk)(fDTHuHjKQRW;T^)d}^LWlQUVSzvUQtKaJLg-=xC^ zB9tg4Y-?%a!{{tcjR6*g8fsX(vX*c|080sFA~qFH9*qG85n++XwzznHHy~6}K$0>d zAR<%}5k#nzw1ET=rR2e<4Vdf~GSxBaGJ{M753?*iNH(~G=H*`y42|9iJgNwog#9%i zz7?+idIqqyHYA1~QyV=(VQv(ELl>DBtLkDhl)7F*Fq;Z+6dy^{nzsiL*H^U~OA z-^W#cJGV_l*xll#sZO(J{TTHDmwnAiLQ6HR;Za^^qJXeBd=Djh`04D{4OZu|Q%n>> ziSODw)O)9}m8Pz0hJYu7tsEu_AtE)&htE>6S9#ahYaKk+Mb7mX zKj+r;hrHtremfTf6n_z_9(M$NcX+a6OWyUR!CbZu9Y28pIoDTwIk#y*;7-7k)>Z0z w5C{M+@D@zJG3s2Xdg7{x8CK}Npp~Bc0R<@43JYre;s5{u07*qoM6N<$f_~&45C8xG literal 0 HcmV?d00001 diff --git a/emojis/1f911.png b/emojis/1f911.png new file mode 100644 index 0000000000000000000000000000000000000000..eb056616d94a54aa705a0442a97fa7fc767c6670 GIT binary patch literal 650 zcmV;50(Jd~P)QW_fsg3;5S_AoV~ zxA}LJ@0RuyR0KiMYaU|=g;_KUWLYTHDqF>V+%5IaZ{Oib*FE(41f}_NnmkoJd1SiS zl^#dYflZW%7YJ50h@KzLt4m`JQ;7UmKl%x#@iwlYA`uZwqzOL3nEw~y6`UrXAgF`{ z2<9**@%K*E+WNL;t7|vKu|s17a}p8GU`is!yC1FD{-Z38V?&Rf@W9p2HZ8CI=%-)r znmpgHZVGRPm_g)$m~v&;KwrDUshmT1?(I0)k#T0QQ-cW8A;#5JYx|yiwkQ<_K3)F7 zp+^gChM(y2-pAi)G9IF+E(`#QMf9UtGVb)>okQh?f08Ah4qXt&hg{s8lg#iz>wy0$@ zst9_1Vv6WYR4rFAS)wVj;v=Sd{3?=MTuMHB!b@i_iN$VL{xq0NNmMb934)45LQB k^WA7i%M$S-!Kw!T03MUG{LUli2mk;807*qoM6N<$g7iT=Pyhe` literal 0 HcmV?d00001 diff --git a/emojis/1f912.png b/emojis/1f912.png new file mode 100644 index 0000000000000000000000000000000000000000..7a622063b6e5e4de9043f120d37d3eb4bcd797a3 GIT binary patch literal 694 zcmV;n0!jUeP)ohZ8md|A*VhpA*Ad%13>Dkw6X1?t06K74FpH?+- ze%f0n&YJ#pS}YDNcj#b2 zOLIH?$UMPvh;J0>s%8%Y^s&Rb z{(eV&xFInaV-!abtFgHm{JGWP>#4muPF;}N+o|Er2i%+aOe$hI$bqG&R&~-j$W8V1#f4YZ9?Y)f(XqyeBwHG=PF_*D*;L c6PZ%uUoTP2&J5hO4FCWD07*qoM6N<$f}vDI5C8xG literal 0 HcmV?d00001 diff --git a/emojis/1f913.png b/emojis/1f913.png new file mode 100644 index 0000000000000000000000000000000000000000..60b44c16aaad804d967ee07d09b385c7f9a4b79b GIT binary patch literal 759 zcmV6*Dy>$;3Z6uQh*b~- zq01uc$H~(kgk8j&1XS4D+M5cpg5cIuRs00?AXt@cx3)E!#;B1@X69{TTE7nde&X8M zb$sGUkh*VmXVZb^CDtY&PTe#@k0Jasybp}?1+}p=Mx6{}`dKW07a;jsJ6h~T8^bg> zqu`E!E>fikdQ^qMzXGKBJ_%wsm=6S4YkzGD%9ExNBHe8hP@1WiE)z38y`2^UxckIm zc~r8jP2qTgTaU|>%39}(-Vu4>w@50|Y>0!~LmbV72~)s)H$z{y#q$}L$(&1X(jr)% zrO|!OkxZDwnJ_IODXyM~u2!ufV=&cWG4;x$Cil8bq3EFB`s^HRBwz|I-7HZmI0S5i zn*VYhJu564Z8<1`cwe{8r5hjkcg|%?e~e^TlzS5ny-Ay%gvG;W6%xrPTQ~g3fJs=rI<|7aZ<9$m46xw|uR+^B~WB!QnGK zrV!#ZnqfdTg-q@~n&3o8 zf<%9eFWdw%0tN~+;1$6e0+|K13y{p7r;P<~Smc8~2ky^6kt#)L2@8sNa+qK_i}VkG p*aXC>n?~p{gnx#TJq{*|{s-o;^IKqJSX2N2002ovPDHLkV1m6_ULybi literal 0 HcmV?d00001 diff --git a/emojis/1f914.png b/emojis/1f914.png new file mode 100644 index 0000000000000000000000000000000000000000..3bcf609664966f5e3dc4885cf03088e2d7bd85f8 GIT binary patch literal 651 zcmV;60(AX}P)_K`+km0c9m_l5t?JwVvO`7i~d2gIM!xI!OE-mwX>@)Wt zP4fC(g2}0Q3W7i%3KpdTLl-3i>}hLYb0`1`jrEl@$Eul*Cpp~NLL?ldqzlywi=i5b zQs(Hv9hB?tY+-MEBav{BGEofG7DW(#Qw0$oJf7ssY?At#2>Ux?)JDVnO~e8zAPqz) za0@w5rRUI2)G1%%Nk(3LVklY%w(HJ1X5Rm`?002ovPDHLkV1ne55Pbju literal 0 HcmV?d00001 diff --git a/emojis/1f915.png b/emojis/1f915.png new file mode 100644 index 0000000000000000000000000000000000000000..edc696d1aef62a4c22427c3d262f6f8605faa48d GIT binary patch literal 741 zcmV}+6-9|wWGE!7TrF0=O6yjt-IgUr?cs}>uYrS=xBc6+V9{K9y!`vYu z!&mpuKQg=T?Z+lIUqZul9!*h1wLh{f{lPVUTrqy@J4Uz{jvQjZ+xya9`EWgyW|t6a zHh|zgh4%zs%wV$_nL6-RDXgEaY<>QrkT>~{3)L#3A>A^seC_T1bD@_ZC?HsCh^!+R zL$9x7S!P=P!DFq`(MNa3-@GiEHI3^v=*cs6N%qV|QH(K$EH7wxIy5$~a^=cp8rL^) zMoG&tX(hoVyARzeX6wGMxHeDD-)Om|_~w^5zd>r-*isEGJxo6S5V`K8pDDd=8#G5X zU`&jU4lG5Ey4#hVd2>Qr1`%*<>t2K|w*^zeyGin>M((C4;(cT$B`d7ycB>yatDOZ9 z2D}e^|I44WyE!jDSEEvnF`+~E=5Kua(-}%T9M2!D;cSF=yD03$oCBR^=(8^_@cZQk zkuzLayUIt$=NYJf`ZHPX$&0{We>XYy+7sB~8n(DrbBtJAm?2Ha5a3p;kBBgE;*En; zD+vlTn>|JukadQ}(=mi?)k=ajf;B?5k}x2^csj;ivTlG?{)Z3B+NDj_E^Xq2au2Ic zk!3-T1CAk8W%=|ue!ch)15fSW!+Wnki-<6yP-NMuB^wPyUYrboHv*VHRY4QS%#9>v3Igc99iPXvUjpd5<5nm4W@KbO@sjjLMPar ziz@CEP;hUBN_@)O2Nu=r=%^$(Rl_#zsFY6#{ZEYc-vt&xr@2kmfmIc^qL_0MTHNt3 X6?GO+V&~!900000NkvXXu0mjfKXFP+aDXF5$Qr3uD`x>QTh^^7rN6bLjmA^_ zyHoY@?v6v|iScxAPkp2D{#iG>Lzbb~Q4eeCDtz%w%DzyO2y1pPm}E&@Gg44g1a(4n z9Ngn|UC~~4qDz5I;Bd1|Ti;DKUp&ppRtH0Yp`g9hVe_RkwDsNOaI;N~LfKw1*QKSL z-$p~SC@OYp^jX>H;q>ihO8{HIfHom8+kN>j?=r;#xCZGtk&iB}|JkHoemUuKm+4HFh zTPE2;kyJ9yy*F7Nj9LT~0h4J0tWLNzCJk&)n48d)%0i7D)_g-)lr$JmxZEGLP)sqI zrhr=?qYV2lg`!D#)W`P~HKyrPc1@z=E-$}CQT$@Y2yfpj`OQObs#BId5*P-5eSo*$3=omQo>yh)|Om`vfA)G?ZuO(C6$6Q-s?}p_omC g%xIdw5s}+J0Mg(1eX>cGbN~PV07*qoM6N<$f@se@L;wH) literal 0 HcmV?d00001 diff --git a/emojis/1f917.png b/emojis/1f917.png new file mode 100644 index 0000000000000000000000000000000000000000..26deb1ccec99b246f5cca4f05af371ce82f69363 GIT binary patch literal 734 zcmV<40wMj0P)7ip7{KxW^Uk|7(_Lx;tsjAqRGWhJfEPeK$-!VfC~($`ABhP@ zOfU7uRXlhoB${~fXiQ9u_Tb5AJQz(hsl;d^5CyB0DqXwV-PxIU-siDhs+9hI^2Ixk zaTh036MI{)PwZ_z3+(5%-@!gbbslGz*~T9~vYR{PHN?LKjBvO8Ag|(*m#FJGjEih> zI1lOoKa2QzU}UX3U{KclrwWnwTET`K@8|K!EFnUOcx(5;^pNZxJrBrN-(KUxg&%1( zQ)XX&oK~~J+wXnNU$^?4cw&-MCmt3=&XXpeV|K~QXbvKCK+1;u$6LJl#*>s)&7i93 z7x2n+hZ)_KvGnH}W*|aJlFXs{ytkkuk~e19a&U5-+cI{Vp1PO+iOg87BTjO^2N+|^ z4?iz+<+oLKx_WJu#h;ehW=yii9uFdHbMT>YF1-H@-X|P*aEwjA{CbNzM9#i=j2*-i zwS!0(kx>Nl%yagIV|@1IWxl)g2b&&!)6>?7lT^T?_mLN_zT`!MVFYLn$dZU1bpzR8)6bvx1O3`)& z4MA@d;05c2eQ~vS)Jf7fNvIdCTV2Ns@n#QGMOO+?12uG|z+xoc?1LAqTU{sAi_SHk z@usnjb1AAF`gNscNRvE=pjbCB6ciChEK5XOWu_g30@Z(z@G5t{Bzt_&HfIw;igrk&}DAn81#qK&SzNo49DvaYPhXmmU zGu4+V)$W8SQ^MF2EyaXUjjSciQx5fj0Wc;mjN64fBjJdr3=_DPdI8GPV$&nK#TE<_#wbq96)59s=)Z zXs<)mjcJr%TN1hVq7G4qsKaqo4z_8*o&#SIKq!FMV4J`T%)kuHzznsLc{y-5)ZxB} foG~ac_Bp{%i&>t4cf#Q800000NkvXXu0mjfCGp(u literal 0 HcmV?d00001 diff --git a/emojis/1f980.png b/emojis/1f980.png new file mode 100644 index 0000000000000000000000000000000000000000..b128f8043611ab6e0797c30e161dbbc328291511 GIT binary patch literal 832 zcmV-G1Hb%IgN%O*tPEOa( zU9D<+(mD_8JgoDu&ZDyKl(F_I2&ai?K}1MIpllF$kwZlEoQTx@(f9!nO#uXe01yBI z1XF|Y5P}A^W#77ia)BI zKRPld0-!1--3@rCFd8HAa=`h3!MHR4Ui>xJH&%-DoDj_k(cDUrp1Ztn*NxkG^wMBl z8s`Jp`2)j^4QLIPv@_V`7O5zTYTC9@zr?tW0 za-yT&RMLd5t%HSp89*l#D{jT&?+W!*JqH6Q9~(fQC6UtS>y_?T*+ zCE`UQ^xIi>W@dMBv}iU|8b|O!pqbHW`|>PqThq5oNa0NF$4jiK*u+Yu(kuc+ZFM;pSv=cM|EF%`|lpbAM#2m0P|3nyKx10nP`JOIe~9vMjo#1EFvsTmYeB zMO^~+Tj!Hs)_acuJ%_(U1p1n_YLSz!0I!y{d&-CKyf&rX1n?xb`5=Iz69gPA5dq9UWrpiCHwN=1!Ubc!wBu+>AFNz#+s`CfCdLLCNt9@*U9 z%q$0_FA=e<2HQRdECibPq6oZI)j@$O@Q*-_I@!~epl$;q7lAe)3)FxV-*N!~62PRY z?i9FfuW_PF5cxA4u@X*8glfe^jo}9rlrMxjp~((Ov?b9%t)?+!*aln)Df|XB@7lMF zrTsrqu8cA9>OFBMLSxh>Q1X0o(-pdVI*EjPc=7yiP9Gg@2KI&!S!dZ&=H<$goRb zD4l00o#(5ebe^Gfp1{bkOV+J0t0M&Z7^ELC<6{L&6$UrOnQL%UoPa8fj}@phfCc){ zLb(onLiN_hQh}@s!Cle=ox{M1p-JJcw~ITvj-Wfr7D4e1t|s=qzF_?Rh~V_V0=T} zBaku(_G%}}tiKT1HhM4PWZf(ssXV0%X}tSSDW?AA>iIkTe(?szHxsJ*i@-E>vb#IU z9Nhw!0n?IfSi62>JAu2mK9F_G!+@>I4ulD2$)2tR|Iq*}MdUcJ1`yyrs{4SKK$$r{ Y1Akl{3E%d|GXMYp07*qoM6N<$f|iL(EdT%j literal 0 HcmV?d00001 diff --git a/emojis/1f982.png b/emojis/1f982.png new file mode 100644 index 0000000000000000000000000000000000000000..cad2d3d8b59ca5ab8ac27320abcde8c885adec4a GIT binary patch literal 737 zcmV<70v`Q|P)iMX}tUH0<BWCc^UH&$p)}NgnK<9GLg4{?ajDOf&b3XSKr){rT)voH<^w zM&$%31GFL{-#O;1%(6Wag^#P{d`A)Lz0^I7yXoC_oIL5oiFD!w^wa61_z?dBt>7LY TS=*R%00000NkvXXu0mjf`=wrL literal 0 HcmV?d00001 diff --git a/emojis/1f983.png b/emojis/1f983.png new file mode 100644 index 0000000000000000000000000000000000000000..7a83b3eb4d153446ebe266109cb74747a869a6f7 GIT binary patch literal 703 zcmV;w0zmzVP)3wMQrbW<#y)|Gb=QGypRs1S)EN=-(MlbM_|=Q8u3Ph(q1vS{t|s8c(K zkWS~*?OXePbxosRCG8*8TyqT2tP&(Gs@m*Wtk)X+%_{F}e>osM-&H0TKic2df$LhM z((hlQomE(7BGkR(r46U-^1y-TPp6N)ocr@MAm%Se*I$T(+~$54`SZWGKUB)rM zF*sk-!)K;mU(~kuS=70(1YR%imUUnR%d5| zFV4>_{4OFrL8FdeETZ1Z`-PF9UOQ*TPH*$-WBqW~bU2vn^=is7ciyN*_kOAxU*Ap( z$LGZzwH+rH#}P{w>kHV9L(kfECdzQE54R06GWqOqS2*`^+c!V>dFnMctIaW%F$@C* z2!EMH0@uPG4+4Ro4>p!~MhyZIMhF3-^LF5QZn-%6UCwj4Xp zKa`j!(w|DEZH`@gl)WP-QU@aKD2L11`O`;eKYCofE9^S+I@ zcboF+hBfNA&J93V#u`7q$O{rU>#p0fMlL?cUX&z7V245ik%%r`3W^F8x>abW zz`%3oAf%g@pp#J7h@yj@Iuzvt4J3SKK6hJZ_A$<{T@zY13Hp2_`y}=dm01xT2DbT6 z_UqWarx&~zL(w38S48?2y!NqWx9#wp*B<@e6#wCetaHVX(OiwwVF&(N$S=IKbo(p2 zr2F|Ijlq=Fo$Y^ousGg3v2k^JBz^y5Ayc@$b~F_%9!iD-BSqga4!^lhe*31N@6|}g zYQ6P{O(&%vYOcIJQv9;i>b&WxtD9(_@-AEZ7BY6r{1#2KX)C#&!;OU~L~JLp%_X&@ zSw&{7w(I?XP?U&_M6cbLmX5Re$ul8!lh~F`nJ7d&pZcXNxu}C%8;Yt(N|8>Z0xF<_ zA`H}wH@r%FEr3$Z1j_NT72@eUCCv!u4HXjWp2mI_x+wX)^p34UnrbFcj!mv2s+1Wj zBsOv>AVtaPhKs~P3HDN($y2xLQD&$hq9*{u4&`4O<}#ESD#SPQUF<<&nktEPk8sY% zuq(0Q#gePu9sV|h&MJ1nX1^neiP*s6(XLGjj|)^`lEzneL#=GsK7I)7*LiE zTZ$hPL8)f*hXR90Flbpml_EtERVT_GY^tdt@IzD)Aj}?q0X*mB?RSbYN&o-=07*qo IM6N<$f+R;A@5vOjLn7BBa7(Rh6CMG6e;^=IQ zlZ{`&n7H``kkPn7mAGKQfDshh0)^h*a_>FIwgH=<3_g!=j{I<-%F~k>qGp>kF`Pr} z$A|obB0KsLrS1bQ9B+-JQzcCo5Ec>D=7gp&#b1tU&+xO4`B9}SPqAD?d$*u7kDK|0 zNCn4z1w@)OWU zn$W64c8os9g^BABHXs;=y-nyG-k@{zM6#d=lzzz2n)j_B8P`J)pIO-z9ZNq9)Oy+)_8%_)-{6CXA>@fB;| zDPRojJ$ghy6g_cs7n>#|VH0aodIUin&53D{2O8liCb`WS$_p?_jLzf`<^d;?iVWErF?u3o{?01Q2b pE(=&rX&mnj@RlIA3Ua`I`VA8NzSah{s_Fm$002ovPDHLkV1kjgh_-XCP_?^m?SYtVv@upiAl0UkJt!6kJ-{=AYe_8h)57I!Rr;|!T7`fy}x$8 z9~WA)VtMZHC}mh*-t6hY9o~$5&nJ{*k3b8S1iJ)lLZFFC5>Yc$vzk^dAn51ZPTR5H zSZd^o<(i?|fV8~nz?$24gpx!|0>2A5z`$C#KZN=V*9P8!qNDvT|EU;xRZ3;D>?x%( e*@}@@?D+#zPjB&_-Ilii0000EFO+TtP?IiS|GJ3A~cBss{zVOJLy{sQfy zaFLy~qHGS*itP_j%YhXqQ4Ug;l}MiF_j!9Bztw&{ZLe3{^u*5H4~RdoYfE(}%@OR5 zy`AeF)37C9-FH%!-81tv-pA$Yb13eLyoJ|r414%dy;D7hVc)Xa`A6j$tZ*taSA~l> z?UofD6(3AIj5qC@+Sn2#@-jJX<2pXXMf_`D<&8Fvx3RPlCAOWiG1Sxe*2W9s0v5d3 z=DQ^sBo6r=Emz0XYi^qAN@R^iJQBm=HX3KuCGk^a_+O{+Iu;v$5({xys<@_v$M8IP z7AI{~ePQ3y3^BQb8DHWd+uDz+m+V{85O*@+sEy(Wyel~u8TKtYp%n)P>Xu?SP@k!n z$gpMVJap=(xY0PjPS@+yI<-#MImHdbr7^5ByWWaQXLe;2#9 z)oN;vlwaM({K~!eOLJywE>H4Q>f@A@R3`a6yw_>`HkQ3_IuD(P&O_&6nRjQA<5=MY znXtAo;RIG0)A4ys4x3-S=cvY2&EF&59#emAXlS(Zb@-*}S(Cp6K@k1}=YGbq!j8t2 P00000NkvXXu0mjf&dvMZ literal 0 HcmV?d00001 diff --git a/emojis/2139.png b/emojis/2139.png new file mode 100644 index 0000000000000000000000000000000000000000..e123e25e70a84b66a4ecab8d69f6a61e2d0b4d1e GIT binary patch literal 284 zcmV+%0ptFOP)-VP=NClpjzyM)pk(AsehD+?2-DfbfAB;Lcq8WIz< zbYo>RYXZ9L)3NrEZ1(%y)$RSwV4N2~pq*HiyQK`qc>x643+ESkAwa+|n~a!EMw}1? z!?53DHJ`GYPZ{=mSUiTf|7QL4hI0`2H5QMdQFwl@NE%fv9>bXz7T1>~kFOtm)eZmg z7&7O`#F1pqVG%kKIubha7?fYiAI0V|9O@(6GLjtXBNmTA749B3B&wJMh!|8sl~bZr i2D>9P9hc*!ae`7kQKGua;X;P(i!x937CwznqrEZm*))lmjxVaKjP;rP zWiTG$XfZ?XvP`9BBj}LeQ>A9Jepcl1wS}+gxRfkO$&!>TNy(Bl9T(qYy~X-zkxI?R zr}6En-eTjd$Zj^xyXUcba)-hf4>(>LM->XWt1>UP!w-#smxjaEd6BuveiVKwz|DP~ z^V??{Z!SR^A&obe!u11Th3g0YBIu9+B>yLcZB=uCqAv literal 0 HcmV?d00001 diff --git a/emojis/2195.png b/emojis/2195.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9534d954e98a1bb17163e949bb94752c1e801d GIT binary patch literal 419 zcmV;U0bKrxP)-r&nnmO+6Ox6~pHQD4HMmX?N~rK$2Oq<(`y zmzJWJPvKN8E;bYhW=)!bcS;B6H66s$;}HFR+Uim5(9GmYfW_YoocHIVFf+LlV4<)y z9cOta&IDFGlPd|pLSZfurMzWRF4$xfQ6{hi3Mtc|vSpJp4U(ooW!okdH&78s%!tle z!6uuG5}HdyDHUwYh>lDk*~!l`4g!XrPiW}*_~U@x{46qoq*iZpaM7UE9TIAFha6lq zsMg!a1PU6zX{ZVQNuUt$TY%aWlKu60))o^iq+^5@(lO5WR=98Vsn*;4B#>M^z9BS- z89Jeup`&XWmk)2q1QPelr+E9s>&J*tr$3^2*TntukqHz&T#u8RCOyZa=XxApH|aSZ zDpSA!u#j~6BTjFdXc~0-BPJN=Nqghduu_{q1WC{F=sF$~4BYpZ({H2-ZbG{H=Bxk! N002ovPDHLkV1i`Uw=Mtx literal 0 HcmV?d00001 diff --git a/emojis/2196.png b/emojis/2196.png new file mode 100644 index 0000000000000000000000000000000000000000..62e16810e217f62fee4d20250b817a848591baea GIT binary patch literal 387 zcmV-}0et?6P)&NJIBvtc*AduWPn^Q@Xj|FqgK#{V2P|ge3|jS^2*;Coz+!gR(#l3& z02cGJ3<7kaq4ARhJYN!IpwNXz`6!JcG=fTYheD-+FC{7ig$5WxLl+vVlHH+DY2Zsq zkl+vQ$fNk&#Fvt31b;9WbS`%`NkmPi5&U8}@|cK4LKJpWtS*}b2?8WgvO8pMY}$R7 ziC84W)n1B3)I=pvNZ{7)a9)1ltvlqfSf$-}nTSO~?5EdI2^5|$DO4KxQZm-;xnzq~ z+I^R?r`LBb9vZ0h_3g|F3dwhl`^jUy%VJ39^sa_G@=zK4L$l{{c3)!}0XWRh5rbAe h2RO{m`DoRTzW|zja{Z^SCv^Y-002ovPDHLkV1hiDsiyz{ literal 0 HcmV?d00001 diff --git a/emojis/2197.png b/emojis/2197.png new file mode 100644 index 0000000000000000000000000000000000000000..ee00e4814243631989b9960717c93cc4fffd0c0b GIT binary patch literal 385 zcmV-{0e=38P)hx0 z$YMqSCjV#Zj1UkS8p9OeN`;q>kI*!BSLWGBSonQQ#aiwbS1S5+e56tw7c1yOV?ANv zr!hz{f>esaLydOVWgNi>(Xc^wGtSIZfN=yqk+8v0GL99Rrmx*~`HjFM8aBu$<5(es zzIwC6_URLsj~^(8>3D1{&tZiO`s&RNsX~cr!y$Y9hAS0{K?0B5%`5kn20is=htzqA zYQv#NDn-6n!IcUx9S^4~IkG!x?~pCPfX;U-GqCAi$=QXK6>88ae5s)Y=R zsK%HmMJboWCki*g<>l>z-oRqQhyF@4 literal 0 HcmV?d00001 diff --git a/emojis/2199.png b/emojis/2199.png new file mode 100644 index 0000000000000000000000000000000000000000..08a89ec6ce043ad5fe26f306c7a4551869f813c4 GIT binary patch literal 383 zcmV-_0f7FAP)JuN9#Fs!XnNlMwB8jhR|F_b6U>hrZrQk365_c@jnKHga}I%`=tde zQGCm0G-u^JZd&uLI6q0Hv_Ojtf^Pn{}E8RdEn*M=QqL-Iw6#cSu9cf z#wNl5pMfE6V`YXxV5r?a5g0?1O~fEDtkvo$elkE{3~@FwgTOEf0X)X%$y>X52zZRn ddv7-nz5pnGTU|rzy5|4@002ovPDHLkV1l-Ool5`! literal 0 HcmV?d00001 diff --git a/emojis/21a9.png b/emojis/21a9.png new file mode 100644 index 0000000000000000000000000000000000000000..d68c9b127b97e117c8666a620d38d624873ed61d GIT binary patch literal 481 zcmV<70UrK|P)xVSm#;3Ako z#GzBby|`4|#GxQKiJ&5Na0pq9VpFIoUMku`e1V+y@}6W!c^rz#_leT2l^b5JPyu{K zqdGyO?0C6C1@IZ2@8$9p3HVs9EaW(UVv2!qPg8Fxp4GP5ZimG9l9+>Om*a;#284ix zxeS+2&9L-ut{Q;UvKj8%_ajWS8{HClAC9ba{p41>yK-E+37Oi5TlJD(uPPI zB5i1Q_gJmAc<^F_1IYwePanqSFr-(XexSmL(rgA}*yk{$NE>?EAQJ+c!(U`mNhZB9 zY$s>aWG0fVf9oIw`y679O{G}AR$@Bs(kBGW&-mQEP{bI+YPE$;VmXt~a_?dh&y|!H z3v_??@Z1DPvf~H@D{D=v%{DfPr8w;|F(&Do%Z}6cE7H`qe)8n~SKe*x5+|`dT5Gbk z+oimi=l0VN)B}Y9dfM00000NkvXXu0mjfS~1)G literal 0 HcmV?d00001 diff --git a/emojis/21aa.png b/emojis/21aa.png new file mode 100644 index 0000000000000000000000000000000000000000..6a96983423024d3b3d23273acbd82cebd359d9a2 GIT binary patch literal 478 zcmV<40U`d0P)&2TwP|=};PDRkETc^o7`0E>iNN1DqcIR^6$GJ?oD7$R7iSw^P_x+EPs)FJ8+ z1YY!_paex8ymj#8sV;$~nI1ywP!ow#m)f)s)VJEx`93x`+VF|v8U21`mS}LmT{y>15NR*gqc6Wx!a|AWv*#iYpA3#w zhQnT`!_HQEliYR|kK0ACB1G$jOYL)CK0iw=Ey@@K3@*2uuAcq@AQJR>sjUi;l2fGQ z6tz_$0zMA~k*=Qp0him&E&;>ome#1p>une9R?{QU8K z2FRurm0h8rpF1}@s18^1VdfKQMWrA+H2AnJ_I_%W0s+J1_*h~?mPb@Q!}=eYT^5T# zQ^QG)9;rjsGi=E6$i(<)0)quZCX?aY(!x|*`{gT&rhB&(jqO|>MblaPonj-cP_W#2 z|L)cJ+^mejLW#uEqWm=;pYR7OZutX2R6T>D>1485VzG}r>g#Qud_6i(2`eV=rrsuh zt*+q@1gNQrP_(kLOj43aEX*e{v9g~IWRsF)OG*+YvVe|>fQhCm>$~wX^+~ zZ~K8(nkz)!ERM!MzWT-<1)Y}OPIb3de_Go9oT7P{H=u)abdM38?^x@qb zUYeMj_dM~b{wO+`T4A6{V^tuGKtT{xBPy^%rD&y6qK3f;hL)Y68c`7_2z;x7Qc#V| zx%xYvv++WrlwqH-6HeZ&1|zx0zSTepfq^<+-`ZEVd#qp`I5$r6yNrAYPT#5oqlE`! zSMD!r#WErTb+lp`@9VYo>sKe*O>NQ$?L9;_>$BlYcOIpG=c%XAjIon_6&f;7$JE&- zysqml$UvRI+l6V@iQWZv!!la|$ZvzOL$>zX zF1p8u5=$@NeL)~2n4B0kx}3IIHkKtq9>{G$ZVN&l*jScaPTTC{#IO;8jKJlzJIQWZ z$i(?p0hc0&Q_2NI|-u(x6Jzj5~Q&5U+ z9xdI;>J0w%*`S$e?$C*%w=BGWV?(1TNPYzCeIrID%u$G;w=;gu)SYT_+TYFz)s+q8W^Q=~-x+M)#o2 zxZ6$F>L8lXKRUwU_4(*o9Zb`td(dXgG&$^9#3s*ThzMKNO)|MW)iiJB`2~&#eWp^=Or@qd z9`q^CFRa~5ClQ^g9r|#6b^$C5g}WcVg1P?=1OIr zudiX-HYe@YYs?mJ@O14li?{C}A~+1-7;p!}QD%!J63G;f;c&=Fx~`K*rm*cH!EltH z28Kf26eR8Q`;2VX$(Qo6oX<7j*>1J+(aP=(#6R^L+LiB*aqf1!~QTPhkIUW~J5sMi3g#RRr(EsDI`nrMZX?)ej7w%W;^nSVcOosT; z|I34yb@pus->bKudGe-(>uG{aLORZG?!I_OtJA|2h1RgO`;pD<4|rM=W)kq}Tc4ZH z_prbJWIzM!)%R3tZALK(*lB(x$n`XpTAOhMaG0JWUAtKV946=V?B>0HL4jq+4y>oS P00000NkvXXu0mjfCaSv4 literal 0 HcmV?d00001 diff --git a/emojis/23ea.png b/emojis/23ea.png new file mode 100644 index 0000000000000000000000000000000000000000..d27d2c98b89298b2ed54fc616e20ae97ea33ee3a GIT binary patch literal 426 zcmV;b0agBqP)ED5|W`sg)SAB>ZXIq=-fr{9}dk> zbWlpk(y60}lMZ4umhuS0Thgi9p(K5^mx^V{KQst6d2 z$7-3?f(%DfMZjQu#;I7cC;@}X8Ilq5m!fD=;EF{~aydDTm&AtQ&Hzmc9$ZV1yBNiG6be{~PqC5Dayoc|K{_4*U9xsP&DG2duBEwY9^Xh4 z3~2b#=?euk)^k}F&qZ))Qt~FzRBQ0?^=A${fAJ$3U^|M<_cdOWzT+qmK>5cn?!EfNzV(MeIzE(w zXCJ=NXm?Tc)DGI*d0FQCOb9QX5w`d0c$v*3%;phZ60n$@C0k~-09cIAYMa&7V`jM1uK=1of31mMC5$ zL?{J6m!|lUPtx{1pXAqa22qMAA)@*%P5EPrsI}P0BLnzkU+ z1fgc@^BC)&QkZNE7gx9Zxw=IIUo%4-tmZ+%{>3$y%{vsJc}Xw?q2?*nOnWZ-r5v`U zutl*~$}!`)JcXJd)R=^b%&@~rr9eDp(H8HqIIa}Qd~k>o3|^v-)6F7-@gAZE<2Gj- zMMe{Sm~0G_$$rlNws^~AvY&tdA8E5OTsH6MmH{Ne~(pZk`SG;{S%44^WZq9=?lV5*e z6D;0Ei}y?WT!uGfU4{|wzLhz})w;fNyTh{6%Y;_fNSB_ErRQP??QWzQ#Tb%$bs7lh eUC{8VA8rB83y!Qu55*|}0000iD0)Dk^ge5(tF@j=0V()7F-UUs1&X9> zI38i{{d4N{0IsHx&f@q>`r8{(1khsC(iGBBBo$uAn)xyor=d>6Wdt=AM&k^1J>fAD zkKU&Zd>wy9i&29ss7pS->t>{BBM3%;%X zK`E9T=2uLX){pR#cx)c#Ni6^3)VjrWZQn7Q{!M1-^FtvAoURaRJ2vPOTfxFKrZ!vQ+jjl{OFac$MxPK7QZ8 vB?J#7VBv!hAOwmf3psNdu<*~i$eC03Qdn?kG)4Ui00000NkvXXu0mjfh#1Iv literal 0 HcmV?d00001 diff --git a/emojis/23ee.png b/emojis/23ee.png new file mode 100644 index 0000000000000000000000000000000000000000..7c820c80ce20ad2a2cc3177063708e3704413db1 GIT binary patch literal 449 zcmV;y0Y3hTP)+T?eozhHB zPKPcEu8tz8po8G%;O3%K2!R9~B9Tx<5?jQI>P?KHxwzTWwdDwbT;Br6~WX{7?-4~DHPzd zUXS3-;FnKq%=Xcw)!_&R6jpwGWxTf)m*fK@Ml-835%i#nqcNzmHWOjQXr`8mhYd{h zw-FudK~)5fmWDdkfA(RtYIv!5%nf%kKiY*90@vdAZUTznJ(B+<@z_4Q#yn0@D%-d= zPp(L2^SnpmA%LSlS(XnIJQd40ZgVdz?Obx6e!xrefz#w2(cL&!p@hRKl!)%eIZfVC zOQq`mvB+QR8Jjm3=?9i}E(rw`9ED<;<--J%{q49^s$zR_976DqWHwK&QrYI<{05f< rEGmQmA@IwRxlAesSomkK($ z2vty}MgdiV9E-Z)cn4Kq$>d7}&5R_N9O`Ce?}EPW2-B%J8wXdMUfuG+P}kYk%;wY} zqy1e3MeHV`j*VpuZ7oei9UI#+d@=;IHXGI^`j}27Fe3bg;Tt2u>_~#u@g%lo_>IL6 z#s;FqI$F7Y@Cal0C&Ld8&WbGVX1J?76UO2jUzP3S96KjDd{us95%Bcllit7N@cf3q zvZ%YSys)sFA(Jl=RQ6sex*k>Er}F$t(e?1EKA$ADex!s@rA7plcM2kWF@Q@55fGt9 o01<**Q!Zqe0hh+PkA>{g8>iH2*`a=|1poj507*qoM6N<$g0Tv$761SM literal 0 HcmV?d00001 diff --git a/emojis/23f0.png b/emojis/23f0.png new file mode 100644 index 0000000000000000000000000000000000000000..fccd685aff7aa931c3f4c0f008599df527469047 GIT binary patch literal 770 zcmV+d1O5DoP)K~#moUuczO9KiAK?|I(yuI*?u&fGEULZ?e(Sz*$}wn!xsGB7ABx(L+j zA}CU!AdtLBsGFdmx~U6SDG_arU~UzqGZ2-$h@<A?TbRj6Pk$+f}^#~1k|1-g#jMlDM^fX4=fGWU+34P@1 z*J+=Y_0f@Yt{GJsE3s7!Kh!;8m*(%aT|k75QjC2*LUreQ zHx9$+w+wymN5)-z>Y;VvZbXW9_lql<+*SXH`SAMUn(N^{yS|00J+EU{-@~DSQ=CgC zS@!q_qQ}-jl8`H%uCDFRhHF-t_o7-eZeJ-jd^`HRFSv{Pmc74;c-N~C=a|;t*N1bC z#>Pf42D^F{dj1mOw?7t-ANL&-rLfyv>&((*AZ$Z~=!Iv&T5d{&+_q;R7r`W3Ck8@l zQX^L2L8&ibmM>wh5CYzNRF!E`Ux!(~go>s}b%BXhtATk^xDAZqziMk2(9_++j@P!+ z(cZxfRb*j-ioA&AqkyCaQpU>6)!fodOKS@^s46qY%2cGFiLnw=;AFUX8NGCcxl|QZ zMOB$GIYk&8qT;NGju@9S5a~Xg$L;In|G4&UbaDzTU;3O0#-vK{v;ig8eGvCe4>#j` zkCN^0MBzdbl}a(rUG?w7Pn%R4kr|?eA#BS04_{Z2tE*$Hjzof{h;2EpTba8ve^69E67UR^nm7<` zkL^>(aR`M%)RY#ND11Fk{$8G9u}D6jr#-e$fo33%&thGJs>o|_X&to_7O#*3r1|lG$C_^`< zW&-0A(}i&Val!*B9LK?N9BKp@pO`NEIyDnO83Iud%tJ36X2Z0Iv`o(ao|HYU<=rj2 z7{4)YEM&6ScEp+e?|%p)a=|ps4-CUl!!VGy&%Mj0YSlBns&@wD9n&;J%}o)- zclX|+c%D}R-V@MEXYBzC` zBDEALx%hLCcJnt%ILL_$2kni+vNN0A+1(k-YG>cP!P?C3zGq%hW0TKEbY8s79LZ>` zu_GLfZJnN;UPg_s>vbKnNhM;(>Ur1?$5(@y`G{CRSCWF$CLD6r6Iz~_AXo@!_? zQZ3ER?F$<83*emtW~otPHb9N=1Xst##yY-?eP;WX&8%rl@w%r6-=+;4c>6BP(-$v; zR^yU0RxB119!CIAdBO$6{?dfq?${HoU728ArVS}2(MSYeAfU4@)5d7A!26+(=t{MR zLW_HVyArf{uIru6=Lf~%eY?r^_cLMJ_|mN@(yb|c6ShsRKgXfHyBN$53fJ|{dWfI` zZ{v8WlvtHqPAs&DW2x0F(1Xks35Pj#;yAul$>offN{MJRx=8}-9mgTPas>jIE{rm| z|0t#NSEvpQ^DpV-3LM8lz%2UiI*Y>$>bY zaFAlLK($(>CZZ6a>pCqh&D^`$g_IKJ&%@Zc4P(bv>PacNce9J$+y{CGKT;zkHKu8j z8_1(+8h;T2grJ_LY2*g-n5KzOQWFV>dDEMtT=`1(tvlFunYnDcO!uujl${E1db32r zVSJJrr4;daoUZ$i5kg=X2EL);5r&3G@EL}I5Q6RpPl(5xP)gyG{AO7eQU&-_o+Mu= z;<_Gv*(`n8EUxR3FBJJyolIGR(}(Ff}!WuQl3;Qi^|3zV!Z M07*qoM6N<$f~=HY`Tzg` literal 0 HcmV?d00001 diff --git a/emojis/23f3.png b/emojis/23f3.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e5675d538871f1bc67f6f7cf98eeb2a04bef9a GIT binary patch literal 555 zcmV+`0@VG9P)4>r#r>2fUCZ4TM#>_+-i{P*ooGoSk#o1B@R*(oJNi${Q_HW{7<}Z$BaQiotX39h& zki_Pf_L9qM69k6K*chi^JCkT^^_C!PQE-pihOb+h8sFy+2i3OPZjE`n*57596KN_m tEOlOAQ)WjoGCL~&Vbpnj$AL5zKLCwulzA;fC5Zq4002ovPDHLkV1mg~{o()s literal 0 HcmV?d00001 diff --git a/emojis/23f8.png b/emojis/23f8.png new file mode 100644 index 0000000000000000000000000000000000000000..a7993a4f8fc303e95d85523a285eeddf930b6d48 GIT binary patch literal 264 zcmV+j0r&oiP)nveoSA9$kBV0)y}*zN~vs#Q*>R07*qoM6N<$f?b1F0{{R3 literal 0 HcmV?d00001 diff --git a/emojis/23fa.png b/emojis/23fa.png new file mode 100644 index 0000000000000000000000000000000000000000..72c5a7097d5b02de3bc37002b616a2c7b3dc3a10 GIT binary patch literal 368 zcmV-$0gwKPP)&s$T9RLA`3re~=kU&5V z=fF932^3q@!V=w{mY!i(vh`TI)>vpaboc)GM?TNW}lXBTT|Bo zD^rs)iVSgL$x>_)CziYCcbwyw5ag0TN)91F2zE)OHM2gDa=6r*kJ}$O^^(G O0000fe22GBMc_2EQq-KE8I+s z3k3KR;6`vThJ?g2kdQC{rF;a!M@uYig|?69U>ote8hO7Wf3b1uXv82lOG#D6*jN0l3B!5J15eSOSuk5qy=Za-U@ck5#Ga zj6g3i4qRJLUr!n({2Z=T{P-lQNp6*x}BXE3GB7I)qC|6>ryP2Wx7LIZy(&q(^b0tK;joH+s z4X}zQ?%4PaFN-L!zL%vjU}y{&*7vd~aF8wHbDc0Xt43AlfwJq^_ztoqd~3T|>ehC% z_ztrrd~VFfQ$}^(h)4=p%v=l-o`MLdg$ zq-5mdcRaShl4T@WsVa3Mf=^Ycvy4!w>Nj8vC>Q|*3JT+us?GsrYE%_f<(_h-s&fis zKmkuclsf_i;63Q9icAAZz~!$ru!=G-kP`m+16r2aJ@ki;F8}}l07*qoM6N<$f&=g( AcmMzZ literal 0 HcmV?d00001 diff --git a/emojis/25aa.png b/emojis/25aa.png new file mode 100644 index 0000000000000000000000000000000000000000..c337352070fec985b4672ad05b0d409794ea7d6d GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|=W$ z@!lTX$aTm-py8o?xs%5{h2{qeKmMIpwh&?2t*t4$t~6IK`C6U4I#b`Owi!i?Q>Lx; zo_jXu`GY3mV7=|XAM!5Vw+m@#PP8iFx%{VN5lYxPO!PC{xWt~$(698&ZLID5( literal 0 HcmV?d00001 diff --git a/emojis/25ab.png b/emojis/25ab.png new file mode 100644 index 0000000000000000000000000000000000000000..c65f7e624f41110899b5854e7043c5cf5876a45b GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|=W) z@!lTXD0)ai#Np!c<5JOF<|pR6$p*_dbMBLVGH1!uc}L6~JZD#1KFo-5E|{FfVzV_V zE&E*M^9N4JLA~q0r?a)(`c`u%Uvp_I^TOwh3)LHzEAj}jaW=QaF`8AeYM99M3N!^@ m<*3Ly`eygDKesJI{~ZvJd!qiVM3;eqfx*+&&t;ucLK6VpwnNbX literal 0 HcmV?d00001 diff --git a/emojis/25b6.png b/emojis/25b6.png new file mode 100644 index 0000000000000000000000000000000000000000..4b1fb019e5ee5e1a4226a04d2cf0ce5110cf205f GIT binary patch literal 321 zcmV-H0lxl;P)=;9IFnj2&i z570G>OWaD~p;J?bCm}cqL1LTK?>oD>f4Uo+`4aFLrrK}Ig^bO733v?WO)jsN0(hLx z6IyPsFNgz!RzhDw%lTwP8u?^NNE{fn5{?l%%%++&^2w5rI521>{6#omHr1q&PnLwl zfk7+bH=&2wRFg(NSrQTlhLI9}2>+z$!R{QZ^@hB#xVoWDae&=9R_hIUVR3as7exoV zbF9`I^1|ZkhC>uBANwyJpWny}i>n*@P_(?fzB7~n6{o9YzbzL)#cC8fbkEKQnj3cNFf#1d=87|DQ=0`CkVvBX+2MY45v zDtNdtgv1hS#l8gpB-#4;?a7LYysYug5E4tQ6;mVwZP$|(6?s|XogpNaSS!XzMzmc| zR#fC=jdzBSSYoXhl1ym3o~)?I%Np+tpWhw3BztPRo~)=C5Zh Z++c9kTK1#0?|{pB-R60I(Z`O~-ohmq>6Bo?i69Xqf<%xA5o+g$E8W;{!TM^e$RSS)PW6W>b6O@B2>BiIoKyBHSA^Gfn+YTP ig`%_5bZdXM%h#Ndl$*c4Q=fr>fx*+&&t;ucLK6VQ;z9WU literal 0 HcmV?d00001 diff --git a/emojis/25fd.png b/emojis/25fd.png new file mode 100644 index 0000000000000000000000000000000000000000..b06389d59e76cc161478d833ee94b491866a1088 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|@&@ z@$Mcplx$ECXt;R)_l#rU! zpNP&_ag6DW&WdAaTndEdu&5vO1X0Tm99a{7bw=a{L#_Xx7_2k}Rww9Q@MU0NVDNPH Kb6Mw<&;$UXkv!J` literal 0 HcmV?d00001 diff --git a/emojis/25fe.png b/emojis/25fe.png new file mode 100644 index 0000000000000000000000000000000000000000..1e4af908a702e15cb3c7ae5936ec832a06941a8f GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|@&< z@$Md6DA?e@<9hJ8|EUAY1}23fPVpf{z6l0boYD+Bg3}izOn)z(;q!UZ>D;Bt?^ax| z%-J)i?M_(2lEZhncqgh%a+%~IxMOF73Vj(t5siU^VuTNAPZ2?b zF!t7>z=si>5Bb`H#AX8xov?(ohm!epv4vuUL&&v@;eW-s)polUyN65E9{N7)M~}G@ zdd!u;KCIYZ7yf}pjmS6BOCzU7#15wM)iPOwLFAe0>X*_|^xakxhNriAuQYV*#@mlS z7QT{-PNU{hPs_nU_mSr!&kPjQYJ7FGlneUoLXMQ%bEI5xcQ^l%GsSN=FWP#7KKpBq zwK|h)>JvFr{Aoo^WFcR0o?!X|-nL<`i7Ks+3F90~`vFj>tKRY0qN8!;A#}`3aU~pC z%zsCX1tuIzTh_;fagL?0VHZTLOmy5z4-i$;VW40VxNLK9EbYf0IM(V9c-kB=vFb5b z0zlXFGI{(Vvt0r}VQ&BBy_c1xbHtI1E8?G>VxQ}7e0>jjBr?>ws7XvVV=(_9;cx(;;y{LOH#g+8dGjRsMh3O=@;tPMCK@A0i zTWIP7ur19hVWMh!Xfm5}@=Sx1XBtA2*%VPVU7A(G0Jhyib02mR`9^xs-P!^ZJ?7fb zW3COD47yue#14jr!3u+%DQa@2Sis*_utQ`qUx3MP4%P)<~?XpMFgAx5*rVzU?}60?Z3qr@Nv z;!h9>o0VB&Fqm{`kO+=zeO!|pL{8;+p0JPO>nGaf(ddx0jfpwp#j7{w$~+el_izNS zlS_E%H-$tZO$~8AI2#d{;9imwU2J6 zv1ib)COZ?8o!yOy_}uhry@}QWdbQr~?Cw60p}|QDYP+4wtWujCmR^(00000NkvXX Hu0mjfDPOr` literal 0 HcmV?d00001 diff --git a/emojis/2602.png b/emojis/2602.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2d8ce26305ad82d7be5dea990bf55bdc950425 GIT binary patch literal 582 zcmV-M0=fN(P)Gt-tUlQvmvoPvC+{`Xhb0@St3y=wowrYLNp4U ze?g~}Y@?6}oopzmC{|FcWG$IwU*^8dJzq06Vj@Vy^B8}S)EhQ6J<|j0^B1;o=`NED zXMR{u>pnS``;9w|qIWzS4&EXPej{{OX8A5!K>lpEl`eEz-NS3EtBJ2lI<558Orz89 zuYY-zSA%<)UNXTSIdGbhJucQ3r_x=Qd!3!Ln}ZF%m2EOsl)0tt9nG}eJ6M+G#X^G? zu6l|^VUggAMi=8zyV;%Vv{J^lvP~up@-5PKkEz~tDAtPWRUA4qca0H;aTSSSfb*Kgx#F@)aSQ`Sg&H4Y%arX>WsZ(#POd3|HeyJ zF~LcOWJrc&NQPuc#x?_tkz>FckOu(*gfoO83}FaE7{VeefU}{^`7AN3+zFuJ^F%&R z@OgsI6N1YVe#^zB=!Z)R@k!;25195NZpC^LnGmX^;15b7Cox?B?Ir3q*do992Cg~g U&s<@k+W-In07*qoM6N<$f?1UWTmS$7 literal 0 HcmV?d00001 diff --git a/emojis/2603.png b/emojis/2603.png new file mode 100644 index 0000000000000000000000000000000000000000..80a03bdbbb3ff4f5adee0c9a8d1534ccb3e070df GIT binary patch literal 837 zcmV-L1G@Z)P)x^rcTUrDr_FSW-Pty*Nv>83B7-SKe;_wwO-DG^ zixnk7Ea*+WSkb#I2zpgPv7oWm)`(UxqCZHvO6ILesiC=fQ}3MK>;HT1J?H736w*E) zX?^hxRu#FGReM!I(Ur-*Z%gI|dg4Ho6*IbCU*t+e$<~^l%-2I_V?qQ98nLO=CmQWTwisAT7ay&jc7(cYQ zu)tce*tW*8`1fbBsN)EKu}TkLy&f;U<~oqb;Gj2e@MUsYH(Hnxg-H-{i?N<+=i2Zvp;%QFYyACa#nSndr!D}2 z-dCDRO)OiF&t}#2QtjVjaHa&x$aAAE>zOI#ONhv>kZd?l6i&DD4~jX%YDt zaNOu7*6;$uGl6!~tf75f#5%^DlT4}^r|1=9*^T5$knI+4?llY3&HwxZw!|-=kh3A} P00000NkvXXu0mjfoq3p~ literal 0 HcmV?d00001 diff --git a/emojis/2604.png b/emojis/2604.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0c3438da220ad72830f2b3ec89e32a18732b10 GIT binary patch literal 586 zcmV-Q0=4~#P)w#CK8i~ z2@7H{NemJOA^riEbRe;`29mZ^o7TCsJ-_pNv}uL7v_2mlyZng%lz`*ww(UMs>?$7x zDu%PMy6Ye-h@jKJMPMh3z5%BKeiT70;{b3S*vGt%6qw2KncSQNo*5BA{K+NYN)YFA z6N8{yE;7|@V{0J5GnPb~->sK;*wY!0tS%M!Jl$ez?<#6DZR)e_C$?^ypQ2=bQ30M; z%f-Ixn#4psV@IWgfzhc}-Ow*N=NG{UBMcqD!)iJ8?cG$MBSK|$Bo)Ni^c=Z;6EtLm z5k?ph!7RDFwlf|+usKpL8av0phiNfc&%PP1f%#ovQD3p3{zF?L<)T^8TQbc|jMrMU z&3#~uzX(_e1}a@4eVod8HIgw}HwzjWOw_U*xQzuCSYUw#7C~}1aH2M6)|CR?Dez)= zj`!njCL3+C+;4;iC6GV@2_%pp8n*YW3TrPM>Y}G47VO^~x%Ik9Du{V^jdT7X2ugc4 zMtVx(hn>BV-i|1PBlyK!5-N(bjOYChbGjr?u0E+rrV2}nQ!5|Drd#AuOcK7Zq7IqP)^N4VjN^eM`MVKNe3r3 zHZ~KZF+q2KtS*lH3oZ6!8%8qI*f@R387N&`N$>lidEq0USzJ(ir4+tRqV*v{^1=dyMi|07+L}XXi zins4sM(lVXbB8NMJ!NvI;~D8C6oQ!S`GoRUB1( z&n4v=j4EeD7Ty}5$WZ8~$p#q)e9vPt?{QW!8*$h;q1J3MR4^kc|3$ssECs2QpBo7f z*JW(!8LhADn8^YI-Q6cGGp7ml}rtQX!w6$%R3UzRcV#8U`el zDozyPL=nmU0U8Em=4Khlg+XnqFg{Zp&n;=I*+hE1l8TIq=YebJY;Mun-l4l!rn^_B zv%N!Sa|>L9cpfS;8n@b|M!kUv(&_7t>LPvl=T8}ZI8U$MAUUj&D?MSL*Ek`1ynqH7 zY9BvSS$T!$x{IRvMmBEVeQ#7B(I>8pcXf)SdPuiY#l14gK>XtuW-N!3yF_Pe2OGx> zSZhBRqxyg$8^^RazHuu4{*zPP{R6uD2b?7$^9t0tAZzWhV(l`JaDIuvvazr#um@GPdk}l%pE&c=6 z!8Qq`w6TL*DT1@O>MjmWCSbC(LC7Eh=@Jkk4jFPL+CnKRiO-|1+cnYMMnV>W|f zzqhWFX|L19Dl$lSFa+918W)S$6hs8YKzW-qJ#T!O(j4-9Zw?tt9 zF`A?90dYJ66q+dnz9kCth|zS~O`dIU5%ZhoSjtV3nNM+6;9H`wfEYuk)u2|{U@lk% z6cfUjR*EMN?s6{W^78EmK7H;n5%`uU%p*qAX*Z}e%U8L5(~@1hju=g+-DIm; z#?6&b;&7Jc7sXt5m0GpTVe2DeG-5QJc9U9V12&}F{KU8#U%f57 d4Tk;Rm#6fgX`aEjK@zeE% z!y^Y!>Ib^{OzGKX9TiPWTv>^6yAV$B9=m9GWE2=B&(A6E8xlq9-DLCcp1&UK%4f!Y zEM@g=&5`ZLB(CfL&Hxj1vA}-7DlgyEZjPV*XK3lM-psCu$GnM(<+#3iw{g9S4xOa? z%*$kyj$&T5Ut;^*Z20oUF&f`iPz-tZ6)^`E(M~PIxOXGL(SQnrgX5tEaS)If^Z|)HHjI zu|zgvPS1;kR;x`n?+e~4y9zzG#}UQ7P0h4dWOoRD;uYzIFyBW(W#4;~e`i#*HMqF(NSf8M zc3%XMsaK0%Ji;>|CSa4n$EWF-W%4BNq`)7505<^vX4-IyIc4TNq(k#RS^g7kP?4vL z794^@a0m{;AvnPDhBBZGphqB#5mG})A*2vetdf)uQ9(_KLF+UgHhKM)k6NFHI4zsh z30&! z_uk^5V%8}>dZe^ql=DF%oi&vNj|jL1SewZ!lW_}J8=xbfed^@QMgArvPR_M~*M2wi z%ls$Fp`)M4*5+kosv1t7t|l3G8ps1$V6Pd!_qNI&s$i{^vG2WvaxQClRtrC?tfb!Z z-%sly#!|tDUKo+dxE8o6V9_GpN#{qtRsvKM#h*q|bpHO$FU8iZ*~YT^;}<+U z@euKYqby&&N_MO)%8#Eudt_?*`E)LCg%D#>8}mlLxpiT2_KK+8n8VwtbGTBXwssdO zC6gzrto>TUT8r1HQ@b(8;_MaS?bM~Q7HJZ5YJL7XL95AM!XP4F%#$y;1b#rj*XN+1 z)ntACI@X%Uq{hO~a zaYU!xrPJ;*uyT8qbUIBGMhwWb!^Cqh^TfL<2iot_2@}+CiSqHoj2=75#FI}`86PLDR1h@xnyTjoA9Z@394WX=o;c3Y>M{Hv zBGQ_~7zR>O;wVLS$U&u23~cYVv%S7QtAH1qtq#R}4k-jGm7?Hg`7g27>~(rrn3h2p zswmdf8@v1;#uzrXniym7!%)fl^~RF5mUho$W2=cy4F4vIHS6^Tei&h`Wux9$O1&`i z+H&9XUw7T?P+|=2Zl72u7-LC{A=U|fKV-MvrQU22>x3YRsNLIacY6Idl_SMM=y_8= z|5p2WxR`%tq)-rk7^0Ly3c-M}7OgeCzE7*$wXII?mcm|23vR2}GOz;n%wD_uRHxm2 zHG!#AN>-(i53tWzvzsL5_nZ*lD#2VqumHla?@z&+h^d^qtnUB-002ovPDHLkV1lrL Bn5qB( literal 0 HcmV?d00001 diff --git a/emojis/2618.png b/emojis/2618.png new file mode 100644 index 0000000000000000000000000000000000000000..0da05d4eea97efcc3de0cd505bc6edc5f36d12fc GIT binary patch literal 482 zcmV<80UiE{P)ugK~#moF^HFS00!Xa{oR*m-Ea_Lf?!SMlpsOSpi?+BL^OoiR5a8Q(b&>( zYf~Y&6oi|D4b2ilP>qU#+!zuBlA(i8eBYaLg6IDtpC@OwPFb~icw=kx(8hbq;?34C zV>pTzaS4k(rlT(%vR8Q`ypO|UxP)ssj`i{?ezwO%t(eHVT^o4C1JQ$4jEahi3e8>o zX1}|YYZVn06(b=b96-c<-`Ven#La|+goH`EM!v@D;m!KPg;+v>yUyW|Ld zq90G>S)9d$XOe!3kMIXJ?b->S;{@@*b7W^M^*hdc)RTDLLoeWjNBz~hI0gd;{J&UL zTUlHg_yA|^cN>>+)qjc8){IH~gBfdf-JuuCmUt^mZbXkX`3z5c=;blGF=h0ddCrfC zW4MJYO0J4ff}9G#daF#(&ZumAu607*qoM6N<$f*{Y`z5oCK literal 0 HcmV?d00001 diff --git a/emojis/261d.png b/emojis/261d.png new file mode 100644 index 0000000000000000000000000000000000000000..8aabe3d0a36641c6d00f5373e0ad15f323c357df GIT binary patch literal 495 zcmV$tYFL)5VP7q2UtPO6?z}{`G?of z>Zye`&;%Y9y?B(Ux30pCd~5F>(OQ&*a3rP73M*_7b0uyGxGikC*dN^T^=j%5C(Uf5 zu}HL=z&2wcELWJaK~%q$KaIV(4tORC1Fw`Zm$-{eIGqKy84HvsaVM%9jXQv+r2jPs z<1gcn(EZS6DqX8x_Y1+>Fw*;yV z-U>ltL?MV;7yY}C(M3d1gvvk&@v5;PCJ3GmwkTj zYqo6LJ~KK#aS>=590VTlT((Q-8c;(zf>?C>UVUw5bbMkSr~^}iSpfnB2oNAZXcm|P z>X^+t-!ttoE&_EnH7RA4zKlW=8x%qw8cB)LWJ>904>W-~B{Q2F92jU-xAlMIoSOnv zxYNqR7k~cMJW3a5*7VNoV3KBm2JrFD+VGA3tg-+&N@n(UrLXtR9kt<84;w3WGrp7< z5?b&B)$I>}3lyBQ>sh7m{;iug+{VTR2WH-)?fT;HWLf6ln4Ug4Qm^d=Rw(&_YL!iz z{^R~~^}BDrqOGq|0g3PDFVObs;OU`>J(K%|{YJ?<6J2UCMmjBk>v`{2VlN-4&4 zPi*q*>+5vnAvSt@{byVIvy;HqcMct<%ag}X*3ai5e?%AGSXtdAm<1ZZx8C>Mb~bpm zKdZbuJp2M3Ph0ub)wQ+PLx{)C?1ZEtg9R_R224>3AwCW<{sO!LJOl)cq?DFIi0=U} zO8S+8naz2iMi;|Ad9=EA`R{-JJ)@*#W|*0i6wK_dq)U{NRCCVk2(U~^sFswJ=OGU< z#yo`B$_pW=P-oM!bMAeYVp=5W7|;Ngkggzs1QJLffrP;oU(C=N9kqip&fw3Ca@ zBsAjWdtfk4Bn}LAfXb27kG z5o!UUN)dkb8Rz-c=cpW!3o*5nsX{7TmO3ysfl#H0iN$q_wH4gOtBknt3dP!6CZ4XN zazri!H6?J)%VLQ-x#FE=RGtB^K;iZh$blS%xh3!ls60b)ZkYj5N5sxh4G2_<@GA41 z>iz=fgY%*Ln-Q-vk4h1_095mZVsb95f(sb1l;h7YDb`j%;<(*lGJXj1zy-LlN_x0U zF7_G9_O>`$y~}_ZcJvb@FvI@*;Ar(8Nc7qMH%5FQA!prv?E4o+RG#MV#vA%no+jJd z;y)4}tPSb`0V8r0@4v^3Zqk?TZqofw2g?}K18Y051XyE?f9VO{)EvkId3aN|@GmcN z&PO0|l82xHbQtoYS;$T}m7U;4HyG1#&~OMHzMG`a(5y@?AS9>q6fUgNmvz2k2RjUP zkS!RtNzQjBhBgelZm0>=?O-QJ4|W*SGgy<+z_cwypKlmrwjJ4H!^MVbK+J#=pzV<+ bh%^2H{S2t&mg5%X00000NkvXXu0mjfNgoD6 literal 0 HcmV?d00001 diff --git a/emojis/2623.png b/emojis/2623.png new file mode 100644 index 0000000000000000000000000000000000000000..6e0d0122923fbb0a00803b1270a852d3477b2633 GIT binary patch literal 698 zcmV;r0!96aP)0zV9LC|_{XFNyyhzfR(RLc5nH)=uQj6H2kd2{e+MuX3y6K`& z5O<=83lVKUKvn2UT=)qThPH^is5mYxZ81m@!Vsz`zQv?T)tNIn=kFOZ0pr5!(#esK zcZrOMKJWI!AGIhVV@4Tl+>w-dPjKdI&k{q0RPHQjHxRO14T7sOI|fYA5G=^CNJBzJ zAVTli2(tG9fS=2qNly6DxLIAboV31cc2@67(NLtNOuGwCQ`&XLli~l0LbE&u^ol?0|8gW;2t3sH@&QiN$lcjtJM$ zhgD~YOJ`W*NT=_UsR82wSQ+%Y#dG`B-UDd@@&BlOExvn*y5#X~MpEW(0SD@2JkTy3WrCHXHym;u|MexOWNHwGo#e#9lwgUfw73!oirNSNbREfulZtVitM4gdfE07*qoM6N<$f>r%RO#lD@ literal 0 HcmV?d00001 diff --git a/emojis/2626.png b/emojis/2626.png new file mode 100644 index 0000000000000000000000000000000000000000..09146d5d26e2d91990b00410a4e5e42947410d0c GIT binary patch literal 503 zcmVaBqKjfhj*I>r+gnSFDFqdn+8Gn(yVoHj$MKx50;+3WQ;rXY1M58CmxxLaVBCK3rk5B*D_QqChjkvagrb( zTAytW_G}hz&LE>2)g6;_$tcdTOOWIrh69iHTP=hjlmvQ!PJjURKK?)v{82A*eg0l& tI-XhsVvG~etaWMDx*!PCGY;#|e*j*b8T002ovPDHLkV1g{C(HH;# literal 0 HcmV?d00001 diff --git a/emojis/262a.png b/emojis/262a.png new file mode 100644 index 0000000000000000000000000000000000000000..fe83d143b3da4a6fcafe977302a5b9a44adb1c5d GIT binary patch literal 623 zcmV-#0+9WQP)#H0Knnj|L*!i+dH8p(o$Zuh^Pz_4HA_&XktPbG)80m02-a# zWYoo>AHcy?7Z)crA@OB1L1K)-5K2U$K_MmOrM;GNyFI^R=<|sCH(uO{sfje8 z@_%$}CX|?(NCPS!{-8{1sFipsOdupv(QB+MlvtW6P&4Z^sR+^vpyDww5@Ymgl91-Z z>-hQo6!Qk}o@QCj=rpMc9w#owIddh65bP>#nS6eeV|h-;tXi}uTL?yccqud``XZdZ z+=&qETK!(;)uRO}r5dinn!#QYO{c~aNV33TY+Fn|{zj!#W3P^bVSE7zmqbG#B$FIa zam`O}P}(wawZ(&+z0yU`F^%!teaJoumqdfs9za$EuH0f7ug%;JZSf$N?)K9XQRp4i zP<#>&iGLtT0$C9_gd`Zc&_Vxj8xDnrV&1^2*~p5((QzP5W@;T*_YsZ!N`=j}9eM}% z@$BIoLa6bmW?A2 zk{P?1A{bHds#`YipZ@^CZ}Qm5TMuX`ZC0_Wb-Isg2mxx;&*9-Hwhg9HNAXK^9*UsG z0u=KGE(MQIuXB_OCZpH72x&glsGoD!yKxos25+Ba@lpUCP-&W<-e7U2Kx(L!cq&XF zBva9Atb8r8^rb+}tmC08*i0Zu11e3`9gED=I+>|;{zA9m-Y;|8x+;Imo2UQ)002ov JPDHLkV1g!X82bPK literal 0 HcmV?d00001 diff --git a/emojis/262e.png b/emojis/262e.png new file mode 100644 index 0000000000000000000000000000000000000000..d17a2512e65be9456d1cd3e2e8650e3ed137a0e7 GIT binary patch literal 671 zcmV;Q0$}}#P)3<5!d zF6n58sYA2Rml~ zAOGiQI~AK$nuDD)fRA(Bnv6fF;>e`(oEj$Q_?m;AGYa6NLY=PBKdjTzU4!frILv}Y zBAVsHyCmtPK?R?nLR(KQqf=d|)e6gVaejQx691H8c`iTQ=+A zZT1o;^o{703C_4RnNW8Pk=0#n%jREf%O2hTe(O`AkC%c)`F5R_~zC8=xD@CMv0&VJ+9&m3i`ErZ3` z82$#8dR=2G9O3C5_cbmXzvZ+t`fMaWZHWJ+<6p25)v!(and^mWeOEG zKOV9${gu8Eoq;DI6qmqp`I?VJG|R&D7t%X9Dk;Db;G-nHWAOgP*p->?EeZet002ovPDHLk FV1nT`Gm8KK literal 0 HcmV?d00001 diff --git a/emojis/262f.png b/emojis/262f.png new file mode 100644 index 0000000000000000000000000000000000000000..a02c9adc526e6675747389014bef9003cff73ef3 GIT binary patch literal 643 zcmV-}0(||6P)%>ZGJkz_xSHVJIdR0BgdIVPNr_sxhv7>{^LW@tP`=RgF1K)~_ypvvCn zFIMIi_7xqEuz*L;V2oQ2`{@~s;SUJ7s)or{R^$5Z9(o32cnLJbQ!=Ad-2@~7hh^C; zWb!Oz@1i!;5W( z##6XN>Ll4u=Rg!MxkY5`ZZ8hGMI@ioaBQw=j7+2n%6=-ki9lT>A>j}BIIg2VO!8b4 ztFL#-zE^SBmd(LlnP{7YL&V|ZFP3GqGOLhXR55fD+p_tG%^w1F+7AP>YT;UYr?UEH zmtnEbT6T15m(nhgoE8O72U)k z(6BtGP&F(Zkwg$fH_0ujZ<|KDsVO8JS44Jo}x3qT>?r`10|P=Z`)yd?Ur=z4PpCmZ;S%T2F^4?38)+bc4c9 z87~ni0$~~oiq6X?8w6!P(S(HKNHwVFCMPKRFLYf!j5Nis01_T%&8DPPDQQ*An#~D{ d+xzPeegp1K-2{WWRG$C<002ovPDHLkV1kPN7`l_DxK*Xah%hz2O3jl56hhLMxZAsQ zT}UwZdXtrThjM9;a%qp1d55{zn{=H|@WZZB^CWc&A;XN4=!o!cVvUh|CheUunqn%E zm`ZzRjFG!0@1CuZ=!jsXqtt1HdIpj#%@p{${)-PUHn{evo5E&=z}aDgw-al8+bFX% zQ=n%siJhwu(AbyC=$L(Rd{1)jayyMpD%)SHycy3DxcQ`)&NIy%KY5f`a|32yoX;7Z zeAY$d0KP9#RDnAYq^B;Wrvk{2g8hUcG%$d(^CYZ@dm8r681)! z-oYe_D#&MD0ve&!1&5(KX?_-dGjiAD{qs+xPwND7A6>58?__$?qJOxJ*_S!$6hgLD zp}1A$>ceiPCoOENjJGH8_9XU3ndwQ3s}H*=ZdI{!73wrXswQYLBCIbKxp?aYOEU#x z%?$*42b1&gZ~>itHBS<-a~14dh0htCKtAhICw<9ZT(#dE`Vo&NF9D7G!*zCXom~#$ZaUe~ YKN5=i=}6-zfdBvi07*qoM6N<$g2yT|-~a#s literal 0 HcmV?d00001 diff --git a/emojis/2639.png b/emojis/2639.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9221f849be7cf1fcd6c84e2b0216a40ed6d9a5 GIT binary patch literal 715 zcmV;+0yO=JP)y`HUbOyBb6Gl64wWY`{S3**HjTyL?b@!T0D9t8foYQ6#lN5G$;D^#FK}UW;REO zLP<2@(*`ef-7|vPPC)W+GSKAd=+7O zY%G)G`}ickEE~s}K}tcH5!AX>U;!0U3ObhQd`)Kw`0JS!@YmC-`)JX9NGYgdsMLt< zYzJl#LNLqiQaE;K9U!PBfiF}M0)!CQ`69#VEW_z6cD{%Z0wJiCQd1+=6Cx*n?)TEs7R29Nhf9^XT?$Ea;>v+j@2)6Qw!@2eKN7t?p-x}DJM8n$;a?iO9^5X4 z@t^s@9Y(q xW7}Hy8M@XD82ph+rLDyEd&5`bm(4d+`3(Z5;C0L!j-UVl002ovPDHLkV1gCNQ|4D*>5ISj#}v9tP?^Q0nyH zrQrY3^SauT7ZJgO7h$vm4?VaIb*P(&M66J$W23leYm%>T*12^T@p)o>`HUx|n64fh zSg4K<&Z25x6YHcE;kpCzbJIiir9ol|^T<7E0u#i7WR&H8zfcR039)~)7xzMSHhF(l94|I>x{?ke>q5uxX7;~Aa3aPy-h zT$@C2e2W)v%Iub#Hb?b@FkNXV-y4!;A%Y09ER^pJnXWX1@WAFMyX9sk@2u%-dnDM) zTaw2T_VO0tvA#BWXDwIiu4sJwwy!2~f9Fgz{cxx0lMlZ$e6*rx`_6rDygI2~AK`YD za+?=!x0SjpIc^x=UN!dnMLm&Br4ir%xb5mjQ_s0GRa3PQqDk#%4@6oe-N;D_i^56F zC`9nq>r-Bvt?8)@lsytjVV$(7klEKF&EXQ-9;ytKRR+oqXk(c)hn7Mv{HsNJ7t2yC kU=~&Tnph)!AY6CAKd`{GOT+fDM*si-07*qoM6N<$f=?Dd$^ZZW literal 0 HcmV?d00001 diff --git a/emojis/2648.png b/emojis/2648.png new file mode 100644 index 0000000000000000000000000000000000000000..5a84d63cfab6fd96ffbdad47ee7681f597aba5b1 GIT binary patch literal 485 zcmVu?hdnGp b1NVOdzhsrzVgrYs00000NkvXXu0mjfRaW5R literal 0 HcmV?d00001 diff --git a/emojis/2649.png b/emojis/2649.png new file mode 100644 index 0000000000000000000000000000000000000000..1d803a61b7cc1d0737137d98e59ba10148b41ee4 GIT binary patch literal 519 zcmV+i0{H!jP)Ce7Is3i1$<`1@&@^!?khh?NC&`s3KO zLPo?QRu<6dpKcmfRscHxPnYZ&i3d4#If4)x@7HU5`Ou)3Bgrr)FBo*YF7KXIscbh9 zt_xRh9wRyy!Y~7*mn>#dqo`(5qokKC3^PDcSmN1fbod(yIDk$MJB<$i;0U``$N&!gbL?8-?k@yqlP==tAH@Iw002ov JPDHLkV1n@(;;8@t literal 0 HcmV?d00001 diff --git a/emojis/264a.png b/emojis/264a.png new file mode 100644 index 0000000000000000000000000000000000000000..9e16311d640169d9cd0e6de477a89119fe71ea54 GIT binary patch literal 434 zcmV;j0ZsmiP)>Sa}It0RE%HV1>tc^PBuru>!UOrf5i99Ux`-!cMcW*ii-5%gGn`AKTZ_Ca? zw+Hyl&hIRCdkXNma`#b-&Wca`Ys@Gv$Wl$I4VI$>jX6a-a0!;09PM2Yg(+8j#e_fa zvHEh6cHki$!T(gHVHD?_M;TF=Vksu}cVm8hjZvQD)#ekFEBNx^1nc?weRN^?`1Syu zR~W+$#S~+p$SQPRp>z0sc!@Q>EU}8L;$M=QBsEEDlGG%rNijtTa2pQFlPFiP^tgr9 zY&qz{;58kJti%{@C?=Ml1-#gJKs)e|j=*~O^bXTr@2oM3b3VU6W`8%vQcPT&W_p*ObXJh1no=7qM+q8pigw^Kf3HdMC+C_162OnblqgKOT}Bkb!8fKQaxm;~0|~QB c2B-b4zgB*T4skN!LI3~&07*qoM6N<$f`2W*P5=M^ literal 0 HcmV?d00001 diff --git a/emojis/264b.png b/emojis/264b.png new file mode 100644 index 0000000000000000000000000000000000000000..9c2e4546a8142cad0b4540f308932e01927decce GIT binary patch literal 602 zcmV-g0;T_!(%gsY|2@gS}mx}&^Is|Fx zExHO3bQ6LO-MSQ!Nd+AYx)?|_EW(^Uif(Q5Wp2;2XYS<*;(1_<2>g7c2iITUiiG1c zfXd;Nu$dN-aC`<(IXo4K85vM%(Ul0%(;q^Tz%m*X^Hp}XDjZl1{y~*-ND^GUnP6xn ziXhc&trL7q;1C8Q~gO(uE!B#p6GBXTUj z&`6Z4cato=&+_?A2HWN@fkW%`vGub|rCg`5S)sgJBhVq!Y}ynyOg=u};KjoqoVpOB z|MU@DG7f#Y$l1{(yIG5lqh36+#CFD_Rc_tn<)alWqmE19DCVoo&#uyy2%`7|uO6?^ zs5NP~lc`|t*KoPGPiQVV%#3j?__nN`{>?&Trhe)psh2SNGDzRv?`LjV8(07*qoM6N<$f(P3q&ma9HpEZ$WiJ4nNq-Nu6tQ7Icv=HqHQOcFc zXHDu{$0e6BY3mgDgoH=X#2=JNrd5|=2zmMa%oIck@@2L(vf`+X%ollE-E?gVLCnPM*=FO8V z6|07GOQ{y!_?J5&R*)F zv{z<*`2dgL7*n$`HJfIuO9e8Y59y5hDdx)5YzL133_#&OEZxS^ZH_TyU>-0yIRm)= Y4`gt>qu-{|bpQYW07*qoM6N<$f{=m@f&c&j literal 0 HcmV?d00001 diff --git a/emojis/264d.png b/emojis/264d.png new file mode 100644 index 0000000000000000000000000000000000000000..c3dd210be4d0b0434a71e449059871108a04eed1 GIT binary patch literal 531 zcmV+u0_^>XP)L4o7eZ|N`-!{P7jGw`sSKdA zKSrsVU66@rDg)^3pPq=OG8&-s*U`x!$ES3@tkg+PAENrLjn!4ePled{P^b38WCUHK zPmlOHKNn|a{sdcPlSn*()m5~%Ev7FW;mN%r@I&+$8^T`DT*zwK%!=HKc^Gkj5|#FaVtqUOvua zbrc=bMk$ALb8&LZH5`Wl!*h1>VtqUqodx_1>Hb#OmP1eRlRBD$5Qvx(5V;RkA zQN*K}5}+|TEis=dNkGF-frVs**yZy$>iZUrT93cbBt9}IxP3pxrK=Y>?hJ6`@^SV) zws^ZyV|Y5kOX8DTPq4H+&CACJ992vlsq8d&9;E4aPbqI2cnLg0VaalCp7+n|{MhYa zk8JFb&G#=IKD?-ty{QvCr{X2>n9+mCfS~r(#P6tL5(o)q^$=bHkA8QEZNsb{!f!?o zVcXE}4e=6qn5`3xJ(KJAVyFSZm?{-k?#8HBEzIT#UIJHeN@Xz}p}N)P;!>EkLK2}W z2vy-$A;m&6%>Gu3#dL(=l**XIm0gXJ%O@DiT$`g({*B|x${Z-LR!HJ__sn4X)h`?p z*Usw(-#)cL;minn<^ac&N4p?6V?)mzFeY(jS9NZzC-@)bO@o~`4IC2J!RI#J_5g){ zvw@$7UB)C}0orkAz~OeA30cBuR*Qhe-3 z0SArfs-p=>*_a3rAfyRGu>>roA6#rN?YZaZO)$BTMj(A2G52QqZ8DKc0}c=4=8M^R znM|b8fWyN%$)~Bb0v!J8d(p|@h{M5Vg_mPpoFCWGO~b%&oF5w%%D+5Xa1__#Jy9m6 z2bi20qIBxf)8Bz^8fsO|*sESXyxT@M47W+H?XQ>FUM=EXYQ8M)Qq0%cTPyK(Da+$0 zkLd32pcP5T?~5kJSd0PVTZ}gNz9kS*f>tE|VY!>6O_DZA+9V076g&#K8iBK)HOeO* z)(2}Lq9n1n0>KT6ki)GihnrP|fXwm{0VxG;sln*fGwPR`Xe>hJ^AT4ypMc^v!41Y( zGM{ox%|6FTL=gh4h41eV2q^9$w{yYAg&oFU_YsXL*1jF{j{;o4;SR=FHdYGgh9Sh2 n`C@h+aJdKFFod}I^X%Lo8WNQNrxJ)l00000NkvXXu0mjfe0#%A literal 0 HcmV?d00001 diff --git a/emojis/2650.png b/emojis/2650.png new file mode 100644 index 0000000000000000000000000000000000000000..c2248b7ea71ea7d30434c27b017c1407aa1ca2d7 GIT binary patch literal 502 zcmV=8$`P*lSABzzY zF@>&Ik2cv_Z_uT32)`BZ_})8E*fVG9^4hGc4# zjH#2$8(1X=yX>+@!k<=v-wuexZe;H~V3!OfTXuu<*%M^vr#Lfv9INDDmt7)K!u!{C zetv5c5%g*8bojL1ATg%mHv=~92K)J~04e!T&?jT+T)KIZw=cfnZTl=P&5%sR8AQ-? z;qo}Syn$76SbO=E=gS{y{|?BQlMJHL)A-(I^+}bDwQaguI~|@r+(2P474QJftu}G1 sP5K3YLyq8yTD?*LJcj4hepK%N10E=x!w4vjR{#J207*qoM6N<$f{HQRj{pDw literal 0 HcmV?d00001 diff --git a/emojis/2651.png b/emojis/2651.png new file mode 100644 index 0000000000000000000000000000000000000000..ff58cf0240792911c1c8d8b74b3a392a52afbaf7 GIT binary patch literal 499 zcmV5I&0KoD8^E6wx&a~RuH;1D`DEKytQxrrQ3bK=U6F-7i5AG^> zs{01}0=p=pg5E?uC_02qMA#VAF%oKP>uMI$x+agNOs#=*?DrFQZale})N>_3XKySN zvofjYN`TJZ=?F>^(D^Mr9;0|U&ERl^$>|gquOB8mF~Tl%jUDk+l(Sb4F*TFL*RoxX zUpUBvxmBv`Hen_B}J{l#Aq>sAc;C4JR`50j&eQdWq8fJ@3euP9S%EV-X zWNwIF8oQ{j+Z;VV%E{>zLeRDNtis#JCO%1zX01(a!$I)Rm(M>K9E$Mzp~3vEWfq@S zC|*hau{cvRSsJE; z+wnM3+>g1o#hXV4D7rL46wVyr+_f=`6^oY(8+@;~Q3{0MKN?^GIsr@1t9*D-!*dmX p2tkk~QOp7sK?*!q(TAnr_AgvxltX3s!07-0002ovPDHLkV1nx8+=~DJ literal 0 HcmV?d00001 diff --git a/emojis/2652.png b/emojis/2652.png new file mode 100644 index 0000000000000000000000000000000000000000..22bbd85f1a560cbe3e701543ea9ed637647317fb GIT binary patch literal 626 zcmV-&0*(ENP)$(mG(Ix0o_x_kc1bLH?3X;G|$z^CNInBAbwYRNkC&2)ge(G5}VVlV3Uf#;gsZQl2wY!9Gnd{arj&O8iAu-yEwpwwU{fhjTH)l>wE*SSMJ&#xIN0H1?}?2F0Tr8E?7LKt$6Lf~ zco~}{&r{>#%*{shl*!a+jLpsE>^@%2P~R_dTDt1U=q6(y7APdi5>n89H9&M;=f%A- z645jn-K77)cfP)x2MZ>@Eb+W|jQE0%XNtI) zk;+;(Rem>}x3+Qgf*+eo0sr<=TD$8}*GY{(A+PXpoMMJ7H+@$V?b<8$%)VVIo#ZC=8k78x0gP)L#`q~K6zEhB>w-ah_GGM*ta zmE`H&Z_I|{q*EsEU(GP^WP;>UnpD!jChlMUXpyzfrJ(;czyj4Fu>d1&lH+tMq!I=> zQV}SMAg!C^s6Y(R^rV3;lQt=oN*LHo!@@Ky@?z40AP{5iVipAd0k_h^typzZ=l}o! M07*qoM6N<$f~T}0=Kufz literal 0 HcmV?d00001 diff --git a/emojis/2653.png b/emojis/2653.png new file mode 100644 index 0000000000000000000000000000000000000000..43e0d45f504eb9a666c7f021467bdbb87aa96156 GIT binary patch literal 531 zcmV+u0_^>XP)3rP4Cmkv%lADx)ji89pWyL)A2D;dxSKy(0 z;A?1?U3v}MG1v}8JLLvCSQa{TxmbIaiJLy9JdURa3jBPe^z7}+xVcmY45ni>JGGLE zn@eTDV0uQ}Tq-NT;18t%@fN6>Gy`5wR?={I1Y9@?C*5AUsxpf z*kton1>0s!1fIXXOXb}+K5n%T;hMrl1QJ<;cD>7p2#7G&{``|f)ibi?svo|SST=|x1Gp(1zF9?~nCAHKf_mi~ullDS93Ng#D5mkvC?<3qgDac;oel@P z9qgfvmp!!E+Bo9&Ba^|vW7 zvD=&{e)dT(T8EO>~%J#^y}$LwKD zQ%@r|43*PWxsC7s(N3K>DIp;tF_y-&$Tfe&T;goX+wda@f_AbuZI?E(BCh)1tkewk zTB@W-X{UPAf*?GQ+_A5mt0Z_&5KV;&#e!tX0m2gI1))ii(j|F>&cV7Qk5jr7O@(3+ za}IB=SSU0p!n`92^Fe1Q;;5o2H2rMbR%yITg8ipchoCh($ M07*qoM6N<$g5c}0qyPW_ literal 0 HcmV?d00001 diff --git a/emojis/2663.png b/emojis/2663.png new file mode 100644 index 0000000000000000000000000000000000000000..419f9be462beb4e1e20674cf88cdfecb0e2cae61 GIT binary patch literal 479 zcmV<50U-W~P)_;!3Hlt=xi{N1}aCG`M=jaj>!%%B(PRKKJb~hIKH}f?VN2@cgXK{k)x;1 z+QoN?TUfT^A5}k)dtTG%=;-LEJ&7w=wy-Susq|^-N>{qlHG&|BxesyJn+{7pl8}&) zXbOcwQRO+FdedLJ=Q=t%I!zD+$y$;VRenad(3P3wgk((+gd90`#jKqPMp0J@v9aR?SJl2v{D>8=+9+Qn#wLUKJZvAdOUk>Nu1_6L47_b<3) Vl56V-qM!f(002ovPDHLkV1o2S-aP;S literal 0 HcmV?d00001 diff --git a/emojis/2665.png b/emojis/2665.png new file mode 100644 index 0000000000000000000000000000000000000000..dca527bf50fa4b61f84caed6d85edac9c85da440 GIT binary patch literal 395 zcmV;60d)R}P)8B77zg0%_q=~%P)Q>V=|os6V(n-lu{r>Tj^ZQCOhP(aM289{ zhv4H3tPKW<0}vz@Eq$LGX^=K=(YP-ED_3U^`=NSf=JxD8Kh<^}rB;eZ_+-Pr$T=KO z^QNU9;+^k?OZ$%~j)`ZO_1lH2Iu#;$jybmlRU-=o6STHku&0?&8EaL zsRx5HE#^%UXHh1bSEh%eg^|gc?X`+D@&T{x-0R54wp*`J^(8yhdS4p)xY`=Navv-H z-O73_e@V1xqODfd0zUh@&&7hYHECKxLXsECMReQi%EiWu5k?rs*8NnmJQy7yw-B3^ z>et7{%gQf9x?h5x@uCcA+(fgXcl|~;UbMx~l}$>iueV!<_mVqEl`BOTK@nWmq=G}QxpT;L|UlQI)t|5f<>>GL^SQ)866IKo_Fow^RSyrad@(#jZCr& zNr<}xM@P?R50(q@)Y%>xeN}Cn1_1;CN=i1P=hZTh1d>eG^PAVUCwPew)~cLs(Y z0>{`f^kDGBbVf!a_(*(a)RUJ=`+KK=2p(x6PiaYI`Ng-54|qsC^t?K#_o>eTg?~k~ zgmSL!*mDa%noV2+*P&Q4Hr`)+0^|sn8}Bd97UIbmE{Ut6jZ75csjKWEA;ghUrT6=@ zO=F%v1pi6ky0*IbsO8wN*+a{*-&|i?oW><^8CJ)d`CJ_hswL*uBQ5c|0UO)wcQZOgeYCFP0d_qhW8)>b3Xxx4OUZ68N+n zyF1lbxdkkYXp#lsJ2a`q+}h# g>b$+NzBEUO-|u9GAa-fqjsO4v07*qoM6N<$f<30?4FCWD literal 0 HcmV?d00001 diff --git a/emojis/2668.png b/emojis/2668.png new file mode 100644 index 0000000000000000000000000000000000000000..6ddd77c9b9cd5f64a3255e12caf4ee99a3f5943c GIT binary patch literal 572 zcmV-C0>k}@P)5l=}k<2&q66Rb4$HYN=X z4GlA|Y~SUYb^IZgG+)tkk|pi=#_7mw_**Tz!9Y=z_I;cY?~=1PA;a6lm<#GCj%jym zX=x23MvNF^Z2Ky9R3C5qI)N@)!A;@MxL;Rmr({fm{zU2)ye zA;fG%gt`;ANv2{R_mC-W!F^(C2+6D=hKyanzGl>PPI3Z2t8+0NN7J53Ea8r}r?lw4 zj$IhYLCiNcyn#jaym+ztj5<(xxN<~$DD{onFrPR$p~&HkIgMjj!f)zZd@L@iTeZt% zYSUI6)}9*hA?Cy~7O`s68ZN30e~~F>@Pt^#96p+mOX?wUQhb5)^ek5Jt4-T+FL@Mq z<4g4txip!~th-`LpCpTwXD^R458`QTvuPFI0000< KMNUMnLSTY(WdwEr literal 0 HcmV?d00001 diff --git a/emojis/267b.png b/emojis/267b.png new file mode 100644 index 0000000000000000000000000000000000000000..87f432fab817c336a15578cb48a3203b4451af04 GIT binary patch literal 688 zcmV;h0#E&kP)h^MFk;5bPGCE)U^n@gi*0C8Ix}r50gMx4q8k-sjiM#bngyBgZdxQYi>rYjSJj z4bPYeV1YoC8cjRF#phqXA`BM6MyyCrVsY z5mmfBN7tjOs4A+;irDhLzy*^zKeu~scJ_KAnWzF1ENB*pI@~1{0u`|0dHkW&0NW$c zXlL7oXn%cdqJ3s&HdZJU_F8LMSA>dfJPCibTi*gWrZm(x2adxtpHMbfu@Vnn`D#o933}uIfj)o)*Mw^t*KKU=bxyljaIv{1$zrPd&H(3uG3Ok^pNA-s zx>()La3p+&{~H$JmI3_*?p*3uDwy_jl+1k}8GGet{T@L17j?a;o3`qNqPw-rYhSNg zlZXm}LKdZvPNgr0BVmdz0jGfh7C1%TfMCT4^QuhMr`2m#Q$c~tzz^Ul@RJe|Vcu_P Wdjr$L#6!mb0000Q^ji_LGTbC+@d`2c2v4p}lV`D=v~ktBPb zk=7fhY3Uy3VaFgANl(4I45w`7W&Z^4ADu(cz;;}vqTvNAkqr_Ak}g#prR~EgU00_-hNc!srzyPhR3)kQ)IqLSmon>Du$c5jH@B#7>%$*fBf*@V#cDK0IuQs1 z61zITOwr@<;J;5(wx&x#9hN$1bdaQjW)Soby|g;JGvhP!%rnpP`!=l;EkX2p z>G_wI_*-$Re6V)c-Ayw-!0ZHI+$N-VC5{3wdh`_&S~>nOQCZu1+J3Ipd1lejG-GCV z3hZq*xRVmc850&S2FqXUF8unc;D)gxa5ku2VNIE9mjBqm&uQOpN`aEAe z{PSq%d&5iw)hAy$cp-W0os6)^KMb=sFb${j)Xrya%B7l2Zwq{3*#D9f!btnrY$`t5K2 zfnJ~KL%^*tAZN^gRm6t%ZoYma^LcHnLxMZEyUfr!8!~&%FP~ZIJ@Lb}(d;($&PHt3 z?$~^sSPO_MC5>jPjDIs>0fs;%)B+aR#4*wC z*nFH=3y6RetS-@5>-lCpusVGc*lMAZdFM3r-V(5vB^vyPcGouq zR7&ncZ=~f?kcUB7SgUQx=e+mDLg23R{~E)goi7$#8jAHl0c02-87~nC4FCWD07*qo IM6N<$f&ph$umAu6 literal 0 HcmV?d00001 diff --git a/emojis/2693.png b/emojis/2693.png new file mode 100644 index 0000000000000000000000000000000000000000..31896a550e34042043ac50b2c3710ed88e9871e1 GIT binary patch literal 493 zcmV9h(AFb93_6>B$&{lIOKgUg$(N3_nd6M_?`{MeEQ5s51c;pjuSW3 zCs?eRAKre_2CpSPs9q()$K@y7wq~|L;sU-+T%%@v?%23cZd)@1K@fy;fb+{T&MnJ0 zcieHl91sLS5VOYpdR@FQ(jT4pUR|fw4Jj!pDJkhzxq>4c;fi!iN=iyfYK~fShWvm> z{Oh~OJ)Fg#{$uX6_`e?N_%NKcj5nOvr@wVtj;xupny3k{OTWZ|&z*SHiFb*tCjSU7 z(_2`LqVblvx$6ANac9S!9e1`#c^Nk=Z&wWZRQL>I%Ib^BYG<-CS=r#Ru!j+@rFKV} zU)3%STl))#3lZ15r5T-|;en}c>r1?YLDt{%O$2Mj> j)Y?nEIrx2)QAYV2YwM{3JPzE|00000NkvXXu0mjf=e^$W literal 0 HcmV?d00001 diff --git a/emojis/2694.png b/emojis/2694.png new file mode 100644 index 0000000000000000000000000000000000000000..d87a6a60fb91c01a1d032099377cc11c7d6f29ef GIT binary patch literal 780 zcmV+n1M~ceP)w#0K~#moKWvm`9KiAK^Lzh1_uhNgBG$IVqQnjznm{n=3^!yRXckg%A* zV8F#_Of*3T2F0B?IdhFM9T*sTB)IBCB8d(pXh|RLd0$F48B z0ttd(U~G=D8Knk_Hjwad35qt*G&aN7oG=V_n zrQ>+j*qkRer*s-<7@J{ij*g>FnpV$v@B7YqobyNt5kW+dAQ;qZ)ejP_SCfinpRpOn z=IA)OTdSol5j7A|h$uu9;mpB^Y=*HplM{8`ntOdmL<(LIhS?hXTyNt5 zL6}Ah$8Q1+V>67+5fKutQKC+Je0%)p_sd21uL1Z?N@0KHd-f^RRjD7i63o7#yCa9O zIXaH+Dy96BEI*|b%xGzh?)~&`vAuZ{&u5f^_vh!>8Sb&w8$2j>cdp3VAFE)`Q+X*n`V9V@NxG-{%m_Yd)6cD{Boa?c+@o=N9n0026M%ocsw zaA=JnsKsg#X{kl0+5#~sLc%anA{QY$@67W;kGtpjc4ruPX0Mm{kMqs(+WNRBAjbiG zd)2{#j5m}yE^+{$$oPi@;xwp0S!kUY3qXzvJ~(!W7{(yj8N^NCD7&N&h;`sO=nG;3 z*rvocu_GUPS7ToBX|_=FHZ(oP$i@8Pg+pEuj2T3t5V@Wz7v0Wm$9{z7rYQ06&R(W0 zSFCAksayZJv>D77B6p9H>nE0OT|2o5;vpsXKVNzhRBt5~vd7vY(-b9cEgxqsA9wl4 zADG{0NERZm*9hYfVnpm(%m(rATZ!KJjfP}oZomv@22KKrE+A!QbC^vFuMa#x?3!6? z>cec>%;tcUM3)54^CDy#s#Z8&=Y>?eXdE<*@z++dig&4|VZ^v3Jfd;IknctKR~nbw zzvY7dmb%PjjSIVxh4VifJDX~=J*N(5M9K26BRwsNOy}A9R0wqELx1(_X3*c9$UKw1 z>_`Iv`)vac_~SMZW50~UED5ZzR~i@r(m)y*0n+TXf?3i>ngm`0=YZot2ABo%z#Ynr zN5Bi99SDF`;1ekC6H%52-m}9%8bpi&&6J57z$j)DRB*^Z1~QO=2oPgHE8qbh&u4^P)@FqaaBW$+{#&LImM87CLr{h)#7#gHD~R ziCh488DLsry6;Dkqb#q&D7EQulm*PE;gP^`)_ip0@}`+U zSWcB4k^PeEcim9|l!WQL)77@6rlv_mSjlH#uuwRbb={i?k4f0O_UxU=<#KfzN7m+z z)#+)t|=YTjTvN&*n->o{8d;NSUGzRlO1i(Ir4h7(@;L-D2533Ge5x=uL0m z2UNYcz3-j?S>_D@79#b)APEDEspKtb9~AuxYKb zdg+&+uYB#fj(`+m{F@^uzMSmr?!5@feqouO>tGYvk=`||f3R(DBAGhFIN$EMPHuYY z%0zR$ACuL4hW>w?$NAs_j=)Z9k>74}bvB0zed18xy{N)h<0>Bal4T z-Pk&m%n(ZB_L6n>$=?sZQdF&raXtj8UaMX!nD-|FLFAPVZQOI6?1Q;mmz(PipFnD^ zH~jL-^3_JI`cw9gnctV56;~J!w_>{SIix~9H)&>PZ(2_mOyT=e4|De}SL~%GB#Jh> zWNp|bYXNPZ(_93w0m*Zki;z6mftj6Mz*}AedGs))oXDiD00000NkvXXu0mjf4Xla) literal 0 HcmV?d00001 diff --git a/emojis/269b.png b/emojis/269b.png new file mode 100644 index 0000000000000000000000000000000000000000..0c70f287c480448440e72fbe9aab64a28be71d86 GIT binary patch literal 575 zcmV-F0>J%=P)5I&0KoBoo;+P?B@MII3VRi|F$XO;^;{V^g|U+dPx}B9y>8$K z5O&prA7CKpP4wV)7!-F>*F(!T>=fI*h&Ag*8c4~~G*U78gvi`UQCP20 zSg(=Ir3fPl#1j#2-oJv3DEzM43{55|tkvkaaW{>1a>nJ6I4##_>%%YXhD(PaFn+rq zyWvvG8>mu{9EdTqFv85j2+4sMsuYy+2F-@c_^p1r1c6G?R7xgYl7MMA6xM3YKN%w$msGbKeEoC+KD0fbxkqC-c8jgG8m8gU zB{(OAzexgmD$4Y|H1A$~Bc@3nKD~}A6?`9tCN*9^+ofr>n14J*{bv)?aOe;OMzcCU ziY8jJkKrjDMJRYJpSI_t2!-J(9WB{MrDQUi(diNd_CB8yPejP%Qh2R4^`j;mt5r5u ztJII0c&#>>T#8sC!rqrtx+DR+;qvj#0bSa~K8B|fbR6t9*xo#5dz1eNLKO1`)3a%& zXVaAO24N&%0UH0XO_#UN_vmnJj}VqPJT5N-7Ckt&hhuw$unz0xr9UC1!^HRB=1>3t N002ovPDHLkV1g16|KI=s literal 0 HcmV?d00001 diff --git a/emojis/269c.png b/emojis/269c.png new file mode 100644 index 0000000000000000000000000000000000000000..19d2a828a0693bc3f5697de3a9ec6f410ff38e33 GIT binary patch literal 616 zcmV-u0+;=XP)e z2s3@+Jcqaf+$E-bKzPXk91ftU084-aI0#D$qJRPlD4>9&s;DZeimIZj2$X?YcAXO_ z3m||10tjGgKetfGc01l&*Rw}e`7&NA_=RHDVOPTXL3#bh=JB@c&4|bb$STkJE-iq}6UF zfRKpU+^*3#k0YZ%#kbzK@nd5XL&Jl_IMzsRu z-HuBtBMgrwiG|X|?YI}+j#~k?5t#-dW*j5*)x?oGl-t0cFbsEq`$Uqd4c10KoD8d&z6!gNH{^$c08O8Sc;y6{LuRnx){7(9oeYF1@rbuEeqX+}{DWLhA4g>F*WfXCe7{4~>Sw^js!ZK>zug!VHNMc%dE8D;f>1JBZ z$~G~QiJib(aBRKGKR89bx)XQ{Oi0F@qNdd>hk#-trv#UsJXgx+$ju01RI6DIoucMc zhOsbkuUD^Kcn%0Aq!8S^YPfUbJVs}T%jYs4aCrE>_eEMp3BOj_1tc;3;}e#*x-4&X z=^vjkMf$bUu4R6zPH@^Wx&S#246?lLE0000w{6dBt5-gM5)K%#%fDxQJa=dW%BR@Pq0&o5PVmE?MImDoQzT0jv zZB+Rtx^n1Yt8#T-W`!mEck;Ph-jP| y7*$>i+Y!z}kWd^S64>y-r0oW`j4FSRbNCC2(3)1l!LL{V0000wY;|*ugRu@f-S4xPOV-yN?Z0m(^vt(5@sHylzrdx+-9?J zk8e`=qU-u%t95d$=W-PQ3V!w>1b3^|>XG354O0rH^jvPSdvSTqG;I?A!S4vA)GS(7 zJ{SzT&!f>;$z(D(@0_19P20pDEvV{>X&TwyRqsYQI5;${V(|TrEff3`0q}_AhD1u)M?zA{KJh)T4Pb)!Ccf{v#BrQZ zaNa>oLU7k{oKT6P2;oC`XIWNWRn-;z!RyOQP~I)?JV`lLF!ekdjR!%{H4QUMDP03V z@Uw~Fyj`x8w}s&Em`Y(ztyW(z+4eqTtN>scGearmo$q^Yv(dQ6H=pHdfz&du6c+#h N002ovPDHLkV1n)?xDo&W literal 0 HcmV?d00001 diff --git a/emojis/26ab.png b/emojis/26ab.png new file mode 100644 index 0000000000000000000000000000000000000000..a20ddf6ed46a664645a33ccd59dcf745d0717662 GIT binary patch literal 417 zcmV;S0bc%zP)Aniwu%?-^{2jo=CF z)Dk^`9DzW55Y4(GhS_Ci0XNaY7)=1bFNPoNTz);Boh));6aXyXQ$wq6rR8~L_v!H# z-^B1GVVYKc&N)h$);<7+-}M4tmYa8tgTR*^L>M9o)3oN7mM?@bb^s9mMsdzJQt9kg z=e>O%hFY@-W}T&DA&eaiiHH_WD`~e|ua|6cYI=PllRW`I7(tx#l|jFM#b)N6L&oBp z7#(q8^oa{&8)Fhe6bQfq#^(_Ji2yV(zB*~utzb+_sS35cmlA*wqYK|Ww@jY>-BE#>$N?tlxB#8q1K)E_PJ>#?KtPF00_Se z17Ds#)N8w4UrIz`_`%NQ*V0+L$b~2XaPX^R4;^CjsbEh_7WFJ;DxtQm^NmN zUmq;nAhtVw_}(N| z6&CY)y@p+svqZJk{M9$jkKMk3Vp9j@43Xzyw7dc}mqYQRCS)9=x3~%|p+2itialY$1O*Vux)X&^UShnmg88xCM^bl{I&nMx=(CyoQ^2NCLX z$1hTX^VaGb3i=@sN?|Ux5m**Vtq(yJ4y*kFnfPzWC<3GOFA4I*4+Z#4eMCVg$R zyh5~m4k8F)zHB2kT}5)LgmJHr(Cp&a2?PCZ8d5^$Gun-$$^~|?L!oz}JTv`CX{JWU zh5>&xLgDa1>@wSJOw1940ER{i!=bk5`{6kvu@J`saV)^yiO=r;@_?N_dkW=710o3E zbT*LYJ%}IyfItf3PkeqW65={l6bEnNOyTfMi`>7vfKy+72I`n-9oa+}Fl-MJ5K{im zQt59Aij{ip)$f0t73UEZtQuCzh0^zzYc1aa z155lb&wgV`?PmQCCUU(Ap5Q&X6#5~NOL-K$J7k65IrA~^$S0#1uJ$R>%?DDcc&D^Y zqzPdcv0Y$~C4Mv-am2-Ny3G5>z;+V?O$e;`2;`xtUPSnlV;a}S#I-S@ZNJnIwmE?~ zx87`Sd>tnf;$%XcOz_Rt7Dw9Cr#@5fDZ@bNduqy9js@Qx9B}OKZvOyL#WfA;9H@d-YR;5?z-r}< zf52GqqK+f#+^;32D^@GH>o~!4QOANxHKZCf=O6hW1oosFQVpqw8irwD_7m`elg)r9 zhG7_np&A1k0~*6zL%7FDga;bKzQ%yYfX0C4p(hVLdFUx=xC4L$=nLGbih{D>VyWKy1Op1fJUcg z5#7`*8yFXH$w-V3nwZ@lHch6;91NXtZpp}EOr$()53m3Nla_*jwkxHDQxB#+QcaU; z_I>2Wjho2#AhuY2x%cXkNc4d>l}d?NqgJbbbJx21J5PRaT2V50k%!q)SC4-XQkYnl zJ{g^uJm_##GQm&~)6-$7R4Q038;Xk_Gru$&U2HMwh0i&bd4~|JU=1@qIRROg`O|04 z|8Vqpo2S}Qj@qh9WJMR30778Y@yJRnOU(FG=(T~Le%w@IvFu_QCP6#5)Zj{Q-^Hn5 z(0BOtLtt4JIg`ImfdZftcw`lDELfW0*ztDD!XLkH5O|@F85tdO58u1z-{N$F<2Wda zf=niZ?ys-l?78#MYPERp-F7_vlm}UQoen0G2_qw;ext!~mM*rGbVec(XRX_f&9-tZ z#p5{9(Se?xUZm4$NRotG{r!l=7ExASj^&h$;h|y7%!Ek+$8j|Oi1AaJrukDRJ5Zof z<5XuS1_lDirzi?W$Ht&4EQHfx$HtAN`2PBJ$nvUzk|arNX>NjOHbc*^LrrxR9)=Kt zMsFPitp*ikHtgNA8>v)Eq~AwfL*)y;{L=h$XB)11qA@X zzogWkc-*MJ&8)718e2kW>OQ{ez6_dS z(jR~H;RU*`-a9uwG5KU5FzD#}=36ifgB_mjAcWvQlr#>%^)@bD`U2D8FnF!DTcgpO zq3gX3C^DJ)BhhGmJRUC|9vXtdXhfN9Gjh`DG)}zVfjf8ZBCA*w2ffeK`IE_InLc`~ z4WcN@c6&unGMQXIKfh2B2n-VQdJ9;U2Jz$yzU=D4wQJvjqNq%n&DPcAf8Jm8Xi-AY z31C*FB(gY;Nxaz7^n$}~KQ}Ww`^vUzr$;B~tXQ*Wr!O=&I}@mM*e|%Y*8Ge-e*+>j VDpOOY!At-E002ovPDHLkV1oLzrUn22 literal 0 HcmV?d00001 diff --git a/emojis/26be.png b/emojis/26be.png new file mode 100644 index 0000000000000000000000000000000000000000..c771cc2bd2b4fe2b988b5e160c05ca171663d650 GIT binary patch literal 684 zcmV;d0#p5oP)J)bHHKItd z@E`=zDMW;bD4T~6M2eugL|~Md*^7Fx4vLXNie*ig^L;-5oLHFY=OfLJ9<$0`cVbeJ z+nwY^NFhuyfY1W?fKFD>b8-)|Y$H$$6ap4j64HTmpcwEWlnFA$B0cbH0?ncsKmB9R z;`_dMB4V6KW(I398y{NK&`9y<5l@CSefx0{f?AZrjxjw`6aA{g6KZHe#m2B6Ihn`z zSHgn-91F#ZG_=(V6*B#p^n0ffViAkaeKd?}K4NS#K>Sa3#)pf|FDwv#NiIA+b(hooS z^bA_nWzdAbltT6PGhBL>)Qp{AY~l|M#Qt=~!P(x^8k(!@J>Kk!a*I_n4VKvp&gZ=4qW>4iInHek*T6CbEu|Sb(?a)WAoF~d^ z#TM)0KQ1Ss%8Sgu>BQF1gqD9MB>S`OX+Sp)!#DSN07uPjj8A>6MUoP5giLI$9R$lu zknBt!(4_|_CoxU4!hi1cZuj(@N6ZD*BQ7V_s}~sB5b;_CgB2j?k&%%s3fc|hn26K@ z1%S?4T+UF0%jruI$_1HXk#5n1WmBL^fjb~YD7*;Cgee9QS^yuYP8286oBFP-1{+unmSht%@h^H41$S>q;#baL>qJC52WBqDuQrZ z8{0;UAle01)T(gh5UvVELL|i^us_pbLek8sF`dTmbSEXpOV1L@LVK z@QP#Fu=I-tS`ZQ-VS`#hWB@1!x%s2w{L9RR)=nm`VIJOwQjfnJr?V*jc%fi^yc>0z zKrMTps*ce)br`EHHu3Bu)$^fj)dH z&K%+jZ{GpR?94P$TEfw26i~j^U2)K@8dPW5Vbn3~l3ILnunecWogRYK literal 0 HcmV?d00001 diff --git a/emojis/26c5.png b/emojis/26c5.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4e16545bbbfdd481998b088afe256b9b44afe9 GIT binary patch literal 510 zcmV5nmG< z`xfW3^++8}_Zv)mU?P;um1IHq@DsdTp2zmF_ak zhc4ls9au){y?2g4Kw;+KTw>FSBuw5P36rqW}N^07*qoM6N<$f_dBX A0{{R3 literal 0 HcmV?d00001 diff --git a/emojis/26c8.png b/emojis/26c8.png new file mode 100644 index 0000000000000000000000000000000000000000..ef2bd558c9f1aab6f9011104edcb867207827a62 GIT binary patch literal 612 zcmV-q0-ODbP)<7lYS-$!(N}L_Cg#)SyiR3Q`z|4UBT zmZ4doibW7uV+4+}NDAFXp_j$^4V<;TS*dg^y$WOkLW+1384`1sk{~AL2Uq?i$@hGE zrej=)`R27f{Hmc3C?RDan4i7O`_{jEr2eJlMTXX=S76t$eW8(CgUKmkrX4)2;3FsWC8ufledop7742F zL63o!fMf%oKtTzkVC7ZRTmwEEp#x}(%=EPHow$CEc_Mj;L=>xOtNZlEIY}DV_VTl=Exn_qgbGZxU%Tw@{k`jsO~`+zqGo&ddSJCGr|f3n}HGHY+Hncn9>Mz y0kOzTui5tN{!W2?h(w7Sv)5+K~$x|L12(^#b6k$OVVYBS}>wRhi*l; zD36^wc}1a{eB|9xO_7jNfiLe zU>v(?<+W%eRRAP|ljGr3K?5Xx%tVmnObAtSCWM&?qL3PjiCKe8&P0{TnM}+Ys5JhQ zhC`$EQj|>2F32mi>Y&APM#X( z)uXSBPfF&OVqCjFh3mp-JV>|e^5#i}FCVt>=m;pUw|M_@lda7?`q?Firw=}pm>%K$ z)fhkP`@CJQvR&`+mqt%<^#{$`9-hw50YRxFguv51bSba5=pMS*r8e934*fI~)nXeN z_K}`5KmY>La|Y7zQ7yJn=_neNUDj3_T(}*!gd+Od1DKWlSCM{AF-O}#mJxclGW5nsH=KjfWcUc~btty3kA|8f8C8?VkzbbEtV z^>It))eO(9k-k-(sCPEpcy;zrw>PNh8ymX&@xZ3}DLnHFs>Q6G>GlSXpg%TrxBplD z!A7()ofp~m6Q#3s@RHARvglpL3hEJBX!wbOV|Xv)YI9+9rn5LQj%CzC%%b533bv!2 zk~6c&EX7M(tU?c7M8r}&G&czt{BaO_ z@aRdJL;r-fq(Tnu#iNH(k6t8r3Ft`$K~l9KiiFeNoLgf(%}MoyVN}_4nke_ZC?ex;}OO>$CUUy z|G-;!ZLqT&b)P-Szf`pM+n+n{9BP*pb#$&?FQ#iNmJ#9*fwZvgW>(ZM%wRnL_FxMo$dXvOj{^4osL9#4?-ZI0U#oWuz z2Lh2XSeFwS!+3pz;8=&sczuJ&1Z2)p$($oKay~fKx@DfJpXqG12TOOqzsrmY*5xd; z=dpt=MxU)yv4brFRrW_?MoB`FdrrOZ+)~f?J0_KMzjtzB^+bQ+@^E+09Q-w;6&log z?7d&8XdKg-oh9hBY0kH3bvw>!zB$4Y{o8gc12i+GDISqt>aL5C8 z&ikK=+2Gp;=bEQ|C|4*M|8#>&4%-i2n*Ugb*(JSi>w%L#(B#lTF-ZpAxp96xe5Gib z51BG}4heU>_bYkBe3>`Q$iff&PfSTsSphy_N)bS)+(rac))0wB1Q9_*5D^fGQCUO8 z1D`Twg#S3;Ee{`|^3C{f1X0LJnEb3VWJU1FO!M9w$pL=>b1gsO_}AR(4~i8KRzkq$|A z1}2z5LShAmw#gD@q7p+Vs0nqj9iJ~3-}~T@qDu7l)A3hdbE}!A?|uI1CqMu8`!G8C zKJY8Az1!=4GbsvITdnW@o)ypZ+HiWu6>$?U57QHG>}$U=BDDdrczU)X#Ivp5+|XI}{IhctZ#^gw_ps_J|^D|Qp<(lA=o^^W0r1X6KJ2#9uxXd~Vt z5N}A_No|NR&Sf6x3>exW988L0D0BfHX00$X?AwskGDTILj%UROk}k2Qbsaw<>KqF!l0-e5 zvscrrFJ(Onjr0uIv>@d*!3|)RByJFIi#AI))q?*dEaf3=byxBe+kKz|JOS|5I*ZKR(;wQ2FMqN>gpG48Id=1&b?)b$SV!ayo+iCc*YnCrS)@P7jF zhQyu3hUhq!*k12-9$OrRc5@qeDT54o2wUBi{3P0If_~a)oC5a*Bn^x5x;pIU`M`KX zFqqEEzTj8_39?o=m=wiO=)y4UWbKh*--fi7DXQvx5##RKYW~#VMP2UzFU%cDJ)5&v j)2r`gN=NSjn-=^7H0VCqyGGMu00000NkvXXu0mjfLU%p? literal 0 HcmV?d00001 diff --git a/emojis/26d4.png b/emojis/26d4.png new file mode 100644 index 0000000000000000000000000000000000000000..d28699ce00c0f10801210529a94ef00c885d816b GIT binary patch literal 490 zcmVCGh4V$D6SWID%}1s>b>%!P#{H-a+zsu zR@_gV5M)rM`W-n<_UW6VQ@06SL3V_*T*5dts;qDWx3}IyFBUKhH5%jli?`t8pvnL^ zmg}Ih_6S*6u7jZSZJyviF#uh0(p&5we1TppU>0gLhB)aV)n$Gx+k6x(etq&1S^2SS zla}Z=07S?xYKeY>?1}SZPlZini2wiq07*qoM6N<$f;z$BtN;K2 literal 0 HcmV?d00001 diff --git a/emojis/26e9.png b/emojis/26e9.png new file mode 100644 index 0000000000000000000000000000000000000000..869024149550a52e77edc5c5e27b052d54873eaf GIT binary patch literal 456 zcmV;(0XP1MP)onzJ3$FV(84Srh)N_OL*~u9MxJ0{Op|ls*zr?$q@|Rff*&CpyGT(b2SS_? z&X@jR@)0I6#5b(sd!~)j)Fa#Ks&pgtaS%sw2tBNqi&+-e!>zBH-cU|$F;z=VP57>yw}~Dm z@KEbMwlKsqEGJjTk!z(0+t#p�%6~ceNgC6+Fcz);dD0%v^gS;vA;Y$2+9ftkwsu zz$I+pBe`5eT*g^+5Sa6?d4C1^m?!oXa+c`eE#|NvwVf6G#Cu%9xDX8*q*jfQ-6cl0 zRraW|N0mJ){s=NrMEbw1r65DA+{<;V#y9#^Om{`+OH(i8IPTd&baLTDRXQU%z0!Nik!`1g0U|3GGSW^W%zjn}22I4tCc`i9V1uwR)W8G)0000Oq=Nl~qGSiDw>G{<yQeIEvm{E5kZVaWqT0c@lbU>vDuSb+AyGRO-)}jJ6e1*JCD@f!j(yH zVvL3HdYHWP3RUIWXb(;uf>;tpv~Pohht4n3~>3T#BnuQ0`rRM)Up%mxfRB z^>d8hM3{Q`nuU+cj80v|vIK8KmEtmNqpGZ}B#G}@r&v6;&e}>6RRx59EdEFV1^!4cH9Khk<|GhU}Jk!QVQ39>hp-ZKEMd%lB5ghv|;-HgQLB-K_ zaumf;XrUn5PJ$E{Cktw|l9-rAk~EjZG?(PwR}Xq1rE1gXk(Tr8r=>_?ea4^K3kQfC&fukLC}x{0G(+a|CT4er2-O+CH&QuUB~g@)@zP*JbO~6ABxvSZj%Be)D(otS{#1wi+Dt zZut?X&YWX>W|qz8OSH<{M8bZ+g}G~Jzx~m5vt^A zh0<_#+97CJB5q2s7MkA;{-x=6K3e2*U*mDOoNk^KfBqluJrn z;D!>Rly>7v`2!?{U99A(2{Y4*%r4m3B+}T~gY)}-KQ^IuI>+lJJN6tPSM`rfSp9vl zrd%kCW>g2Cld0x(X~~|S)~3lJ*EeqGpLjSg_0t@mH8-`x?AtkwiZbyRn#uO2VMBeZ zK74#xd;42ZJbwh2Cnc#HcGQiy-F2DhUd674b-~fYrBXdr{JAS=*IP_BA_(Ji!sd(n z&AX5FL1wfyC@sqbiAfkj3$b7gA~$6HnuKX;1S9CnPPC(ozqGd>;&BO19obHz1`)>jmitWL95@G6Q!v{$Ed;J%L<}|%V5!VcJ(A=sev2aXMJE%4 zA%ro;$?6r1X+T+JQLh-Yl)+3i@~r(tyr?Mj-v*vCm^ldS;t#2*f*=4@m|OvZLD+0@ zo-rBi?Z=)xf5!38osQ)6Wq-K$Wy@tn2C!s3gai(GqG)zU$WMJx?e= n;hPnxB#)-KuMkxD4}r>GiP_o`4sMU^00000NkvXXu0mjf6|Fdo literal 0 HcmV?d00001 diff --git a/emojis/26f2.png b/emojis/26f2.png new file mode 100644 index 0000000000000000000000000000000000000000..630fe35275d8cd2a20e8e07ea8b0a286d0a8e5b0 GIT binary patch literal 667 zcmV;M0%ZM(P)Hj!v#F4r-zw zz(Eq({TjNs=tvwiaWEK-wqOgirKP347P!0KdwQnThD3iqF>&YVJ(Wl=0yZHbh(s*3 z4hT9v|KSMCW2F-5MZo5lXe`d;+$DsN3@Amdm}fJ)!avvsv8Vu>t|Qaus1&knZ>}K+ z2AH~dh19NtHJAVawc-!l-8Ow}$sdMzGDW>yAf$tUMrD(UGZzRtK7sFZ>cV9rQHy?x zKLmTN1{fHhnk6wZijb1Z`ggYS-v~vl7|HZusvE2HNcvpi* zD96t(V5idf-ab+(`biG328XC`ZQ$;aPmXc)kWC{pN+>xUV|{xQC$1=aF8!1puMo;4$9Qn- z8q=8s&GtSO$K^xKA~c^G<@($>!#C#mR&KHM@(tz279llz;x(a%H=k2$2$tUF`C4&F zT7s)HV}xG3tI%)_r_&a<&mCg%?kr2M9ubmsa6ff%KhX3y7{z(dxu$XXT?c;r>E~woX!W1-_AlZf7(p%P=H8^0^gC%_2RDuDX|Hcz>KP zxja3_@S7)~&0lpdOOFB^z|K3%G`$TngR=}rj}nz}q=*pG#>dmUG`#}ly-)18Yjiov z7@i2hGcfj!yULEcN=QiyNraHbr=wjCaI_YWe*%{I1yS|=SxW!_002ovPDHLkV1nu= BEII%H literal 0 HcmV?d00001 diff --git a/emojis/26f3.png b/emojis/26f3.png new file mode 100644 index 0000000000000000000000000000000000000000..6f28da190fdbad5af259756876348f5f80b26da5 GIT binary patch literal 497 zcmV_KMEJ_zQ5kZ^^F6yF_f}I5y z7yk=sL5ii)S;RpHL9|c=7Y8r39eNuSn}lAHo|EtO3>{8_ErmRfyf}40*Mdm=1!_sQ}yxw&Rk* zM<61_sL&zP?}+Oj2?c(l%mOcgZvsje6AnkD4P0r`S~JhvkxYowd7#Y!%;4Qkx&XtALss z8~CK07MMchGRi}v=(r$bBxguq zVCfGmufy{EI-|GCRLGMzQ5i-P z;)QdkvFF?Tq=7042X!6i`?@Qt7gTyTcXKt+zLvK_O9xlKpPfB)@-YC0UE-EW(cqVD z_1cx;0CsWCPuZwGC7nkv`c(I3=g&fQTZx5_dCaQ>D1cxB02dzI>cP^ZE^j1_zMJWT9(*)CtA)4WH571;5X|DN4yDiBO3K7pFil@{ZyV+0E?S0LJ0p{XEb6_Tw}hOOs4_hM5BrcyCi}?=WM)4DeF;6|0Pft++?hOnSZl&TyV(hkzPT zqooPFXt*u*7Cn{ufqQfFY%oj9fwW`f_@M2vMx${a2&~fy>}Jh0n}{))TQ23&b~1{V5s{)-i4J)*Dwqp z`-{7OzO+*GhJCgTA+)vryybiT)3NTpD-*E~faY31N)vns{J=IDY_KTt)#e}n+G4$91>5P+g&JXo5e;p2#F6(_8g3dLVAz#Z?)J zRdV|5OU~sD|LZU8AIslew|Wvdr<5pCMr1yUQ<5u4vZlLceakmGG8qW(tXvkov75LY zMeZ<6@pY~s4+92&k?v5G5;su4Iu(_q!<{>(1!a_CL)z4!uFGe(Oviay5!B48wurpd zahekQ?a@Ge;@JCu;2+c#5dBtl^Be2YqXVWp+zm8J%G8g)`K{2j`^M+%meVV~s(9Nx zcAF^*hKx@ej2$>q_Ke=;UH4*x0Uu2r>>{3Hif&y@rj9FxIMK%HZO_a>%@Hd09MmZ zydz`uEM!Pj`k5;hkqX$%W~I|jeocL)4__2oY7tfGr}*q3&0TxY=90|5d!E$I9E|~q^;94Ey$^t0r<}Bc zwZb^C9}E+-HHx;lg#Fwwwy9ZmIUF2)HBRWU`w=cD|3;$g1+%@yE;e)6KmH8cm5GRz&DUE$ym>sQHE%%@*eEbhXDK+#vn)VdZ0Y9)<00000 LNkvXXu0mjfzdDjE literal 0 HcmV?d00001 diff --git a/emojis/26f8.png b/emojis/26f8.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d1fa26b7e6e82381b2a2fa65d2e134b69c40d7 GIT binary patch literal 513 zcmV+c0{;DpP)EEP^iLB2?=lwTq$0P zD6sZT{l{iViwQ=Chhuc%I!Ja9ck(cjNW^XVanYQbERsrIcU3Dnk^8_E6Eh}54>FKp zi)mr_UAj{RY^{GhA`BXA~PJ|~w4cOag1`{ARcW2VK zlZp5Ws0Esp_4+KLW%FX?-9cana9mX#gcFese*!9k>$qlGRr#>?`Ar!IS)irS46Fz*6`B17Trrr|c~rA`00000NkvXXu0mjf DHeuzB literal 0 HcmV?d00001 diff --git a/emojis/26f9.png b/emojis/26f9.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f2c3bb751073a97f2db2a4bb6f8e943277b974 GIT binary patch literal 820 zcmV-41Izr0P)x$nNueV_01 zbR&kBn6DT8bnq!GB0?}})81!u)=LIdQkv~EhOXfu#EYw%u!t$SjVreYH3WkIH=SDW zoxZU01XINW@cl0@g?2q?*MrXkg+R;WZ^4d);W&WSQPO_5mR`}HSLd|!prr>bJ!t7c zOAn&z;2uZb;Tg6!m`oftmSz9-&9Kp)IpAy7hyNj*Kmzrgp*zQ#I{24^M@M>wzMkIC z1RY%8|6IqC71nVW^F06$b@-7Zorq;^#IiPGSsSse4KNDFa`u6VKPpemjaP%kbCs33 zS5j>vB3=WhJUAsWBOYFLF4O>wX44R`Mu#c$4*Usihq?zm>d8Hb;RJ!Bo;Vl zs>7l1-`i!$IZuofY9cwS??$%y?T9vQQ>l#WShmD{ME}NJ*qT27%xdemlcA7|tBlxf zN7V_`9Mx;PPIYBkAI-LcF?ysjaXSj2f;w!b5Jzj}_PgP*YAFmiqy#rT0pa7!%(7&@ zl=;FKLrTt1w=J0nbf<5dTnqP|78G-pynSx%RsJVLS&l&0000X3&n9qiJ%v$u*MvP*{uD+;2rE-Mn{BWqu_Zj-yZGrN-$PAq!}`u&7HbmhEMtPw>@ zYiY&B)HRA_mw$;ybc!owN8nzQQn5zvT^h0sO(hVwP3k4qTWE?TboNj`iCB|W@wE}z zXz13~O>qJOn9n=(ceYXM$o4McO^x)l#gIa9`|)e$as^gdN~wGAjW3xz2YNf0m`2pGr&MO)R|y|zu}n-uqgZxPS@r1c6aiD$D3)DD$3GI-nrI<8pCi@pMPK`TcD?TnXwb^XvqJdmg@@+KikbG$7FN7nbZ5War41A z3VjD}yqKJ2acP;r^*t$K)dhN+SFptjw&r1L9_us@&lfyN#VHh*c{w?Y4@ld{5Y^Mz zMuzrimQ%es-b|IjZlvCsjyc-R47QOWs;9Ay4C;>7F+zh~F;qW6a>fJG0#yO8LTJ72 za=Gs*4^u@#k~LBY27BV9e^mJV-Ni>h)TG|v#s;L|FUgwz)+n9L5oWU<>3kKp;)B%) zLQrdqsj#!jAS79HtUE^FYqo;x`D7NWphz$y)H}W*LP!N1z`8T>jk}XszAaX;cU2gE zO8d#FeX8AfYg6{{8ZQHs$`Tjy) zoO>Q+1!KD@yeMF~AP7jO(=5rmF3Zh*i`K@|bEAqB=JS;->mP(H=ejOqlo#I?^#B9RpN~;^wAgYi)set4;2Ok9F4<3mrv56bVz*rYR~) zeUSD$O6hC9D(?pNp{UU)K(Q!AQH5lds@;}&1D1G!f?;5rLHJ9Nq^NkN1ox9Jae9oU z2ZOw~7g3{z1+kcEnYDJd{*)A}@s(Y@S!Nzj24zit7@g7DItNUfs!9i?)U^!TPYto1 iBHDqrN+<_>{`muCjSw|k<#nk50000dF`EGv5xI>>h$^UpNQlU7U=gz! z%$f){5LCeifN@mLpwdJ*L64~%G8Ie(Q#r&NW+#9qB4>bc%mx(b0I8{tm~)tO1+XNg zotAFlOSkZ)w9~*6A_XG!i~uRn@dVmtT$Q4{j>r#~?FOcR%IZf$2jeglU3mN%W~0DS z%;pjK8RM!z+Z`X;fnt9evJE%|>;&2mzL*+n&VDtK9Gv|Uq)}=9)dY4S@-=3^E9E)G zO0PXVMNba=2>gVIy{gx?Kb#o5H$2e)2_me0vu`yY?B6Fv*#Z;5c*pA;{f-Tc9tW+) zlc#6%Zt-jD@8=|2YG;eR<1OAYHt_D=pJy{q9b=!4exBtytL@j!FD#A~Wy$|h5k*81 zQA89GWngQv$2s?HH3(K-EWcbaIPCkCJ%L{#@GAs6_!X2*oT_fynp_0j(myLF zoytkT6-9Z;Kn*a!00TTW`FLdbfalyyY4%5>UcXk0W9~0JoGprSf45s4Ftb~1pq}UO zJcs8wYJE{ykK^;ea+a;nz3!})X_}RTNiqj4i^zqj8djrfNK_4psv(-^UGlt3o_FbQ z)V~*D7jP^JgI1#+)2PR6A0B*C>x+(?+0JY|KVoK>8D@qT_&)D#iR0-sTfg<}#qv!) zAiqUnFxyG9=`>sag?GF(%Xshc(`Tn@ao?+`8kTGlRl~BgmLBP(S8P`7=Yo|Uydu0$|V7j;;~(077v)AYwy8qtaNa1tC?gG9&{KLF34=PNgGZ8qrEs_=|ZS>&c7Vr<+@?KHyMKF&XBEvbojj z0}k~$o$Xd%0EhqQ2sO2v9oE-2xTdJVa|1#@Vy4eIdb3YeeMeZ4=LUp+gc6(C#W$!b z7K9aeZb0ZqD6tvmXS{lQL`B7daAkdMgLbpSGS3YN{RkyCqiM$RAV!-x*A$m5OW50a z&h1-wc>Vq*A3milcy2)GM<}rwO*4`-Mw^nGgoUbNcJUP@HlZKkxdEOV5c&~HY(~?J zB<-P1$+E`I)n_`+EQ4<@J*mO-)Pzt?JTT<^Nh{d8H zc;k%-{sRAjH-$n)tW=OflZq5n60oM0*0q~R4_FhafkNBOo+djp-^}L*Mp|;`^N5pQ zoZje&BQQ$E6SMAcNX7qo+w6>+hZ&chif%{a)^?)#~K) zIrLU2^;)&#RS+2qKG6E7eC?%5)&DFN$6NiSn?C@}>8A&uni|=+2=q-nx1aLr9~2KB zxU4VTb6zjk(+fOq;4lmb+IqpR?@2|$_;5o(?9kSkN^xLn;=T}^R-b(Q(Vvd6SB<6G zG_nWi0R)LICl>R=4V`mh#Ul@tlygFe8`{-GGyTE&8G`dQFHpCe>1S7K>A6NIj^#RR z@vY&8&O0&xX&M=>H}nx9#ILmJ&u`>;Oa!a~s}tR=Q-=zzC0E-q617nB&EHw`z*o0P zXx-Rkw~@Y7_mL;$0x(9R5=hQ&7dUw5JuvwxX|GE87>QpBKO~*f;aaY!y=G!aZLX z!D2FdKUJucv`MV}5LoL}R!+GU{qrxEnVJ|EQp)cF6Cd@B-SUm)$xLv8M04b|<=W(N zYLmy&2vNc^GnuWQx?Z|EKV6(MPZch4JcG$Q@96=l* zF+La{j1Q6T5ryvnD_9<~i?!l=;%JUITE@m;WBvtG;~|r5v=iC@00001Ao%Br zT)1grW|EUT)08nuF$+my>_7vhAevRbj~mx{^Y;DW^A|5)tBA6L&H4G}+n3Mp5Vw89yRUu70li3NG zmHbO?B}J%6V~?s3aY0o`6VGH;ky+qxaw{o9MH+ilg;vBRRUu70nU!Q#a$RmEnFZ3s zqbh7gTyeHuBhE1i6`2LLGAk)Ug>#OxUu&)sF4fBw^LoKB_RusOcw}FpLMNI9j6z_ox>uIvq%QU7T~Y(%5rUOlj@)x=6iTmGgRW zFpLMN2wUPD`*-hforq%?dyb1KGz1qp{XTyBWM4&20Rs#$zyJdbFu(u<%tev)Zr}Rx e>Enl2+_*o>tdZ(Nf9l-;000039)q8O@dYbgX6< zoAnlL`FbV@XsTfB&_s`F%6$yyM*WNj!Ll%uj+dT@SEVBzFVPn3Ij!#vdN_6!JRn;3 zvw+fvmOWbb4B{=16XNwG9j(;{7~2eD7K!zou9!uL1|o!N3m-P~tG<#rI^4bj){L}P z8@S;D$&n&)e?nuiia5cQ9F3(K;)K`;=6xlZqK6JS7;?Db0?p+basXV}<0kfi0m3$; zt)^gs0bC^^-^ke^>=Hn1SuOB}0kr6_Mqq$wfsYD20~YB+6UC3E4Dbo#i;A}zVz+=Q z{}K=<^kHE0QXncpA;<^Jt^wcpAI2l1ydVgQ6L12m?+`g-frr2^`dhca9B>a2Lj+HV x^jH&N4&wpB1(37A7}yr@8F(p#a1EkL*y|pLQY35w|=+JVIR?5UwGRb0+7U z=fZQKKmKv}HGNPpE9F85h(u)>VP>9d_;!M*a7x+<7`VBJCglppzeZGpDF`4SPB`Tk zVw#kOq}w81%CSk{@An~A88=a`AWn$xq$Kxqj(?80iGl$J*e(s4IwV%YxZ*O~1p^F4 z0R@C@V4ns*A5#rWYW5M?Mg>$*f3IRG|j(3ZpBj;PtdI3NH46bvxH09yw(sSy<< zQqFCHt%Csu7@o@}U~hpQ$OqstXLf+kU|)cWntx5Ya&}?9fk*%V002ovPDHLkV1i4v By#)XO literal 0 HcmV?d00001 diff --git a/emojis/270c.png b/emojis/270c.png new file mode 100644 index 0000000000000000000000000000000000000000..072dcbae0b8551c4358f5b1d752f905f9e291c51 GIT binary patch literal 526 zcmV+p0`dKcP)d+B!}kMo5C1dh^}T;QqyKzX4t-FK{5a~9(kgo_h-T5595eTzr@67CG(!$j zOmyY^P;0#N+>%n-4W->s+6_uPR@2(l)qgfi3DGPB(JC*=TO?AENhXb?6X8kn{pY zmmtJ@P^O0t1wo#o2s#NKlE|ooy{NFFgQm-98M(PVkK6P7|G%_mc(Ah1hc%wQiT~jZ zS9W>ARkr|i0vMHb^>J*}S3A(5!S4c~GMP)enSxB&1~$UQRJ{g&2*6Fi(Rn8@iDlBo z75>H1B32;z7(hfYeL*n&2u0G?0_!nc1>R9L9VMp9hG!aXgIFB{4G>|#A&ylt;>}{M zz135dEfvXAZPl~K6p4nO7yE@Gj=IqNL@ejH$y^kMFN?nB2WYNLL6%4? z>yYKX=cM#iopY{}CM{LQK~cca3n%Oa8~(-+T74E;**JcYSi{Ezzs3WymK=RvilD>_ zW$I?8sN5Sjun|n~ZpPS%1Q=Ebzu3+s2iY3wPYOO^!&T-1_Y3?1BSmd;X)1>m*>I?7 zJQG7=I*1DYA`XS$!kn|>q#JKUexbF$~v0c3=M!&?*3wuZaL zhkVl1*84^1yv9!qAWbNIw#fQu4M|ZV(U&^d`NZ629ErTP&(uDZWGW`ZF65`Jmn!FU z6*4-$G;1Cg9^T0Wi|D*o4vBtp$!BsbS5rD0CW{KXIV1O`U# SzO!8b0000` zZ9NHNCc_y;uHWm8#J^@=+Pi!A!X8; zt=-$q@6g&%3XtpdWBJE()YUJ|MCH0tg^jD4>8sg#8Rc3Mg_?4XWd)cJc=c z5fA|p5CO}|Af$jIC%LGOtI`!#Y{H6-{h%{NA?H!Zc@%OUg`7uWtA0@|op#KA8gMwy zDdrRXEAz=$`HjY${pjv(0zXRNM+y8WfgdICqwMa)7ptP>X(zUy1{{tQw-cc|TTm4a^`RI`MNv^y6ct59QBhPB73Jr0 zOJ--w>n-HH(%Nzhs=|?`NG$A-(Px94gLoK~$B&&u`0d9LMqJ>+|Uk-E_LyYSJ6SADP^*?{Xe!OT zz0{J)BwTD8ni7DcIArE*!OeL@H!gb+dqA%qaVb#=#NdA@WAEY33B zJ-x||{aX)J-_Jc*T3nnYGKdT!gUBEGZ1B2fbUjAD((qjL*J#%`yq3QD9s!%`(0{yB=_Wp+@iy!Ywcz?M$${R}_o z+@+iR$*t>GcRzblxCXS);GAb@c!a)z!AW3D=phY$`0#Or5JCtcgxI*b|5fcn_1^or zccb3>#L)1F`UVDRXakM`CD3EPf9x10Fo6k7U;-25`nJ4ECRSYNAKY=VZ(!SAppEYW zAP)roz>%W}Lm0vkhA@O7jI~`|pV~XJv%p=@aUj4f2dW@;IuIa0fB*pk1PBlyK#we1 uIt4T#oj_E9OpN~^=g$KfU>A@9&VB>U*4jece9LYC0000Rg< literal 0 HcmV?d00001 diff --git a/emojis/2714.png b/emojis/2714.png new file mode 100644 index 0000000000000000000000000000000000000000..ca960039fd54cffef6b0292c88356570628702bc GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|{S6 z@va`+n0MJhhW$Z&ad|=b^};0a)`+5{Hm|pGo$Lv&avJ#;mv0b_kf`L+Uo&yWgj3!Y zli1CZTnaC#lwX+h-$ltebgH5UPmTP)diNjPe=~mUdOW}G$H&VxR)-o7InJrLtH7?n zm=k5;AaS(wI&Tq!5QF5}`*9yv49{QPsMKDvCrQV zt6gmm$60g;pXUc#viS1sO()iDZIRu!Vt;+vow9yzLnei#LDTJP)GQd z^u9%{D!HNdyx~Um)^0iQ zI)DHsNwfB8|KpyuOa3UZLPV(DyZ>Bk{|z930SZ77FiE;-ogW`{m&R~KSYfRt9!0%M z;188@9{~asfMt?q?bH6JuCsxY^#A*>J)>f4QGIq*7w0879EMOAV` z?Rmq=IPO_%xgxBnZ#A0b!0P}4m?X{GmzT*0rQ8q@$8kd)=wTdj|F{>AqFyEN2THjiAgbhs+Vh5!aon@kBINGW>QB9D^(`QPNs>wH{G{Kt z*7C!IVgAs~+9hNV*JXgZF+6v-*ac?1Yx(#5=W`mNtx8p9Q13}?sRy0huH z1sFga$9+gn`0GeSt|znUtBda^`_@|4nT+FJNvW?(V`e|2=;dObj`&}{0ZBXUSF-2R Q$p8QV07*qoM6N<$f`x)F*8l(j literal 0 HcmV?d00001 diff --git a/emojis/271d.png b/emojis/271d.png new file mode 100644 index 0000000000000000000000000000000000000000..1f98761e255efacb4a88a78a6ebce76aeeb69f46 GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|?hi z@s=L6_d1*)ap2+o-(N4U5?B}#kaOT@TCu=?pU@bV_Pndk9lLFto-o86Jh-!hqq@OK zv_0reP@t5{MV0j_0ZyLmKj*pMT08r5lqm;e|NqXm$91=_ta9Y2@CnYC^UEa4PQ%rv zUX_FQL7+q9ue{b@ajdCo=O3Jyq|EgDZ0R#G9*rsDx-*-Nu<~1+%RK*WR zH_=HJs>W4S?k!Gi?g%K>!O*YCWK$ADu1K+n+9dr5K>*pKxKe!3$pp4I$q6 cU(@Zs+Ia7bs!iR*z`(%Z>FVdQ&MBb@0H9HafB*mh literal 0 HcmV?d00001 diff --git a/emojis/2721.png b/emojis/2721.png new file mode 100644 index 0000000000000000000000000000000000000000..91ea2f87baa97136293532bea8d0f200b1056b5c GIT binary patch literal 561 zcmV-10?z%3P)@qw!9!Qi{R8z%_@nVQV50R}@%&yO=bKTZH+DwbW-0D~d)u;k&3DO{(oO>9dsgdqu#TS`!^^r%*P zA$_(YrCbp&UNiGpW5JU(8f`3Rn zdRUTwmZZ3T%;ItiDFr?$1q;h5KCT~=f0{%OOMDuhTp_`rZ(~~uO_w})euMVO09X8G z1U)3NEybX3lPe_H`Ow6r;W4`xv}*&BnNe!rOzu93b5!o)0JHfhUq5%ao*AWG8(?-X z@M(AsN*(@Yo&RPeB*B5oR*RkYO@@&Ks1#dd?oE)%O;Fit5kvz_z~BJbhp+ws@dC2JwjHdl00000NkvXXu0mjf`g#Lj literal 0 HcmV?d00001 diff --git a/emojis/2728.png b/emojis/2728.png new file mode 100644 index 0000000000000000000000000000000000000000..8916b69e338c996f9b84a94aefdee413bf7bc2df GIT binary patch literal 626 zcmV-&0*(ENP)O902go_xC(&{wHn45~nfR$w^6X7IiVGc`6fvIuv<{ZqhZu z>gu6G9qLl|I&?D7j36cky&^b*RLWk&Mudyp{%e2#?s>iq=F3>p=M%0Po!C+8jU%mf z2HMt0zZn+h-9&u!)(*znMHr zyn}nKG4@aYNlZu&OC%DBq|6Qt?p&&?XAsyGOjVhxOdFP4V@sF!B9=?+?UhQeRC=Y- zE0tcUlm{;^9Nsb4eF$AVo#O2#iYAIpz5Z=@%!)d5Pp555r)_oGR;O)s+Ez`vbFnvf zxr!%5oV3PhufH2ZR&CG7Z8&3%nqr`3^6#bZtjNqN!cLL<@Vpx;9Fy^3iVq^4M%E%- z)30LREls|Pdl3F>Lgc}a2ZV2v*Gft$r8LmA7w{8${$CeAM*6dkwAM7Hu^G<^`?1{( zU*dh~FfLh93)hVdT&SkT4!xIhKi)la>8YPj&+j>E)iPedZ^CsYkw}bh{N`@F6ym-R zI`v;Cuwd2qIB%U&GL#IvHy?U&+pV7;L*V0-FK_Lf>f*RnpU6lVWRO9IvK%Z2XS-8h zEjFW{S#> z!U%ejTu=|a^tk;QzF0yi*R}@(CnN|9^FUCC*zUajnzW-aeChL%9=)G`5*v@M0wMaS ziUvqHZi{O)kM>Vq$g%P0DiETNK(IKo!s5&d0>L#xv5Cm4420+iYGJZt^Qej+Pb4r* zBrt?WRs3Yf<_T(Hx3rps!ZxB z@M$ULjLQk=0)u=Q+<5BKCxbvEhws86WYn#!*aT0o((ZLBKfnj7x;bt^R zGM1rk)hL@q9Jhr>rb8eQ2yC}S$y{Uis6s+d6V$>4wJ^z8hPqXyWWL3AeFXP0kP!So!CyYdZSisQB_37L$lWcFjAiK6 zIQc=zT*Gl~JQ5Nz9TE}}5}M*CZ#*Lz%TTwfoZDxd+h^<^RY>S*9vaJN$^a4)5)xNr zx>Q9YXB0^2Y3f#ulDWoZ+u^e9Q2th=ZdIAoQ{;^Ts^Z5Z)0K(Ok#AosN=-N5l=1QgU1;=gC&v9Fn%_5ojEIWtWczi$;2%Xz!Y#prA z>-6Fn!9R}MV(Va?9!=$TcJ$;%bYKqf(?dd{_H&a;V}rJ6bB(68fAahfg>}TMx1Wvp P00000NkvXXu0mjf7qBHO literal 0 HcmV?d00001 diff --git a/emojis/2734.png b/emojis/2734.png new file mode 100644 index 0000000000000000000000000000000000000000..5fe58b23f45dfcd7180b609366dcc31082b47418 GIT binary patch literal 490 zcmVqnPF6hz!r93;jB5%dOP@1wuuH*B_G$JD7*WYwRY$d+HE?%;98ym$3%9jplTG5JD zv_k&|6KtZPVG|S8zow(3qZ^*j|SR8FSlYE}QFs=t@Cca+_#dRw`ZxtIEgo?mYRK zsPbc?(D4K~!bIJ!su!7zfbvd+$F{N<~u&m2_$crw~6Djf41AoT{6;b&zV8E}e>q zn?oRiltuGpjMpqkv7nLToH zX7-3}AK?IQ+hsWV$bvmGdb846xQW91rF#10j9pr_Db=P_o0`$4&R3?Cb~YTsX`IG` zNzQ5mZ8$H(j0|MZf^Zb;IG)&_*un{XkLyWJM7F|yyr@|hM}+|cE`&|oE*8iNwxYhV zt*SQdSio)N3Z|)-TGeD+)nCRZVoMLtx1#0n1K)#ANy-HzY!1+L&X9HZu> zPPOX&T2+4(x3H*cPW2~LzpQGEF)rhA%wZ9~R`thfQrBAAXh_;J4r8^FOO??dG9q!8 zKXD1Gm`&PpS{nw8aT>SqLt>S(ZCZI6kt||U)hZ5(XOzPjH#=@%U-4;mYt>CxS;E7Z zSG7b<7i+~Q%0Aq%ZS?$WXQ@v0ja0uHU0ORw*27o$4kPM0ee$L1S5@Coo$3Z{+Ftc; mYI291lxEu*Ax0D#f&KjXF0J3OgDh}XefJGglPTZGW5i#V4A2iw7=g=9>J z;?m7*O~4MF6oiDXE$$^yP)OXI?xr))2H}oN44&xKKn{)&>3ibcm)GwXm*@8Yl`+#( zG9b9Qy=DUckL`Yx7MJJu0F^NzAv^24?5yt+5;B3hn9=qmK;_u7gIy}U2Z4OT>^aGzr0`LL#D)6}q zeB!*pC1Ds6*X?zP@u!}@TymB9$FG1##0Ugu7fo8uFYdxSCh-5-ZuuW-^R6eT2Lo6D O0000exK0D$55dMr)wPKf==2U?{~B-L}!1t*gxURfMCS^NhbOv=W@ zR{ucx10)VErkl%M;$SznCKQP=Xw2nucnOLHdh|>^85kO3O`k{A)P%Al?rdpl;{40m z=?Pb0YAd&%UC%t~PDkI=9dT!?y1M@U+4ane(fM!Z==3DuKdK^c?A_cve4I?ZjN(5Z zmb&4n2lRn#JzH=pDS4kuR8rE|&1^V;1o|JtQBVDHcKXYULfh1Z1xQmDWrf&jO@;v% zR7KvX=L!xW0l(&UO7DJs|Ex08osI(~j_qPHZ2{S0GHrQLXm_XMfSF248ueVk0VLoz z`n^(f;I^4jnQKjkfft3gsS68`rY_2(^WV@z;E<>rTyS*n+sGHv?jyAi$dGf#dAOcNuXbIJEi8pZL?sBtBHY_e^6Oa z6?vncD>#4z`oI{FrY_0~vD2Ci11?axppueCJy&o53HYzPPo=}r;Pn&jh6QAc$+YD~ zq1~O11Ljobsv>XHa|H*GfM0Vvr8hsk_EC5ecu{DZy08Fg>Y}U=JFUquU`A!8l9EO} zS8xCc_>F$A)Eu~N=DO2ypv19VOr|X$TTG@cFADAMbR4Lrwz9T=`@si50)EZyY&Qq) zF$-FgVcWiG!d1apQY$8}I>nZ~58= wnwnVJU0r`_YAb78k*TfR+Ff1W($s|V7lBdw9*IMDnE(I)07*qoM6N<$f-oC1X8-^I literal 0 HcmV?d00001 diff --git a/emojis/274e.png b/emojis/274e.png new file mode 100644 index 0000000000000000000000000000000000000000..d85154ff5139776d1c10be71fe990a6d8bb0820c GIT binary patch literal 530 zcmV+t0`2{YP)K^m;CV#U~Z_-)aLn}i`Ta>)zo9wLYa(DBPOS;80 zN4wnFJY;8O7jL;k#iI1)>;;mi*vioL4sf(f#nCQZFThp?$ur)by`*AM8jXj9Q6I@u zY-RAh07tiQw2SWrXl0NhC5(EE#zQI>uiv`zfYOhj=X@N!W9{+=wlb_OZm{ldV=IH? z8DZ2Xk(fyqQxb^@qdrn(=$b*-8c2~5Mm-XVnP%~yET%Zx#rFbqt$`F7Qe@~_1K$g9 zbc<;g6CCZ*^#W{VkUS$C^auw%Bu}xG!S@buw96!m(n7t7?*(XOkUS-fdL$B)NK6>@ zks`%b2Hy*quP;)uD6O})v6bOGPYI(wiNsVAi3taNBu}xG;o8y`l{re$=V$!!`s;H> z;~~=$iFrJD$knASUVS;CG6x8tzvth0`u>=I8I6aWe0ahHv69nl9}s3I$*1i8FE?(g UNk~O?YybcN07*qoM6N<$g5A~X!~g&Q literal 0 HcmV?d00001 diff --git a/emojis/2753.png b/emojis/2753.png new file mode 100644 index 0000000000000000000000000000000000000000..1d8cf2015799a8493f73b1e6623d7370aaeba510 GIT binary patch literal 410 zcmV;L0cHM)P)iFt8XX ztNaC+m9xpqz<>-+&;4~chw~ggzw3$-+a{YP+b5g0Aov`X&5`Fj4x5z{oD-L@7Y!fq zpwtcW!;C>$SEZWkk*hY^h0BqJDksIVHO;JKf8?@NKb1$yBEDF4Je*CDBE_J`Ur8Mm zgB4XSkh}hYMmy5F11-SrN9XoWU`i#9&2wo~7ciAwA})<_=ET=w)SktD1j? z(#+R)TK67{B{yaA)r>)==1aHgow6I#DE}KO#ykv%iu;wC8Znd@aT`zYF=EV+lzCFQ zhAS0|)OjNYWy}JGlp`g^3^kN_s_J5pXYIBgb%!$5sosD^|9r$+70)I(}ap-?CkN@q~+7SG6M|IsDAd8%?FaxJMf>XHFn-#7Cl wmeEz^M2R8YLN_*7xian-Ubpm5TPs6;0Wd>yL#droegFUf07*qoM6N<$f-R1%fdBvi literal 0 HcmV?d00001 diff --git a/emojis/2755.png b/emojis/2755.png new file mode 100644 index 0000000000000000000000000000000000000000..58fdc859815b8044e4725032714a990d7e13ae0d GIT binary patch literal 272 zcmV+r0q_2aP)$5ix+us5#I3Dz2N87(!9#ciI~xNjLMkgSkWCSC z1R;Guhb=S#Q9EmGCU!Raw#a-RSz7I|*lLGGGUQS821E0*Sbj&N@#J{e$BEsXNg*hz zL8Akdfl4iCbWjMM1W$q|!IR)g@FaK=bdEcRqJSc?>lI+RN$h&Xe{}m%soRfAWGJBM z4Tfeqn|}c=mvfIF@9~xtf}$GK4NwLuwV-ZL8Jr=Q*S^Y!`Z?Rvd9Qv3nN WT`{b1pcm@^00001na6u{wMpRs8oDh(=Gq!4lgCr^;ctGMb&xh_gy-gzm%;z{(IjmL-LxHaY0$!ub)w|$IbF}f!F;dhMNyRpY6yl{{0T4w zMzQ!441y!Uk>E&hBsdZr362Dta-)jD!?3OXbA`(6!j_ic#+GsjZU|hgp|QEr2M~lk3!gxfiw~p0 zHla}(ax17c1jRu+@+yDdcgCF@+8y?K<(s$P^+M#s56)k_iTBj^^g2RrijVO#{Te?w zmOJn4J9bh0ggqyIbY$O&-&*hEch5~xl*`!jvVH7(*AZ&x8pRCZ=85rCr*kU37h?{Q^(%RC|@))HK~$Z=zi-TO90%a%^|_1XlGEu{KmLxyARb5=l?e3%%!w8E20jUkbxwH%!bZ2H`}p7ry%=Z&udqJ1u#D zOBmo=QqPjQV_#M7SLHgEF~JM!Hoo?YlS$rU*BN|cPNtmBjUKC4=n8cUJVyE#}91Yx(z^T?_= z<8QC4YC{>D(YrA`MM6R%$wWNG7p!7W*%X^eek74Z5=rzO?k65nPy7~BbNm8YYE0Knm2&T?EXxq^{M=^(VI;9Q43l|vuI7ZH4p4rX!?1kEN= zAwuoHT!%AaB^`PNo9|;E6>6hGZP?=ok9Lyu&-xdS$0zBHU6=Rea{0*)0uL$G07!vT zDb)ZEfk!|sz)#SSprIC(c9Qg^RD*z;j^ZI3I*NyBr^_D)Si8!mMe!P_P@CT6)eDgF zKa>3V>0I#3aiD-oJ4t#{s_TH7j^d$?&4|ik_I10M&&F&xz}nTrv?%fxm1$ArK+cx5 z(?!RIAB*{H{PF&F#}0yq1Puv199x`oc(m}ac9j7WD&@M&ID`tdQK2^M@eLpAM4Y!1 RfLZ_m002ovPDHLkV1l)qjTQg^ literal 0 HcmV?d00001 diff --git a/emojis/2796.png b/emojis/2796.png new file mode 100644 index 0000000000000000000000000000000000000000..c026e2f7408e456ca8811d5923a5a3444440debc GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7m^@t^Ln;{GNY!0pU|>i9 z@!lRZq z^B6jQWESW3`A$kp4dr(@XuSH(zTO=yaY1v6va{FvuHT`~pj3BfPV|r31B`l360z?z T8oU@77#KWV{an^LB{Ts5%X>Z4 literal 0 HcmV?d00001 diff --git a/emojis/2797.png b/emojis/2797.png new file mode 100644 index 0000000000000000000000000000000000000000..18964c871de2213f2276a8ff3f8e259f9c3c5fbc GIT binary patch literal 328 zcmV-O0k{5%P)b1dZm-_fCNlOUDB=4sD*~ewl&kBTjmxrFJxo*6(TR#tzyV{Uv2{g6N60Pu zzW8{5J4OK;3?iyvf`}?$5E!X3_shY`9*}kWz30<${MpAmSjYuJY`dv{(krjr5CTHTJMe8j9QFvMDIw;o2< z$o0EVC-QZ0hXOVjwJ literal 0 HcmV?d00001 diff --git a/emojis/27a1.png b/emojis/27a1.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa3f8c81a92a4e0e1392889401eb6c1177a24b3 GIT binary patch literal 376 zcmV-;0f+vHP)AxHlNeIai=>B@*$8_}2~58SHxd_`mW9|D2bnaH(IL7qXww?<%L#&} zk0y;KIP9Y-9yU2#OOq>ojRJ)8h)SN6_?It&=O1C|Wj725myX_F0LJhKBQvIl{`%{d0|-vl5l}4}LRn zA!xZQzp;C9OYQTUZVY-jy{T|={m55C+5O93;z+WU_GdNpTt#THy>7QM*%3D9y WS5{0TjnxnU0000axM5;Zk_@AK-8gYGVchMvd&l?RSIXqu+`?mv8Z6~}M~ zKVi#36IO5>o7hAbt4}=nK6wuhBbf1X+t15~u`S+>yn)B@mtEg4+Yj>8voBo23EZgp zPC8bSTo@y7;h0^2w*6>s*KrFIj^fZ_Fq>#b}3iXoq$r#>ZH+JwL|u?U<(T+OFBr@k!^Tb99c* zF%(5n=kRLVckrt{x7)sri{xedjHHrED(UO^2G`te179azOGrpq)Sk#=xEbnh?VKMn z`lx+|qNp9Wu~HO8QIuqK6~DE#vb@?P)**b~w)ap>L#HZOiIOe+rsxTj zx>Luv5UwV-f57sWjAeGUHgLW1EZKs~-L4i2?jh-&JXg=3Chs1gICce#8{es|c5rNq z4_n(*1#QA79L$ONbtdN5QF_}V-0yCszUDZ?)9-nmSVOse?II6)uHXs5$lE02iO-an z_*xojh~KzOY-kcg*Ln4*o266+W#DErv7t#kA$a-l7MtI)ETu9iCcapEl;P0<%mnU90fhdEP)=52G_mg9_>}D5#)Sf{37@prxK68loi|TW<+` zfyUM*X{g>H5?mS*sT&L_Be^R>Q_CTU<2;kTPnzF5*$KyW15oLYWtR$R5svEypwd4z zl9)0CpyDAQ3r3+>vU+50IM@YI0?GAue`H+n&;y7i4NoZj%>b+lb{EQ9};c^|0L*PK=IS@(P-jE z;9*=-Na-5Sb{+Gjh8r0NCE#Nz86y!5vbhi^6!4L`D$;1Sa3k}JkR%S*be5-MbiCD@ zWG;(j^JTh`aX8C8a{cg%Rr}<|tWvEt@FD{ipz^KNZj&>s(g-us$2QgXA ztP%sUNW;KD2nkw*Xb5f89gS;yCrwDCxt=thr>=i~byf*Q{$-!3qUI`}x z7jO9@`>8BSy+m814<~{@ve;;pvEF7X z397iwe2_?H(E?t|GKR_4*)x@7T&y2H&=K^}7j9s2M)YJYr$@cw0}TN`S#|RLiUuq@GBX0E6Kf z(d0}?0tSC)NCJeUV0~#C$HAAxhaL%WxSC;YF-Z`O0j4HKDCV-H<2rR^;{bxeH2P!{ z2E}}aSTurbaxB8p#ykRnt6{Y%TviZ*Um70EvoZEpQjCT}bcI8Lx#T!qb!Fov`6msJ z>&JI$O`BpqLo6D>_0@5BdQ%7lu7=gdOQX-jt77Z)o?swJCMUdiINUc*#EoFb-q=u$0NjC4peo3j+n z=8SZRSF&gxZ4qY@)9nrE_J+)X`?G!a+)Wl<-ZbZr&j{Z{_+b(w!WRJqVM!2_kVx@Q zCMm|#h>;Fi7*8Y8n51Yu^@$T9kpeUcL_h>YK!h|}O@cuS(5z2?1cR$jxPV2%+2_F; P00000NkvXXu0mjfzoww$ literal 0 HcmV?d00001 diff --git a/emojis/2b07.png b/emojis/2b07.png new file mode 100644 index 0000000000000000000000000000000000000000..95ab6d1a1caa57593ad19295982e4a740ec0c2da GIT binary patch literal 376 zcmV-;0f+vHP)g-@rJyi8AV7cnL=bqQQYU zx*K(+av8PK$U@piE|z1^)Kt=H(C-tgd#5|8T%im|W@9^MyQrmdg)$(Sot)1vmUTc9 zLMgrxf-q7iLV0tArEH3crsZ;QQ74Q}gmf}aMkbhev4=#__$QqJrTCx#g~F#$j1>qz z3BebgfbES1w$}1Yq?2>_ma~$}-E}6;@1HrldBmp?P`NW{S}qxxARZI=;xR!+CTLkM zmD?wRGy=S_;<(nJX*o=5SuRJl25)0Ukj4~u;8Cg?be$o-t~2DYYTyn$rfG!e^ahlw z2CpNJ{>YiF z@s=LE$k}Wl(R%Ux>PspglEYtkA5`7tFTTMz<+hVUZAn|jdC9olOq90%a%`@4VKE2wm9Hx_Xk1B1m}DY zlz0;u8ulXTPHwpW$DLfACcTR1DJR%mJ2l)qJv1}1LYHS3tWaB;dIo!r(WFR`B1MW6YK(>^bzKkyK@ge>6)IGyP$`TZDr2P-3WY+^VMv|Fz|uO- zS-L=7!+}FFB_BH6!F?xdcWzgaMT!)uci6YuzRIo^T4>QUG&D3D7+GyZZBQtbMi2zq#=z1ye6=(n z+XO*0N7Rm`*V1p1Exhta?Wm%PDxFq-i=i0dhvcq!qN*1&xq(}%9$+Mfn3(DGu`t1y l9BB3&)#I_`J++33g)PA0a$|AOI3(eM6~W>$$IbWq#MTY95jC z;%#E+RZ{TZhHEod*}j|IQ5IFpv_VN6@6ALKW9d-)6o42g+0b8KQ`YV<6OqorRIu$O z00Ln1p;|bfEi0>IsNBM*XvOCHmfFdY~6NU+ZI4I4r^QvXm z(12>0HO;Z}aCH*=Cjy`dN@To!634S>K;n2-WW0TFZ4lKmmf(tKB8f|A;8C=D3_u)| zY8lHUS1ru|utB9m?NjMcG=>wTTcWXxfyfKE>|C`p!^oyyy5K)0g<0PafWW92Nq4Zk zBAdFRId&bC#PRH8v^$k)>zW4;1645e>Bn2&r#+y0d4JPf*Wd?{VTbWoQFCf}P$I+j z0f^&}=G4AiSH7hRhQ7yu+O@6P%J0g%{-(g`Fzf3FKmY`Ngz51SrUyU}E?YMA>4}Z} zP1)4hY4$t{`3egip%d_@+@n3g(viR&>IF4k_m|-;UXt(*zyTA|r z5YLTYH~q&8SGkt`l=FvF^3PN|v2Z$F)he)LGgsE$zt&l!~Y&^91#)AvtVUyxBAUxR)e9e@WmRES71wg=v xzZ(F?TyiIYm~qL!jrc{}3pxrq3OWipx&=jBQvDrF?{NSC002ovPDHLkV1gsunw0iyWc_v)zs41Ot zMcA-4xWcXP@$PGtkBrhz3eVW=v{7TuVV1Uno*k>U_U~w1D{)lh5ErX-CwG+n7PXGV zM?zK+8&r-J9N=PIEOCr!r~Ld4oaYNAJm($J;VNWJj6A5gw!FgEFYB$tL2nyH^{sqK z>r-1LHmb;<_L;f;#PX>4g0>gl{T~EdEwlwn3S+DEPst`;w5ep-{lW29nrFzJqoy*` zH}cNkU6(uKV9!;t567YmcP#(@S*h(y_2XZ6XS)VxYWXf*X)<-$rI1-(V2=6!sWlma z&%bB->K^^&o7^Cng%EjLInOqC&i);Bc7r}2>8xA9Uxekg z!SX%xf)xoM&Xg2}B+w4#1%J@1D`!y>LZlVg1t|Wu1Yrr#1k#Q%2LT741p-J2k=sC% zy<@9V)e$C0K%?w1$_}IKFv<=q2?m=GxdRdcL4yI2Rv>{dv~CsI?pJu<28o?LfwIGx zLV-z^g_H&9-`2d|cwQ^U?A1U6u(M+2QYtrXAh;;b?0t=7?mt4;#^~SHOmWO%l4UXf zMjH|gV6xs$;DQF(4e0#)K8l?;`O$fk%8lzOZ>R@j0K|JcVLLo>-UMa9>o+~tjZAH z$aluNo>I)^DT!-J^xPQHmLuqz2;Sf@RfqR8)N&4MMu_o`pD1sr$9d9?^SGNoSwIS( zy?qnuOIOMFd}R1^2l<{}P>R5UTHOAxOcDN(vM?m^4V}Ee*uy7?R!kVZ^#Cag5L~>F z{D(fKS@uk3Zr;cwL(&4%2Dto7Sws#sleyQ0$>o_AsEtw4uoRyQv}ur+KnKu7i4`hm z&Y9zQqZ!g2SD0Y3IqV%<5T(f6?ZVdqyi^CGb@-BqtO4qblV!X&h5L1Y^rfrd6`7EG z{g(0feK^TyIM1Fx!k9*&pbkVA0a5^S4Uy_X>dP{d%~^%d{b2abb@2v4qPJsjK!QtxgfrbZOemOO$bdu3}gVUj{q5b zMptMJAOVD7MC~!db*gIbPLyqfQdEBY0q$5F?JnX|h&aGzkc%L$0u4e>>AJPihQVGM z273|9B765f-pnjkeI4No=P7M|7rWh|ru$QT9SA+3F}gyHt%#iW5=oUFxbrm@={5CIYFwhiRQCNXMj zctwaRAcD`EnZ>BCBA=ee-q?Z_X`tex4qgx;xNk41Z-xkc`8g_BNl`?xL@6pi*?~Lx zkhzP)ly__)H#$K<`Sz`NGqXJV^DdcR|DgQ+O)ODB9ADM$9c2F=L+d=xZr{PEtL4An zZ&6USXD2hKdMU_UxlWn0o}#!yGeXh7ecvGn1?iznnDrsb)~_Y;#aX;W5^GgGw$n`V z+}FII88JckfyCy%|IwsKN=qndT0>y#d$^CE;!giVfz|jn>aA+LL=xX3&}RZSfdSwE zMP;qc7!~C_>FlPa`w*d%$M8}qtnf+_C(ckb0Q#nkH*d!mKx7z*R(!aPg`a;zXLA&Y zVPGs@hFB(EDos8;kMA;?T|ma@3N_+$fk8xSbK_Gjc%EX3*5ns5 b.name) return 1; + return 0; + }); + + emojis.forEach(function(emoji) { + Jimp.read(emojiPath + "img-twitter-64/" + emoji.image, function (err, lenna) { + if (err) throw err; + + lenna + .resize(16, 16) + .quality(100) + .write(__dirname + '/emojis/' + emoji.image); + }); + }); + + var emojisStr = JSON.stringify(emojis); + fs.writeFileSync(__dirname + '/emojis/emojis-data.json', emojisStr, { + flag: 'w+' + }); + + cb(); +}); + gulp.task("conf", function() { return gulp.src(["conf/conf.example.json"]) .pipe(gulp.dest(paths.dist)); @@ -460,7 +546,7 @@ gulp.task("coffee", function() { }); gulp.task("moment-locales", function() { - return gulp.src(paths.vendor + "moment/locale/*") + return gulp.src(paths.modules + "moment/locale/*") .pipe(gulpif(isDeploy, uglify())) .pipe(gulp.dest(paths.distVersion + "locales/moment-locales/")); }); @@ -528,6 +614,22 @@ gulp.task("copy-images", function() { .pipe(gulp.dest(paths.distVersion + "/images/")); }); +gulp.task("copy-emojis", function() { + return gulp.src([__dirname + "/emojis/*"]) + .pipe(gulp.dest(paths.distVersion + "/emojis/")); +}); + +gulp.task("copy-prism", ["prism-languages"], function() { + var prismLanguages = require(__dirname + '/prism-languages.json'); + + prismLanguages = prismLanguages.map(function(it) { + return paths.modules + "prismjs/components/" + it.file; + }); + + return gulp.src(prismLanguages.concat(__dirname + '/prism-languages.json')) + .pipe(gulp.dest(paths.distVersion + "/prism/")); +}); + gulp.task("copy-theme-images", function() { return gulp.src(themes.current.path + "/images/**/*") .pipe(gulpif(isDeploy, imagemin({progressive: true}))) @@ -543,6 +645,8 @@ gulp.task("copy", [ "copy-fonts", "copy-theme-fonts", "copy-images", + "copy-emojis", + "copy-prism", "copy-theme-images", "copy-svg", "copy-theme-svg", @@ -578,11 +682,13 @@ gulp.task("express", function() { app.use("/" + version + "/js", express.static(__dirname + "/dist/" + version + "/js")); app.use("/" + version + "/styles", express.static(__dirname + "/dist/" + version + "/styles")); app.use("/" + version + "/images", express.static(__dirname + "/dist/" + version + "/images")); + app.use("/" + version + "/emojis", express.static(__dirname + "/dist/" + version + "/emojis")); app.use("/" + version + "/svg", express.static(__dirname + "/dist/" + version + "/svg")); app.use("/" + version + "/partials", express.static(__dirname + "/dist/" + version + "/partials")); app.use("/" + version + "/fonts", express.static(__dirname + "/dist/" + version + "/fonts")); app.use("/" + version + "/locales", express.static(__dirname + "/dist/" + version + "/locales")); app.use("/" + version + "/maps", express.static(__dirname + "/dist/" + version + "/maps")); + app.use("/" + version + "/prism", express.static(__dirname + "/dist/" + version + "/prism")); app.use("/plugins", express.static(__dirname + "/dist/plugins")); app.use("/conf.json", express.static(__dirname + "/dist/conf.json")); app.use(require('connect-livereload')({ diff --git a/package.json b/package.json index 2849caf4..a54865f1 100644 --- a/package.json +++ b/package.json @@ -99,7 +99,42 @@ "scss-lint" ], "dependencies": { + "Flot": "git+https://github.com/flot/flot.git", + "angular": "1.5.5", + "angular-animate": "1.5.5", + "angular-aria": "1.5.5", + "angular-route": "1.5.5", + "angular-sanitize": "1.5.5", + "angular-translate": "2.10.0", + "angular-translate-interpolation-messageformat": "2.10.0", + "angular-translate-loader-partial": "2.10.0", + "angular-translate-loader-static-files": "2.10.0", "awesomplete": "^1.0.0", - "dom-autoscroller": "^1.3.1" + "bluebird": "^3.4.6", + "bourbon": "git+https://github.com/thoughtbot/bourbon.git", + "checksley": "git+https://github.com/jespino/checksley-bower.git", + "dom-autoscroller": "^1.3.1", + "dragula": "^3.7.2", + "flot-axislabels": "git+https://git@github.com/juanfran/flot-axislabels.git", + "highlight.js": "^9.7.0", + "immutable": "^3.8.1", + "intro.js": "^2.3.0", + "jquery": "^2.2.3", + "jquery.flot.tooltip": "git+https://git@github.com/krzysu/flot.tooltip.git", + "l.js": "git+https://git@github.com/juanfran/l.js.git", + "lodash": "^4.16.4", + "markdown-it": "^8.0.1", + "markdown-it-task-lists": "^1.4.1", + "medium-editor": "^5.21.1", + "medium-editor-autolist": "git+https://github.com/gruberro/medium-editor-autolist.git#add-package-json", + "medium-editor-tc-mention": "^2.2.4", + "messageformat": "^1.0.2", + "moment": "^2.15.1", + "ng-infinite-scroll": "^1.3.0", + "pikaday": "^1.4.0", + "prismjs": "^1.5.1", + "raven-js": "^3.7.0", + "showdown": "^1.4.3", + "to-markdown": "^3.0.1" } } diff --git a/prism-languages.json b/prism-languages.json new file mode 100644 index 00000000..be5b8e15 --- /dev/null +++ b/prism-languages.json @@ -0,0 +1 @@ +[{"file":"prism-abap.min.js","name":"abap"},{"file":"prism-actionscript.min.js","name":"actionscript"},{"file":"prism-apacheconf.min.js","name":"apacheconf"},{"file":"prism-apl.min.js","name":"apl"},{"file":"prism-applescript.min.js","name":"applescript"},{"file":"prism-asciidoc.min.js","name":"asciidoc"},{"file":"prism-aspnet.min.js","name":"aspnet"},{"file":"prism-autohotkey.min.js","name":"autohotkey"},{"file":"prism-autoit.min.js","name":"autoit"},{"file":"prism-bash.min.js","name":"bash"},{"file":"prism-basic.min.js","name":"basic"},{"file":"prism-batch.min.js","name":"batch"},{"file":"prism-bison.min.js","name":"bison"},{"file":"prism-brainfuck.min.js","name":"brainfuck"},{"file":"prism-bro.min.js","name":"bro"},{"file":"prism-c.min.js","name":"c"},{"file":"prism-clike.min.js","name":"clike"},{"file":"prism-coffeescript.min.js","name":"coffeescript"},{"file":"prism-core.min.js","name":"core"},{"file":"prism-cpp.min.js","name":"cpp"},{"file":"prism-crystal.min.js","name":"crystal"},{"file":"prism-csharp.min.js","name":"csharp"},{"file":"prism-css-extras.min.js","name":"css-extras"},{"file":"prism-css.min.js","name":"css"},{"file":"prism-d.min.js","name":"d"},{"file":"prism-dart.min.js","name":"dart"},{"file":"prism-diff.min.js","name":"diff"},{"file":"prism-docker.min.js","name":"docker"},{"file":"prism-eiffel.min.js","name":"eiffel"},{"file":"prism-elixir.min.js","name":"elixir"},{"file":"prism-erlang.min.js","name":"erlang"},{"file":"prism-fortran.min.js","name":"fortran"},{"file":"prism-fsharp.min.js","name":"fsharp"},{"file":"prism-gherkin.min.js","name":"gherkin"},{"file":"prism-git.min.js","name":"git"},{"file":"prism-glsl.min.js","name":"glsl"},{"file":"prism-go.min.js","name":"go"},{"file":"prism-groovy.min.js","name":"groovy"},{"file":"prism-haml.min.js","name":"haml"},{"file":"prism-handlebars.min.js","name":"handlebars"},{"file":"prism-haskell.min.js","name":"haskell"},{"file":"prism-haxe.min.js","name":"haxe"},{"file":"prism-http.min.js","name":"http"},{"file":"prism-icon.min.js","name":"icon"},{"file":"prism-inform7.min.js","name":"inform7"},{"file":"prism-ini.min.js","name":"ini"},{"file":"prism-j.min.js","name":"j"},{"file":"prism-jade.min.js","name":"jade"},{"file":"prism-java.min.js","name":"java"},{"file":"prism-javascript.min.js","name":"javascript"},{"file":"prism-json.min.js","name":"json"},{"file":"prism-jsx.min.js","name":"jsx"},{"file":"prism-julia.min.js","name":"julia"},{"file":"prism-keyman.min.js","name":"keyman"},{"file":"prism-kotlin.min.js","name":"kotlin"},{"file":"prism-latex.min.js","name":"latex"},{"file":"prism-less.min.js","name":"less"},{"file":"prism-lolcode.min.js","name":"lolcode"},{"file":"prism-lua.min.js","name":"lua"},{"file":"prism-makefile.min.js","name":"makefile"},{"file":"prism-markdown.min.js","name":"markdown"},{"file":"prism-markup.min.js","name":"markup"},{"file":"prism-matlab.min.js","name":"matlab"},{"file":"prism-mel.min.js","name":"mel"},{"file":"prism-mizar.min.js","name":"mizar"},{"file":"prism-monkey.min.js","name":"monkey"},{"file":"prism-nasm.min.js","name":"nasm"},{"file":"prism-nginx.min.js","name":"nginx"},{"file":"prism-nim.min.js","name":"nim"},{"file":"prism-nix.min.js","name":"nix"},{"file":"prism-nsis.min.js","name":"nsis"},{"file":"prism-objectivec.min.js","name":"objectivec"},{"file":"prism-ocaml.min.js","name":"ocaml"},{"file":"prism-oz.min.js","name":"oz"},{"file":"prism-parigp.min.js","name":"parigp"},{"file":"prism-parser.min.js","name":"parser"},{"file":"prism-pascal.min.js","name":"pascal"},{"file":"prism-perl.min.js","name":"perl"},{"file":"prism-php-extras.min.js","name":"php-extras"},{"file":"prism-php.min.js","name":"php"},{"file":"prism-powershell.min.js","name":"powershell"},{"file":"prism-processing.min.js","name":"processing"},{"file":"prism-prolog.min.js","name":"prolog"},{"file":"prism-protobuf.min.js","name":"protobuf"},{"file":"prism-puppet.min.js","name":"puppet"},{"file":"prism-pure.min.js","name":"pure"},{"file":"prism-python.min.js","name":"python"},{"file":"prism-q.min.js","name":"q"},{"file":"prism-qore.min.js","name":"qore"},{"file":"prism-r.min.js","name":"r"},{"file":"prism-rest.min.js","name":"rest"},{"file":"prism-rip.min.js","name":"rip"},{"file":"prism-roboconf.min.js","name":"roboconf"},{"file":"prism-ruby.min.js","name":"ruby"},{"file":"prism-rust.min.js","name":"rust"},{"file":"prism-sas.min.js","name":"sas"},{"file":"prism-sass.min.js","name":"sass"},{"file":"prism-scala.min.js","name":"scala"},{"file":"prism-scheme.min.js","name":"scheme"},{"file":"prism-scss.min.js","name":"scss"},{"file":"prism-smalltalk.min.js","name":"smalltalk"},{"file":"prism-smarty.min.js","name":"smarty"},{"file":"prism-sql.min.js","name":"sql"},{"file":"prism-stylus.min.js","name":"stylus"},{"file":"prism-swift.min.js","name":"swift"},{"file":"prism-tcl.min.js","name":"tcl"},{"file":"prism-textile.min.js","name":"textile"},{"file":"prism-twig.min.js","name":"twig"},{"file":"prism-typescript.min.js","name":"typescript"},{"file":"prism-verilog.min.js","name":"verilog"},{"file":"prism-vhdl.min.js","name":"vhdl"},{"file":"prism-vim.min.js","name":"vim"},{"file":"prism-wiki.min.js","name":"wiki"},{"file":"prism-yaml.min.js","name":"yaml"}] \ No newline at end of file From ebf8e2c0b25ec183501920e7d7565e0eae60c8ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 22 Nov 2016 13:38:02 +0100 Subject: [PATCH 065/175] [i18n] Update locales --- app/locales/taiga/locale-ca.json | 35 ++--- app/locales/taiga/locale-de.json | 123 +++++++--------- app/locales/taiga/locale-es.json | 39 ++---- app/locales/taiga/locale-fi.json | 35 ++--- app/locales/taiga/locale-fr.json | 45 ++---- app/locales/taiga/locale-it.json | 35 ++--- app/locales/taiga/locale-nb.json | 35 ++--- app/locales/taiga/locale-nl.json | 35 ++--- app/locales/taiga/locale-pl.json | 73 ++++------ app/locales/taiga/locale-pt-br.json | 193 ++++++++++++-------------- app/locales/taiga/locale-ru.json | 89 +++++------- app/locales/taiga/locale-sv.json | 35 ++--- app/locales/taiga/locale-tr.json | 35 ++--- app/locales/taiga/locale-zh-hant.json | 35 ++--- 14 files changed, 288 insertions(+), 554 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index 029d9984..868eacd6 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -41,7 +41,7 @@ "LOGOUT": "Surt", "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!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Project Owner", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "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", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Ajuda de Markdown" @@ -1248,6 +1223,12 @@ "SHOW": "Mostra etiquetes", "HIDE": "Amaga etiquetes" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Històries d'usuari", "TITLE_COLUMN_POINTS": "Selecciona vista per rol" diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index 00606711..40be3b31 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -11,7 +11,7 @@ "CANCEL": "Abbrechen", "ACCEPT": "Akzeptieren", "DELETE": "Löschen", - "UNLINK": "Unlink", + "UNLINK": "Verknüpfung auflösen", "CREATE": "Erzeugen", "ADD": "Hinzufügen", "COPY_TO_CLIPBOARD": "Ins Clipboard übernehmen: Strg+C", @@ -36,12 +36,12 @@ "ONE_ITEM_LINE": "Ein Eintrag pro Zeile...", "NEW_BULK": "Neue Massenerstellung", "RELATED_TASKS": "Verbundene Aufgaben", - "PREVIOUS": "Previous", + "PREVIOUS": "Zurück", "NEXT": "Weiter", "LOGOUT": "Ausloggen", "EXTERNAL_USER": "ein externer Benutzer", "GENERIC_ERROR": "Eins unserer Helferlein sagt {{error}}.", - "IOCAINE_TEXT": "Fühlen Sie sich von einer Aufgabe etwas erdrückt? Stellen Sie sicher, dass andere davon erfahren, indem Sie auf Locaine klicken, wenn Sie eine Aufgabe ändern. Es ist möglich, gegen dieses (fiktive) tödliche Gift immun zu werden, indem man kleine Mengen über einen Zeitraum hinweg einnimmt. Genauso, wie es möglich ist, besser in dem zu werden, was man tut, indem man gelegentlich zusätzliche Herausforderungen annimmt!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Projekteigentümer", @@ -50,8 +50,8 @@ "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Beachten Sie, dass alle Änderungen verloren gehen, wenn Sie den Bearbeitungsmodus schließen, ohne vorher zu speichern.", "RELATED_USERSTORIES": "Related user stories", "CARD": { - "ASSIGN_TO": "Assign To", - "EDIT": "Edit card" + "ASSIGN_TO": "Zuweisen an", + "EDIT": "Karte bearbeiten" }, "FORM_ERRORS": { "DEFAULT_MESSAGE": "Dieser Wert scheint ungültig zu sein.", @@ -125,7 +125,7 @@ "ISSUE": "Ticket", "EPIC": "Epic", "TAGS": { - "PLACEHOLDER": "Enter tag", + "PLACEHOLDER": "Gib einen Tag ein", "DELETE": "Schlagwort löschen", "ADD": "Schlagwort hinzufügen" }, @@ -198,7 +198,7 @@ "CUSTOM_FIELDS": "Benutzerdefinierte Felder", "SAVE": "Benutzerdefiniertes Feld speichern", "EDIT": "Benutzerdefiniertes Feld bearbeiten", - "DELETE": "Benutzerattribut löschen", + "DELETE": "benutzerdefiniertes Attribut löschen", "CONFIRM_DELETE": "Alle Werte in benutzerdefinierten Feldern werden gelöscht.\n Sind Sie sicher, dass Sie fortfahren wollen?" }, "FILTERS": { @@ -209,7 +209,7 @@ "TITLE_ACTION_SEARCH": "Suche", "ACTION_SAVE_CUSTOM_FILTER": "Als Benutzerfilter speichern", "PLACEHOLDER_FILTER_NAME": "Benennen Sie den Filter und drücken Sie die Eingabetaste", - "APPLIED_FILTERS_NUM": "filters applied", + "APPLIED_FILTERS_NUM": "Filter wurden angewandt", "CATEGORIES": { "TYPE": "Arten", "STATUS": "Status", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "H1_BUTTON": "Überschrift 1", - "H1_SAMPLE_TEXT": "Titel...", - "H2_BUTTON": "Überschrift 2", - "H2_SAMPLE_TEXT": "Titel...", - "H3_BUTTON": "Überschrift 3", - "H3_SAMPLE_TEXT": "Titel...", - "BOLD_BUTTON": "Fettschrift", - "BOLD_BUTTON_SAMPLE_TEXT": "Text...", - "ITALIC_BUTTON": "Kursivschrift", - "ITALIC_SAMPLE_TEXT": "Text...", - "STRIKE_BUTTON": "Treffer", - "STRIKE_SAMPLE_TEXT": "Text...", - "BULLETED_LIST_BUTTON": "Aufzählung", - "BULLETED_LIST_SAMPLE_TEXT": "Text...", - "NUMERIC_LIST_BUTTON": "Numerische Liste", - "NUMERIC_LIST_SAMPLE_TEXT": "Text...", - "PICTURE_BUTTON": "Bild", - "PICTURE_SAMPLE_TEXT": "Alternativtext zum Bild...", - "LINK_BUTTON": "Link", - "LINK_SAMPLE_TEXT": "Linktext...", - "QUOTE_BLOCK_BUTTON": "Blockzitat", - "QUOTE_BLOCK_SAMPLE_TEXT": "Text...", - "CODE_BLOCK_BUTTON": "Kodeblock", - "CODE_BLOCK_SAMPLE_TEXT": "Text...", - "PREVIEW_BUTTON": "Vorschau", - "EDIT_BUTTON": "Bearbeiten", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Dateien per Drag & Drop auf das obere Textfeld anhängen.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Markdown syntax Hilfe" @@ -260,11 +235,11 @@ "PERMISIONS_CATEGORIES": { "EPICS": { "NAME": "Epics", - "VIEW_EPICS": "View epics", - "ADD_EPICS": "Add epics", - "MODIFY_EPICS": "Modify epics", - "COMMENT_EPICS": "Comment epics", - "DELETE_EPICS": "Delete epics" + "VIEW_EPICS": "Epics anzeigen", + "ADD_EPICS": "Epics hinzufügen", + "MODIFY_EPICS": "Epics verändern", + "COMMENT_EPICS": "Epics kommentieren", + "DELETE_EPICS": "Epics löschen" }, "SPRINTS": { "NAME": "Sprints", @@ -278,7 +253,7 @@ "VIEW_USER_STORIES": "User-Stories ansehen", "ADD_USER_STORIES": "User-Stories hinzufügen", "MODIFY_USER_STORIES": "User-Stories modifizieren", - "COMMENT_USER_STORIES": "Comment user stories", + "COMMENT_USER_STORIES": "User-Stories kommentieren", "DELETE_USER_STORIES": "User-Stories löschen" }, "TASKS": { @@ -286,7 +261,7 @@ "VIEW_TASKS": "Aufgaben ansehen", "ADD_TASKS": "Aufgaben hinzufügen", "MODIFY_TASKS": "Aufgaben ändern", - "COMMENT_TASKS": "Comment tasks", + "COMMENT_TASKS": "Aufgaben kommentieren", "DELETE_TASKS": "Aufgaben löschen" }, "ISSUES": { @@ -294,7 +269,7 @@ "VIEW_ISSUES": "Tickets ansehen", "ADD_ISSUES": "Tickets hinzufügen", "MODIFY_ISSUES": "Tickets ändern", - "COMMENT_ISSUES": "Comment issues", + "COMMENT_ISSUES": "Tickets kommentieren", "DELETE_ISSUES": "Tickets löschen" }, "WIKI": { @@ -409,14 +384,14 @@ "SECTION_NAME": "Epics", "EPIC": "EPIC", "PAGE_TITLE": "Epics - {{projectName}}", - "PAGE_DESCRIPTION": "The epics list of the project {{projectName}}: {{projectDescription}}", + "PAGE_DESCRIPTION": "Die Liste der Epics dieses Projekts {{projectName}}: {{projectDescription}}", "DASHBOARD": { "ADD": "+ EPIC HINZUFÜGEN", "UNASSIGNED": "Nicht zugeordnet" }, "EMPTY": { - "TITLE": "It looks like there aren't any epics yet", - "EXPLANATION": "Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.", + "TITLE": "Es sind noch keine Epics vorhanden", + "EXPLANATION": "Epics sind Elemente, die User-Stories umfassen.
    Sie stehen dabei an oberster Stelle in der Hierarchie und können dazu verwendet werden, User-Stories zu gruppieren.", "HELP": "Erfahren Sie mehr über Epics" }, "TABLE": { @@ -427,11 +402,11 @@ "ASSIGNED_TO": "Zugewiesen", "STATUS": "Status", "PROGRESS": "Fortschritt", - "VIEW_OPTIONS": "View options" + "VIEW_OPTIONS": "Zeige Optionen" }, "CREATE": { "TITLE": "Neues Epic", - "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", + "PLACEHOLDER_DESCRIPTION": "Bitte beschreiben Sie dieses Epic zum leichteren Verständnis", "TEAM_REQUIREMENT": "Team-Anforderung", "CLIENT_REQUIREMENT": "Kunden-Anforderung", "BLOCKED": "Blockiert", @@ -573,7 +548,7 @@ "REGENERATE_SUBTITLE": "Sie sind im Begriff, die CSV data access URL zu ändern. Die vorherige URL wird deaktiviert. Sind Sie sicher?" }, "CSV": { - "SECTION_TITLE_EPIC": "epics reports", + "SECTION_TITLE_EPIC": "Epics Berichte", "SECTION_TITLE_US": "User-Stories Berichte", "SECTION_TITLE_TASK": "Aufgabenberichte", "SECTION_TITLE_ISSUE": "Ticket Berichte", @@ -586,8 +561,8 @@ "CUSTOM_FIELDS": { "TITLE": "Benutzerfelder", "SUBTITLE": "Spezifizieren Sie die Benutzerfelder für Ihre User-Stories, Aufgaben und Tickets.", - "EPIC_DESCRIPTION": "Epics custom fields", - "EPIC_ADD": "Add a custom field in epics", + "EPIC_DESCRIPTION": "Benutzerdefinierte Felder der Epics", + "EPIC_ADD": "Benutzerdefiniertes Feld bei Epics hinzufügen", "US_DESCRIPTION": "Benutzerdefinierte Felder der User-Story", "US_ADD": "Benutzerdefiniertes Feld bei User-Stories hinzufügen", "TASK_DESCRIPTION": "Aufgaben benutzerdefinierte Felder", @@ -625,8 +600,8 @@ "PROJECT_VALUES_STATUS": { "TITLE": "Status", "SUBTITLE": "Spezifizieren Sie die Status, die Ihre User-Stories, Aufgaben und Tickets durchlaufen werden.", - "EPIC_TITLE": "Epic Statuses", - "US_TITLE": "User Story Statuses", + "EPIC_TITLE": "Epic Status", + "US_TITLE": "User-Story Status", "TASK_TITLE": "Aufgaben-Status", "ISSUE_TITLE": "Ticket-Status" }, @@ -639,13 +614,13 @@ "PROJECT_VALUES_TAGS": { "TITLE": "Schlagwörter", "SUBTITLE": "View and edit the color of your tags", - "EMPTY": "Currently there are no tags", + "EMPTY": "Zur Zeit sind keine Tags vorhanden", "EMPTY_SEARCH": "Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden.", "ACTION_ADD": "Schlagwort hinzufügen", - "NEW_TAG": "New tag", - "MIXING_HELP_TEXT": "Select the tags that you want to merge", - "MIXING_MERGE": "Merge Tags", - "SELECTED": "Selected" + "NEW_TAG": "Neuer Tag", + "MIXING_HELP_TEXT": "Wähle die Tags aus, die zu zusammenführen willst", + "MIXING_MERGE": "Tags zusammenführen", + "SELECTED": "Ausgewählt" }, "ROLES": { "PAGE_TITLE": "Rollen - {{projectName}}", @@ -850,7 +825,7 @@ "FILTER_TYPE_PROJECTS": "Projekte", "FILTER_TYPE_PROJECT_TITLES": "Nur Projekte anzeigen", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPIC_TITLES": "Nur Epics anzeigen", "FILTER_TYPE_USER_STORIES": "Stories", "FILTER_TYPE_USER_STORIES_TITLES": "Nur User-Stories anzeigen", "FILTER_TYPE_TASKS": "Aufgaben", @@ -1050,8 +1025,8 @@ "CREATE_MEMBER": { "PLACEHOLDER_INVITATION_TEXT": "(Optional) Fügen Sie einen persönlichen Text zur Einladung hinzu. Erzählen Sie Ihren neuen Mitgliedern etwas Schönes. ;-)", "PLACEHOLDER_TYPE_EMAIL": "Geben Sie eine E-Mail ein", - "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.", - "LIMIT_USERS_WARNING_MESSAGE": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members." + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "Dieses Projekt erreicht bald die maximale Anzahl von {{maxMembers}} Mitgliedern. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie bitte den Administrator.", + "LIMIT_USERS_WARNING_MESSAGE": "Dieses Projekt erreicht bald die maximale Anzahl von {{maxMembers}} Mitgliedern." }, "LEAVE_PROJECT_WARNING": { "TITLE": "Das Projekt kann nicht ohne einen Projektleiter existieren.", @@ -1072,23 +1047,23 @@ }, "EPIC": { "PAGE_TITLE": "{{epicSubject}} - Epic {{epicRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", + "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Beschreibung: {{epicDescription}}", "SECTION_NAME": "Epic", - "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", - "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", - "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Verknüpfung zur zugehören User-Story lösen", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Dies wird die Verknüpfung zur zugehörigen User-Story '{{subject}}' löschen", + "ERROR_UNLINK_RELATED_USERSTORY": "Die Verknüpfung konnte nicht gelöscht werden: {{errorMessage}}", "CREATE_RELATED_USERSTORIES": "Create a relationship with", "NEW_USERSTORY": "Neue User-Story", - "EXISTING_USERSTORY": "Existing user story", + "EXISTING_USERSTORY": "Bestehende User-Story", "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", "SUBJECT": "Thema", "SUBJECT_BULK_MODE": "Subject (bulk insert)", "CHOOSE_PROJECT_FROM": "What's the project?", "CHOOSE_USERSTORY": "What's the user story?", "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", - "FILTER_USERSTORIES": "Filter user stories", + "FILTER_USERSTORIES": "User-Stories filter", "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", - "ACTION_DELETE": "Delete epic" + "ACTION_DELETE": "Epic löschen" }, "US": { "PAGE_TITLE": "{{userStorySubject}} - User-Story {{userStoryRef}} - {{projectName}}", @@ -1160,12 +1135,12 @@ "US_POINTS": "{{role}} points", "NEW_ATTACHMENT": "neuer Anhang:", "DELETED_ATTACHMENT": "gelöschter Anhang:", - "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", - "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", - "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", + "UPDATED_ATTACHMENT": "Anhang aktualisiert ({{filename}}):", + "CREATED_CUSTOM_ATTRIBUTE": "benutzerdefiniertes Attribut erstellt", + "UPDATED_CUSTOM_ATTRIBUTE": "benutzerdefiniertes Attribut aktualisiert", "SIZE_CHANGE": "Machte {size, plural, one{eine Änderung} other{# Änderungen}}", "BECAME_DEPRECATED": "ist veraltet", - "BECAME_UNDEPRECATED": "became undeprecated", + "BECAME_UNDEPRECATED": "ist wieder aktuell", "TEAM_REQUIREMENT": "Team Anforderung", "CLIENT_REQUIREMENT": "Kundenanforderung", "BLOCKED": "Blockiert", @@ -1248,6 +1223,12 @@ "SHOW": "Schlagwörter anzeigen", "HIDE": "Schlagwörter ausblenden" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "User-Stories", "TITLE_COLUMN_POINTS": "Ansicht mittels Rolle auswählen" diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index e12ab653..462796e1 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -41,7 +41,7 @@ "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!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Requerimiento de cliente es un nuevo requisito que no se esperaba y es necesario que forme parte del proyecto.", "TEAM_REQUIREMENT": "Requerimiento del equipo es un nuevo requisito que debe existir en el proyecto pero que no conllevará ningún coste para el cliente.", "OWNER": "Dueño del proyecto", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "H1_BUTTON": "Título de primer nivel", - "H1_SAMPLE_TEXT": "Tu título aquí...", - "H2_BUTTON": "Título de segundo nivel", - "H2_SAMPLE_TEXT": "Tu título aquí...", - "H3_BUTTON": "Título de tercer nivel", - "H3_SAMPLE_TEXT": "Tu título aquí...", - "BOLD_BUTTON": "Negrita", - "BOLD_BUTTON_SAMPLE_TEXT": "Tu texto aquí...", - "ITALIC_BUTTON": "Cursiva", - "ITALIC_SAMPLE_TEXT": "Tu texto aquí...", - "STRIKE_BUTTON": "Tachado", - "STRIKE_SAMPLE_TEXT": "Tu texto aquí...", - "BULLETED_LIST_BUTTON": "Lista con viñetas", - "BULLETED_LIST_SAMPLE_TEXT": "Tu texto aquí...", - "NUMERIC_LIST_BUTTON": "Lista numérica", - "NUMERIC_LIST_SAMPLE_TEXT": "Tu texto aquí...", - "PICTURE_BUTTON": "Imagen", - "PICTURE_SAMPLE_TEXT": "Tu texto alternatívo para la imagen aquí...", - "LINK_BUTTON": "Enlace", - "LINK_SAMPLE_TEXT": "Tu texto del enlace aquí...", - "QUOTE_BLOCK_BUTTON": "Cita", - "QUOTE_BLOCK_SAMPLE_TEXT": "Tu texto aquí...", - "CODE_BLOCK_BUTTON": "Código", - "CODE_BLOCK_SAMPLE_TEXT": "Tu texto aquí...", - "PREVIEW_BUTTON": "Previsualizar", - "EDIT_BUTTON": "Editar", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Adjunte archivos arrastrando y soltando dentro del area de texto", "ATTACH_FILE_HELP_SAVE_FIRST": "Si desea guardar adjuntos guarde primero, luego arrastre y suelte los archivos en el area de texto mas arriba", "MARKDOWN_HELP": "Ayuda de sintaxis Markdown" @@ -1082,12 +1057,12 @@ "EXISTING_USERSTORY": "Historia de usuario existente", "CHOOSE_PROJECT_FOR_CREATION": "¿Qué es el proyecto?", "SUBJECT": "Asunto", - "SUBJECT_BULK_MODE": "Subject (bulk insert)", + "SUBJECT_BULK_MODE": "Tema (inserción masiva)", "CHOOSE_PROJECT_FROM": "¿Qué es el proyecto?", "CHOOSE_USERSTORY": "Cual es la historia de usuario?", "NO_USERSTORIES": "Este proyecto no tiene historias de usuario todavia. Por favor, seleccione otro proyecto.", "FILTER_USERSTORIES": "Filtrar historias de usuario", - "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", + "LIGHTBOX_TITLE_BLOKING_EPIC": "Bloqueo de épica", "ACTION_DELETE": "Borrar epic" }, "US": { @@ -1248,6 +1223,12 @@ "SHOW": "Mostrar etiquetas", "HIDE": "Ocultar etiquetas" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Historias de Usuario", "TITLE_COLUMN_POINTS": "Seleccionar vista por Rol" diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 0934d020..7861696c 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -41,7 +41,7 @@ "LOGOUT": "Kirjaudu ulos", "EXTERNAL_USER": "ulkoinen käyttäjä", "GENERIC_ERROR": "Oompa Loompas havaitsivat virheen {{error}}.", - "IOCAINE_TEXT": "Jos tehtävä ahdistaa, merkitse se myrkylliseksi. Ajan mittaa pieninä annoksina saattaa kastokykysi myrkkyä vastaan parantua.", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Project Owner", @@ -227,32 +227,7 @@ } }, "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", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Merkintätavan ohjeet" @@ -1248,6 +1223,12 @@ "SHOW": "Näytä avainsanat", "HIDE": "Piilota avainsanat" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Käyttäjätarinat", "TITLE_COLUMN_POINTS": "Valitse näkymä roolille" diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index d0828ad6..9f795344 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -41,7 +41,7 @@ "LOGOUT": "Déconnexion", "EXTERNAL_USER": "un utilisateur externe", "GENERIC_ERROR": "L'un de nos Oompa Loompas dit {{error}}.", - "IOCAINE_TEXT": "Vous vous sentez un peu submergé(e) par une tâche ? Soyez certains d'en informer les autres en cliquant sur 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 !", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Une exigence client est une nouvelle exigence exprimée par le client, qui n'était pas prévue dans le projet initial, et qu'il est nécessaire d'intégrer", "TEAM_REQUIREMENT": "Une exigence équipe est une exigence exprimée par l'équipe qui doit être rajoutée au projet, sans que cela n'ait d'impact pour le client", "OWNER": "Propriétaire du Projet", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "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": "Aperçu", - "EDIT_BUTTON": "Modifier", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Joindre des fichiers en glissant et déposant ceux-ci sur la zone de texte ci-dessus.", "ATTACH_FILE_HELP_SAVE_FIRST": "Enregistrez d'abord si vous voulez joindre des fichiers en glissant et déposant ceux-ci sur la zone de texte ci-dessus.", "MARKDOWN_HELP": "Aide sur la syntaxe Markdown" @@ -1111,15 +1086,15 @@ "NOT_ESTIMATED": "Non estimé", "TOTAL_US_POINTS": "Total des points RU", "TRIBE": { - "PUBLISH": "Publish as Gig in Taiga Tribe", + "PUBLISH": "Publier en tant que Gig sur Taiga Tribe ", "PUBLISH_INFO": "Plus d'informations", - "PUBLISH_TITLE": "More info on publishing in Taiga Tribe", - "PUBLISHED_AS_GIG": "Story published as Gig in Taiga Tribe", + "PUBLISH_TITLE": "Plus d'informations sur la publication dans Taiga Tribe", + "PUBLISHED_AS_GIG": "Histoire publiée comme Gig dans Taiga Tribe", "EDIT_LINK": "Modifier le lien", "CLOSE": "Fermer", - "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", + "SYNCHRONIZE_LINK": "se synchroniser avec Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Avez-vous besoin de quelqu'un pour cette tâche ?", - "PUBLISH_MORE_INFO_TEXT": "

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

    " + "PUBLISH_MORE_INFO_TEXT": "

    Si vous avez besoin d'aide pour un travail particulier, vous pouvez facilement créer des annonces sur Taiga Tribe et recevoir de l'aide de tout le monde. Vous serez en mesure de contrôler et de gérer l'annonce tout en bénéficiant d'une grande communauté désireuse d'aider. \n

    TaigaTribe est né en tant que frère de Taiga. Les deux plates-formes peuvent vivre séparément, mais comme nous croyons qu'il est très puissant de les utiliser ensemble, nous faisons en sorte que l'intégration fonctionne comme un charme. " }, "FIELDS": { "TEAM_REQUIREMENT": "Exigence équipe", @@ -1248,6 +1223,12 @@ "SHOW": "Montrer les mots-clés", "HIDE": "Cacher les mots-clés" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Récits utilisateur", "TITLE_COLUMN_POINTS": "Sélectionnez la vue par rôle" diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 1cb4430c..20e84ecb 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -41,7 +41,7 @@ "LOGOUT": "Esci", "EXTERNAL_USER": "un utente esterno", "GENERIC_ERROR": "C'é uno dei nostri Oompa Loompa che dice {{error}}.", - "IOCAINE_TEXT": "Sei stremato? Assicurati che gli altri lo sappiano cliccando su 'aspirina' quando stai lavorando su un compito che ti affatica. Ma non demordere, ricordati: si può migliorare solo se di tanto in tanto si accettano sfide extra!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Requisito del Cliente è un nuovo requisito che non era stato previsto ed ora è stato richiesto come requisito del progetto", "TEAM_REQUIREMENT": "Requisito del Team è un requisito che deve esistere nel progetto ma non deve avere costi per il cliente", "OWNER": "Proprietario Progetto", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "H1_BUTTON": "Intestazione di primo livello", - "H1_SAMPLE_TEXT": "Il titolo qui...", - "H2_BUTTON": "Intestazione di secondo livello", - "H2_SAMPLE_TEXT": "Il titolo qui...", - "H3_BUTTON": "Intestazione die terzo livello", - "H3_SAMPLE_TEXT": "Il titolo qui...", - "BOLD_BUTTON": "Grassetto", - "BOLD_BUTTON_SAMPLE_TEXT": "Inserire qui il testo...", - "ITALIC_BUTTON": "Italico", - "ITALIC_SAMPLE_TEXT": "Inserire qui il testo...", - "STRIKE_BUTTON": "Centro", - "STRIKE_SAMPLE_TEXT": "Inserire qui il testo...", - "BULLETED_LIST_BUTTON": "Elenco puntato", - "BULLETED_LIST_SAMPLE_TEXT": "Inserire qui il testo...", - "NUMERIC_LIST_BUTTON": "Elenco numerato", - "NUMERIC_LIST_SAMPLE_TEXT": "Inserire qui il testo...", - "PICTURE_BUTTON": "Foto", - "PICTURE_SAMPLE_TEXT": "Il testo per la tua foto qui...", - "LINK_BUTTON": "Link", - "LINK_SAMPLE_TEXT": "Qui il testo da linkare...", - "QUOTE_BLOCK_BUTTON": "Citazione", - "QUOTE_BLOCK_SAMPLE_TEXT": "Inserire qui il testo...", - "CODE_BLOCK_BUTTON": "Blocco di codice", - "CODE_BLOCK_SAMPLE_TEXT": "Inserire qui il testo...", - "PREVIEW_BUTTON": "Anteprima", - "EDIT_BUTTON": "Modifica", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Allega file trascinandoli nell'area qui sopra", "ATTACH_FILE_HELP_SAVE_FIRST": "Se vuoi allegare file trascinandoli nell'area qui sopra, prima salva", "MARKDOWN_HELP": "Aiuto per la sintassi Markdown" @@ -1248,6 +1223,12 @@ "SHOW": "Mostra tag", "HIDE": "Nascondi tag" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Storie Utente", "TITLE_COLUMN_POINTS": "Seleziona vista per Ruolo" diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index c87cd24b..26db9830 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -41,7 +41,7 @@ "LOGOUT": "Logg ut", "EXTERNAL_USER": "en ekstern bruker", "GENERIC_ERROR": "En av våre Oompa Loompaer sier {{error}}.", - "IOCAINE_TEXT": "Føler du deg litt overveldet av en oppgave? Sørg for at andre vet om det ved å klikke på \"Iocane\" når du redigerer en oppgave. Det er mulig å bli immun mot denne (fiktive) dødelige giften ved å konsumere små mengder over tid, akkurat som det er mulig å bli bedre på det du gjør ved av og til å ta på deg ekstra utfordringer!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Klientkravet er nytt krav som tidligere ikke var forventet, og det er nødt til å være en del av prosjektet", "TEAM_REQUIREMENT": "TeamBehov er et behov som må eksistere i prosjektet, men som ikke har noen kostnad for klienten", "OWNER": "Prosjekteier", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "H1_BUTTON": "Første Nivå Overskrift", - "H1_SAMPLE_TEXT": "Din tittel her...", - "H2_BUTTON": "Andre Nivå Overskrift", - "H2_SAMPLE_TEXT": "Din tittel her...", - "H3_BUTTON": "Tredje Nivå Overskrift", - "H3_SAMPLE_TEXT": "Din tittel her...", - "BOLD_BUTTON": "Fet", - "BOLD_BUTTON_SAMPLE_TEXT": "Din tekst her...", - "ITALIC_BUTTON": "Kursiv", - "ITALIC_SAMPLE_TEXT": "Din tekst her...", - "STRIKE_BUTTON": "Gjennomstrek", - "STRIKE_SAMPLE_TEXT": "Din tekst her...", - "BULLETED_LIST_BUTTON": "Punktliste", - "BULLETED_LIST_SAMPLE_TEXT": "Din tekst her...", - "NUMERIC_LIST_BUTTON": "Numerisk liste", - "NUMERIC_LIST_SAMPLE_TEXT": "Din tekst her...", - "PICTURE_BUTTON": "Bilde", - "PICTURE_SAMPLE_TEXT": "Din alternative tekst til bildet her...", - "LINK_BUTTON": "Lenke", - "LINK_SAMPLE_TEXT": "Din tekst til lenken her...", - "QUOTE_BLOCK_BUTTON": "Sitatblokk", - "QUOTE_BLOCK_SAMPLE_TEXT": "Din tekst her...", - "CODE_BLOCK_BUTTON": "Kodeblokk", - "CODE_BLOCK_SAMPLE_TEXT": "Din tekst her...", - "PREVIEW_BUTTON": "Forhåndsvisning", - "EDIT_BUTTON": "Endre", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Legg ved filer ved å dra og slippe på tekstområdet ovenfor.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Markdown syntaks hjelp" @@ -1248,6 +1223,12 @@ "SHOW": "Vis etiketter", "HIDE": "Skjul etiketter" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Brukerhistorie", "TITLE_COLUMN_POINTS": "Velg visning per Rolle" diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index 69990405..ddf329cf 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -41,7 +41,7 @@ "LOGOUT": "Afmelden", "EXTERNAL_USER": "een extern gebruiker", "GENERIC_ERROR": "Een van onze Oempa Loempa's zegt {{error}}.", - "IOCAINE_TEXT": "Voel je je wat overweldigd door een taak? Zorg ervoor dat anderen dit weten door op Iocaine te klikken bij het wijzigen van een taak. Je kan stapsgewijs immuun worden tegen dit (fictioneel) dodelijk gif door kleine dosissen op te nemen. Net zoals je beter kan worden in wat je doet door af en toe een extra uitdaging aan te gaan!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Project Owner", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "H1_BUTTON": "Eerste niveau heading", - "H1_SAMPLE_TEXT": "Jouw titel hier...", - "H2_BUTTON": "Kop tweede niveau", - "H2_SAMPLE_TEXT": "Jouw titel hier...", - "H3_BUTTON": "Kop derde nivea", - "H3_SAMPLE_TEXT": "Jouw titel hier...", - "BOLD_BUTTON": "Vet", - "BOLD_BUTTON_SAMPLE_TEXT": "Je tekst hier...", - "ITALIC_BUTTON": "Cursief", - "ITALIC_SAMPLE_TEXT": "Je tekst hier...", - "STRIKE_BUTTON": "Doorstreep", - "STRIKE_SAMPLE_TEXT": "Je tekst hier...", - "BULLETED_LIST_BUTTON": "Lijst met opsommingstekens", - "BULLETED_LIST_SAMPLE_TEXT": "Je tekst hier...", - "NUMERIC_LIST_BUTTON": "Nummerieke lijst", - "NUMERIC_LIST_SAMPLE_TEXT": "Je tekst hier...", - "PICTURE_BUTTON": "Foto", - "PICTURE_SAMPLE_TEXT": "Je alternatieve tekst voor afbeelding hier...", - "LINK_BUTTON": "Link", - "LINK_SAMPLE_TEXT": "Je tekst om te linken hier...", - "QUOTE_BLOCK_BUTTON": "Blokquote", - "QUOTE_BLOCK_SAMPLE_TEXT": "Je tekst hier...", - "CODE_BLOCK_BUTTON": "Code blok", - "CODE_BLOCK_SAMPLE_TEXT": "Je tekst hier...", - "PREVIEW_BUTTON": "Voorbeeld", - "EDIT_BUTTON": "Bewerk", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Markdown syntax help" @@ -1248,6 +1223,12 @@ "SHOW": "Toon tags", "HIDE": "Verberg tags" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "User Stories", "TITLE_COLUMN_POINTS": "Selecteer view per rol" diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index 46de1f6e..fec6575c 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -41,7 +41,7 @@ "LOGOUT": "Wyloguj", "EXTERNAL_USER": "zewnętrzny użytkownik", "GENERIC_ERROR": "Umpa Lumpa mówi {{error}}.", - "IOCAINE_TEXT": "Czujesz się trochę przytłoczony zadaniem? Daj znać innym klikając na ikonę Iokainy podczas edycji zadania. Jest szansa, że staniesz się odporny na tą (fikcyjną ;) ) śmiertelną truciznę biorąc małe dawki. Z pewnością jednak da Ci ona dodatkowego kopa, który pomoże w pokonaniu nowego wyzwania i staniu się lepszym w tym co robisz!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Project Owner", @@ -130,7 +130,7 @@ "ADD": "Dodaj tag" }, "DESCRIPTION": { - "EMPTY": "Puste miejsce jest takie nudne... opisz, przydaj sensu...", + "EMPTY": "Puste miejsce jest takie nudne... opisz, nadaj sensu...", "NO_DESCRIPTION": "Jeszcze bez opisu" }, "FIELDS": { @@ -165,7 +165,7 @@ "TOO_MANY": "...zbyt wielu użytkowników, filtruj dalej Umpa Lumpy nie ogarniają", "CONFIRM_UNASSIGNED": "Jesteś pewny, że chcesz pozostawić nieprzypisane?", "TITLE_ACTION_EDIT_ASSIGNMENT": "Edytuj przypisanie", - "SELF": "Assign to me" + "SELF": "Przypisz do mnie" }, "STATUS": { "CLOSED": "Zamknięte", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "H1_BUTTON": "Nagłówek pierwszego poziomu", - "H1_SAMPLE_TEXT": "Przykładowy tekst...", - "H2_BUTTON": "Nagłówek drugiego poziomu", - "H2_SAMPLE_TEXT": "Przykładowy tekst...", - "H3_BUTTON": "Nagłówek trzeciego poziomu", - "H3_SAMPLE_TEXT": "Przykładowy tekst...", - "BOLD_BUTTON": "Pogrubienie", - "BOLD_BUTTON_SAMPLE_TEXT": "Przykładowy tekst...", - "ITALIC_BUTTON": "Kursywa", - "ITALIC_SAMPLE_TEXT": "Przykładowy tekst...", - "STRIKE_BUTTON": "Przekreślenie", - "STRIKE_SAMPLE_TEXT": "Przykładowy tekst...", - "BULLETED_LIST_BUTTON": "Lista", - "BULLETED_LIST_SAMPLE_TEXT": "Przykładowy tekst...", - "NUMERIC_LIST_BUTTON": "Lista Numerowana", - "NUMERIC_LIST_SAMPLE_TEXT": "Przykładowy tekst...", - "PICTURE_BUTTON": "Obraz", - "PICTURE_SAMPLE_TEXT": "Tekst alternatywny dla obrazka...", - "LINK_BUTTON": "Link", - "LINK_SAMPLE_TEXT": "Twój tekst do linku...", - "QUOTE_BLOCK_BUTTON": "Cytat", - "QUOTE_BLOCK_SAMPLE_TEXT": "Przykładowy tekst...", - "CODE_BLOCK_BUTTON": "Blok Kodu", - "CODE_BLOCK_SAMPLE_TEXT": "Przykładowy tekst...", - "PREVIEW_BUTTON": "Podgląd", - "EDIT_BUTTON": "Edycja", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Składnia Markdown pomoc" @@ -718,7 +693,7 @@ "CANCEL_TITLE": "Anuluj tworzenie", "SET_FIELD_NAME": "podaj nazwę pola", "SET_FIELD_DESCRIPTION": "podaj opis pola", - "FIELD_TYPE_DEFAULT": "-- select one --", + "FIELD_TYPE_DEFAULT": "-- wybierz --", "ACTION_UPDATE": "Aktualizuj pole", "ACTION_CANCEL_EDITION": "Anuluj edycję" }, @@ -807,7 +782,7 @@ "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CHANGE_MY_PLAN": "Zmień mój plan" } }, "USER": { @@ -828,7 +803,7 @@ "ACTIVITY_TAB_TITLE": "Wyświetl całą aktywność użytkownika", "PROJECTS_TAB": "Projekty", "PROJECTS_TAB_TITLE": "Lista wszystkich projektów, do których należy użytkownik", - "LIKES_TAB": "Likes", + "LIKES_TAB": "Polubienia", "LIKES_TAB_TITLE": "List all likes made by this user", "VOTES_TAB": "Głosy", "VOTES_TAB_TITLE": "List all votes made by this user", @@ -1065,7 +1040,7 @@ } }, "CHANGE_OWNER": { - "TITLE": "Who do you want to be the new project owner?", + "TITLE": "Kto ma być nowym właścicielem projektu?", "ADD_COMMENT": "Add comment", "BUTTON": "Ask this project member to become the new project owner" } @@ -1079,11 +1054,11 @@ "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", "CREATE_RELATED_USERSTORIES": "Stwórz relację z", "NEW_USERSTORY": "Nowa historyjka użytkownika", - "EXISTING_USERSTORY": "Existing user story", - "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", + "EXISTING_USERSTORY": "Istniejąca historia użytkownika", + "CHOOSE_PROJECT_FOR_CREATION": "Co to za projekt?", "SUBJECT": "Temat", "SUBJECT_BULK_MODE": "Subject (bulk insert)", - "CHOOSE_PROJECT_FROM": "What's the project?", + "CHOOSE_PROJECT_FROM": "Co to za projekt?", "CHOOSE_USERSTORY": "What's the user story?", "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", "FILTER_USERSTORIES": "Filter user stories", @@ -1130,7 +1105,7 @@ "COMMENTS": { "DELETED_INFO": "Komentarz usunięty przez {{user}}", "TITLE": "Komentarze", - "COMMENTS_COUNT": "{{comments}} Comments", + "COMMENTS_COUNT": "{{comments}} Komentarze", "ORDER": "Order", "OLDER_FIRST": "Starsze najpierw", "RECENT_FIRST": "Ostatnie najpierw", @@ -1248,6 +1223,12 @@ "SHOW": "Pokaż tagi", "HIDE": "Ukryj tagi" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Historyjki użytkownika", "TITLE_COLUMN_POINTS": "Widok według ról" @@ -1524,8 +1505,8 @@ "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", + "PUBLIC_PROJECT": "Projekt publiczny", + "PRIVATE_PROJECT": "Projekt prywatny", "CREATE_PROJECT": "Utwórz projekt", "MAX_PRIVATE_PROJECTS": "Osiągnąłeś maksymalną liczbę prywatnych projektów", "MAX_PUBLIC_PROJECTS": "Niestety osiągnąłeś maksymalną liczbę publicznych projektów", @@ -1550,9 +1531,9 @@ "LAST_EDIT": "ostatnia
    edycja", "LAST_MODIFICATION": "ostatnia modyfikacja" }, - "SECTION_PAGES_LIST": "All pages", + "SECTION_PAGES_LIST": "Wszystkie strony", "PAGES_LIST_COLUMNS": { - "TITLE": "Title", + "TITLE": "Tytuł", "EDITIONS": "Editions", "CREATED": "Utworzone", "MODIFIED": "Modified", @@ -1645,7 +1626,7 @@ "STEP4": { "TITLE": "Zaczynajmy", "TEXT1": "Możesz zacząć od stworzenia swojego pierwszego projektu w Taiga.", - "TEXT2": "Good luck!" + "TEXT2": "Powodzenia!" } }, "BACKLOG": { @@ -1679,7 +1660,7 @@ "STEP3": { "TITLE": "Dodawanie Historyjek Użytkownika", "TEXT1": "You may want to add a single User Story (add US icon) or a group of them (bulk icon)", - "TEXT2": "Good luck!" + "TEXT2": "Powodzenia!" } } }, @@ -1690,7 +1671,7 @@ "DISCOVER_SUBTITLE": "{projects, plural, one{One public project to discover} other{# public projects to discover}}", "MOST_ACTIVE": "Most active", "MOST_ACTIVE_EMPTY": "There are no ACTIVE projects yet", - "MOST_LIKED": "Most liked", + "MOST_LIKED": "Najbardziej lubiane", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", "RECRUITING": "Ten projekt szuka ludzi", @@ -1702,8 +1683,8 @@ "SCRUM": "Scrum", "PEOPLE": "Looking for people", "WEEK": "Last week", - "MONTH": "Last month", - "YEAR": "Last year", + "MONTH": "Ostatni miesiąc", + "YEAR": "Ostatni rok", "ALL_TIME": "All time", "CLEAR": "Clear filters" }, diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index 20f236ce..e06b22eb 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -11,7 +11,7 @@ "CANCEL": "Cancelar", "ACCEPT": "Aceitar", "DELETE": "Apagar", - "UNLINK": "Unlink", + "UNLINK": "Separar", "CREATE": "Criar", "ADD": "Adicionar", "COPY_TO_CLIPBOARD": "Copiar para a área de transferência: Ctrl+C", @@ -41,17 +41,17 @@ "LOGOUT": "Sair", "EXTERNAL_USER": "um usuário externo", "GENERIC_ERROR": "Um Oompa Loompas disse {{error}}.", - "IOCAINE_TEXT": "Se sentindo sobrecarregado por uma tarefa? Assegure-se de que os outros saibam disso clicando em Iocaine quando estiver editando a tarefa. É possível se tornar imune a essse veneno mortal (fictício) consumindo pequenas quantidades ao longo do tempo, assim como é possível ficar melhor no que faz, ocasionalmente, por assumir desafios extras!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Requisito de cliente é um novo requisito que não foi anteriormente previsto e que necessita se tornar uma parte do projeto.", "TEAM_REQUIREMENT": "Requisito de time é um requisito que deve existir no projeto, mas que não deve ter nenhum custo para o cliente.", "OWNER": "Dono do Projeto", "CAPSLOCK_WARNING": "Seja cuidadoso! Você está escrevendo em letras maiúsculas e esse campo é case sensitive, ou seja, trata com distinção as letras maiúsculas das minúsculas.", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Você tem certeza que quer fechar o modo de edição?", "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Lembre-se que se você fechar o modo de edição sem salvar, todas as mudanças serão perdidas", - "RELATED_USERSTORIES": "Related user stories", + "RELATED_USERSTORIES": "Histórias de usuário relacionadas", "CARD": { - "ASSIGN_TO": "Assign To", - "EDIT": "Edit card" + "ASSIGN_TO": "Atribuir a", + "EDIT": "Editar cartão" }, "FORM_ERRORS": { "DEFAULT_MESSAGE": "Este valor parece ser inválido.", @@ -125,7 +125,7 @@ "ISSUE": "Problema", "EPIC": "Épico", "TAGS": { - "PLACEHOLDER": "Enter tag", + "PLACEHOLDER": "Inserir tag", "DELETE": "Apagar tag", "ADD": "Adicionar tag" }, @@ -199,7 +199,7 @@ "SAVE": "Salvar Campo Personalizado", "EDIT": "Editar Campo Personalizado", "DELETE": "Apagar atributo personalizado", - "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?" + "CONFIRM_DELETE": "Lembre-se que todos os valores neste campo customizado serão deletados.\nVocê tem certeza que quer continuar?" }, "FILTERS": { "TITLE": "Filtros", @@ -209,7 +209,7 @@ "TITLE_ACTION_SEARCH": "Procurar", "ACTION_SAVE_CUSTOM_FILTER": "salve como filtro personalizado", "PLACEHOLDER_FILTER_NAME": "Digite o nome do filtro e pressione Enter", - "APPLIED_FILTERS_NUM": "filters applied", + "APPLIED_FILTERS_NUM": "filtros aplicados", "CATEGORIES": { "TYPE": "Tipo", "STATUS": "Status", @@ -227,44 +227,19 @@ } }, "WYSIWYG": { - "H1_BUTTON": "Primeira caixa de cabeçalho", - "H1_SAMPLE_TEXT": "Seu título aqui...", - "H2_BUTTON": "Segundo caixa de cabeçalho", - "H2_SAMPLE_TEXT": "Seu título aqui...", - "H3_BUTTON": "Terceira caixa de cabeçalho", - "H3_SAMPLE_TEXT": "Seu título aqui...", - "BOLD_BUTTON": "Negrito", - "BOLD_BUTTON_SAMPLE_TEXT": "Seu texto aqui...", - "ITALIC_BUTTON": "Itálico", - "ITALIC_SAMPLE_TEXT": "Seu texto aqui...", - "STRIKE_BUTTON": "Riscar", - "STRIKE_SAMPLE_TEXT": "Seu texto aqui...", - "BULLETED_LIST_BUTTON": "Lista de marcadores", - "BULLETED_LIST_SAMPLE_TEXT": "Seu texto aqui...", - "NUMERIC_LIST_BUTTON": "Lista numérica", - "NUMERIC_LIST_SAMPLE_TEXT": "Seu texto aqui...", - "PICTURE_BUTTON": "Imagem", - "PICTURE_SAMPLE_TEXT": "Seu texto alternativo para a imagem aqui...", - "LINK_BUTTON": "Link", - "LINK_SAMPLE_TEXT": "Seu texto para o link vai aqui...", - "QUOTE_BLOCK_BUTTON": "Bloco de citação", - "QUOTE_BLOCK_SAMPLE_TEXT": "Seu texto aqui...", - "CODE_BLOCK_BUTTON": "Bloco de código", - "CODE_BLOCK_SAMPLE_TEXT": "Seu texto aqui...", - "PREVIEW_BUTTON": "Pré Visualizar", - "EDIT_BUTTON": "Editar", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Anexe arquivos arrastando e soltando na área de texto acima.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Salve os arquivos primeiro se você quiser anexar arquivos arrastando e soltando na área de texto acima.", "MARKDOWN_HELP": "Ajuda de sintaxe markdown" }, "PERMISIONS_CATEGORIES": { "EPICS": { "NAME": "Épicos", - "VIEW_EPICS": "View epics", - "ADD_EPICS": "Add epics", - "MODIFY_EPICS": "Modify epics", - "COMMENT_EPICS": "Comment epics", - "DELETE_EPICS": "Delete epics" + "VIEW_EPICS": "Ver épicos", + "ADD_EPICS": "Adicionar épicos", + "MODIFY_EPICS": "Modificar épicos", + "COMMENT_EPICS": "Comentar épicos", + "DELETE_EPICS": "Deletar épicos" }, "SPRINTS": { "NAME": "Sprints", @@ -286,7 +261,7 @@ "VIEW_TASKS": "Ver tarefas", "ADD_TASKS": "Adicionar uma nova Tarefa", "MODIFY_TASKS": "Modificar tarefa", - "COMMENT_TASKS": "Comment tasks", + "COMMENT_TASKS": "Comentar tarefas", "DELETE_TASKS": "Apagar tarefas" }, "ISSUES": { @@ -294,7 +269,7 @@ "VIEW_ISSUES": "Ver problemas", "ADD_ISSUES": "Adicionar problemas", "MODIFY_ISSUES": "Modificar problemas", - "COMMENT_ISSUES": "Comment issues", + "COMMENT_ISSUES": "Comentar problemas", "DELETE_ISSUES": "Apagar problemas" }, "WIKI": { @@ -408,15 +383,15 @@ "TITLE": "ÉPICOS", "SECTION_NAME": "Épicos", "EPIC": "ÉPICO", - "PAGE_TITLE": "Epics - {{projectName}}", - "PAGE_DESCRIPTION": "The epics list of the project {{projectName}}: {{projectDescription}}", + "PAGE_TITLE": "Épico - {{projectName}}", + "PAGE_DESCRIPTION": "A lista de épicos do projeto {{projectName}}: {{projectDescription}}", "DASHBOARD": { "ADD": "+ ADICIONAR ÉPICO", "UNASSIGNED": "Não-atribuído" }, "EMPTY": { - "TITLE": "It looks like there aren't any epics yet", - "EXPLANATION": "Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.", + "TITLE": "Parece que não há nenhum épico ainda", + "EXPLANATION": "Épicos são itens em um nível mais alto que contêm histórias de usuário.
    Épicos são o topo da hierarquia e podem ser usados para agrupar histórias.", "HELP": "Saiba mais sobre épicos" }, "TABLE": { @@ -424,16 +399,16 @@ "NAME": "Nome", "PROJECT": "Projeto", "SPRINT": "Sprint", - "ASSIGNED_TO": "Assigned", + "ASSIGNED_TO": "Atribuído", "STATUS": "Status", "PROGRESS": "Progresso", "VIEW_OPTIONS": "Ver opções" }, "CREATE": { "TITLE": "Novo Épico", - "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", - "TEAM_REQUIREMENT": "Team requirement", - "CLIENT_REQUIREMENT": "Client requirement", + "PLACEHOLDER_DESCRIPTION": "Por favor, adicione um texto descritivo para ajudar outras pessoas a entenderem melhor este épico", + "TEAM_REQUIREMENT": "Requisitos da equipe", + "CLIENT_REQUIREMENT": "Requisitos do cliente", "BLOCKED": "Bloqueado", "BLOCKED_NOTE_PLACEHOLDER": "Por que esse épico está bloqueado?", "CREATE_EPIC": "Criar épico" @@ -510,7 +485,7 @@ "ENABLE": "Habilitar", "DISABLE": "Desabilitar", "EPICS": "Épicos", - "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", + "EPICS_DESCRIPTION": "Visualize e gerencie a parte mais estratégica do seu projeto", "BACKLOG": "Backlog", "BACKLOG_DESCRIPTION": "Gerencie suas histórias de usuários para manter uma visualização organizada de trabalhos futuros e priorizados.", "NUMBER_SPRINTS": "Número de sprints esperadas", @@ -562,7 +537,7 @@ "REQUEST_OWNERSHIP_SUCCESS": "Vamos notificar o dono do projeto", "CHANGE_OWNER": "Mudar dono", "CHANGE_OWNER_SUCCESS_TITLE": "Ok, sua requisição foi enviada!", - "CHANGE_OWNER_SUCCESS_DESC": "We will notify you by email if the project ownership request is accepted or declined" + "CHANGE_OWNER_SUCCESS_DESC": "Nós notificaremos você por email se a requisição de propriedade do projeto for aceita ou recusada" }, "REPORTS": { "TITLE": "Relatórios", @@ -573,7 +548,7 @@ "REGENERATE_SUBTITLE": "Você está prestes a alterar a url de acesso a dados do CSV. A URL anterior será desabilitada. Você está certo disso?" }, "CSV": { - "SECTION_TITLE_EPIC": "epics reports", + "SECTION_TITLE_EPIC": "relatórios de épicos", "SECTION_TITLE_US": "Relatórios de histórias de usuários", "SECTION_TITLE_TASK": "relatórios de tarefas", "SECTION_TITLE_ISSUE": "relatórios de problemas", @@ -586,8 +561,8 @@ "CUSTOM_FIELDS": { "TITLE": "Campos Personalizados", "SUBTITLE": "Especificar campos personalizados para histórias de usuários, tarefas e problemas", - "EPIC_DESCRIPTION": "Epics custom fields", - "EPIC_ADD": "Add a custom field in epics", + "EPIC_DESCRIPTION": "Campos personalizados dos épicos", + "EPIC_ADD": "Adicionar campos personalizados em épicos", "US_DESCRIPTION": "Campos personalizados das histórias de usuários", "US_ADD": "Adicionar campo personalizado nas histórias de usuários", "TASK_DESCRIPTION": "Campos personalizados das Tarefas", @@ -625,8 +600,8 @@ "PROJECT_VALUES_STATUS": { "TITLE": "Status", "SUBTITLE": "Especifique os status pelos quais suas histórias de usuários, tarefas e problemas passarão", - "EPIC_TITLE": "Epic Statuses", - "US_TITLE": "User Story Statuses", + "EPIC_TITLE": "Estados do Épico", + "US_TITLE": "Status de história de usuário", "TASK_TITLE": "Estados da Tarefa", "ISSUE_TITLE": "Estados do problema" }, @@ -638,7 +613,7 @@ }, "PROJECT_VALUES_TAGS": { "TITLE": "Tags", - "SUBTITLE": "View and edit the color of your tags", + "SUBTITLE": "Ver e editar as cores das suas tags", "EMPTY": "Atualmente não há tags", "EMPTY_SEARCH": "Parece que nada foi encontrado com os critérios de sua pesquisa.", "ACTION_ADD": "Adicionar tag", @@ -738,8 +713,8 @@ "DEFAULT_DELETE_MESSAGE": "o convite para {{email}}" }, "DEFAULT_VALUES": { - "LABEL_EPIC_STATUS": "Default value for epic status selector", - "LABEL_US_STATUS": "Default value for user story status selector", + "LABEL_EPIC_STATUS": "Valor padrão para seletor de status de épico", + "LABEL_US_STATUS": "Valor padrão para seletor de status da história de usuário", "LABEL_POINTS": "Valores padrões para o seletor de pontos", "LABEL_TASK_STATUS": "Valor padrão para seletor de status de tarefa", "LABEL_ISSUE_TYPE": "Valor padrão para seletor de tipo de problema ", @@ -799,14 +774,14 @@ "REJECTED_PROJECT_OWNERNSHIP": "OK. Entraremos em contato com o atual dono do projeto.", "ACCEPT": "Aceitar", "REJECT": "Rejeitar", - "PROPOSE_OWNERSHIP": "{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.", - "ADD_COMMENT": "Would you like to add a comment for the project owner?", + "PROPOSE_OWNERSHIP": "{{owner}}, o atual dono do projeto {{project}} te pediu para ser o novo dono do projeto.", + "ADD_COMMENT": "Você gostaria de adicionar um comentário para o dono do projeto?", "UNLIMITED_PROJECTS": "Ilimitado", "OWNER_MESSAGE": { - "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", - "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" + "PRIVATE": "Por favor, lembre-se que você pode ser dono de até {{maxProjects}} projetos privados. Você, atualmente, é dono de {{currentProjects}} projetos privados", + "PUBLIC": "Por favor, lembre-se que você pode ser dono de até {{maxProjects}} projetos públicos. Você, atualmente, é dono de {{currentProjects}} projetos públicos" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", + "CANT_BE_OWNED": "No momento, você não pode se tornar dono de um projeto desse tipo. Se você quiser se tornar dono desse projeto, por favor, entre em contato com os administradores para mudarem as configurações da sua conta para habilitar a propriedade do projeto.", "CHANGE_MY_PLAN": "Mudar meu plano" } }, @@ -850,7 +825,7 @@ "FILTER_TYPE_PROJECTS": "Projetos", "FILTER_TYPE_PROJECT_TITLES": "Mostrar somente projetos", "FILTER_TYPE_EPICS": "Épicos", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPIC_TITLES": "Mostrar somente épicos", "FILTER_TYPE_USER_STORIES": "Histórias", "FILTER_TYPE_USER_STORIES_TITLES": "Mostrar apenas histórias de usuários", "FILTER_TYPE_TASKS": "Tarefas", @@ -940,26 +915,26 @@ "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "O projeto que você está tentando importar tem {{members}} membros e infelizmente seu plano atual tem um limite máximo de {{max_memberships}} membros por projeto. Se você deseja aumentar este limite entre em contato com o administrador.", "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + "TITLE": "Infelizmente, seu plano atual não permite projetos privados adicionais.", + "DESC": "O projeto que você está tentando importar é privado. Infelizmente, seu plano plano atual não permite projetos privados adicionais." }, "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + "TITLE": "Infelizmente, seu plano atual não permite projetos públicos adicionais.", + "DESC": "O projeto que você está tentando importar é público. Infelizmente, seu plano plano atual não permite projetos públicos adicionais." }, "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + "TITLE": "Seu plano atual permite um máximo de {{max_memberships}} membros por projeto privado" }, "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + "TITLE": "Seu plano atual permite um máximo de {{max_memberships}} membros por projeto público." }, "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "TITLE": "Infelizmente, seu plano atual não permite projetos privados adicionais ou um aumento de mais de {{max_memberships}} membros por projeto privado.", "DESC": "O projeto que você está tentando importar é privado e tem {{members}} membros." }, "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." + "TITLE": "Infelizmente, seu plano atual não permite projetos públicos adicionais ou um aumento de mais de {{max_memberships}} membros por projeto público.", + "DESC": "O projeto que você está tentando importar é público e tem mais que {{members}} membros." } } }, @@ -1050,8 +1025,8 @@ "CREATE_MEMBER": { "PLACEHOLDER_INVITATION_TEXT": "(Opcional) Adicione uma mensagem de texto ao convite. Diga algo animador para os novos membros ;-)", "PLACEHOLDER_TYPE_EMAIL": "Digite um Email", - "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.", - "LIMIT_USERS_WARNING_MESSAGE": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members." + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "Você está próximo de atingir o número máximo de membros permitidos para este projeto, {{maxMembers}} membros. Se você deseja aumentar este limite, por favor entre em contato com o administrador.", + "LIMIT_USERS_WARNING_MESSAGE": "Você está próximo de atingir o número máximo de membros permitidos para este projeto, {{maxMembers}} membros." }, "LEAVE_PROJECT_WARNING": { "TITLE": "Infelizmente, este projeto não pode ficar sem um dono", @@ -1071,24 +1046,24 @@ } }, "EPIC": { - "PAGE_TITLE": "{{epicSubject}} - Epic {{epicRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", + "PAGE_TITLE": "{{epicSubject}} - Épico {{epicRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "Estado: {{epicStatus }}. Descrição: {{epicDescription}}", "SECTION_NAME": "Épico", - "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", - "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", - "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", - "CREATE_RELATED_USERSTORIES": "Create a relationship with", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Separar história de usuário relacionada", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Excluirá a ligação para a história de usuário relacionada '{{subject}}'", + "ERROR_UNLINK_RELATED_USERSTORY": "Não fomos capazes de separar: {{errorMessage}}", + "CREATE_RELATED_USERSTORIES": "Criar um relacionamento com", "NEW_USERSTORY": "Nova história de usuário", - "EXISTING_USERSTORY": "Existing user story", - "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", + "EXISTING_USERSTORY": "História de usuário existente", + "CHOOSE_PROJECT_FOR_CREATION": "Qual é o projeto?", "SUBJECT": "Assunto", - "SUBJECT_BULK_MODE": "Subject (bulk insert)", - "CHOOSE_PROJECT_FROM": "What's the project?", - "CHOOSE_USERSTORY": "What's the user story?", - "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", - "FILTER_USERSTORIES": "Filter user stories", - "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", - "ACTION_DELETE": "Delete epic" + "SUBJECT_BULK_MODE": "Sujeito (inserção em lote)", + "CHOOSE_PROJECT_FROM": "Qual é o projeto?", + "CHOOSE_USERSTORY": "Qual é a história de usuário?", + "NO_USERSTORIES": "Esse projeto ainda não possui Histórias de Usuário. Por favor, selecione outro projeto.", + "FILTER_USERSTORIES": "Filtrar histórias de usuário", + "LIGHTBOX_TITLE_BLOKING_EPIC": "Épico bloqueador", + "ACTION_DELETE": "Apagar épico" }, "US": { "PAGE_TITLE": "{{userStorySubject}} - História de Usuário {{userStoryRef}} - {{projectName}}", @@ -1200,7 +1175,7 @@ "TAGS": "tags", "ATTACHMENTS": "anexos", "IS_DEPRECATED": "está obsoleto", - "IS_NOT_DEPRECATED": "is not deprecated", + "IS_NOT_DEPRECATED": "não está obsoleto", "ORDER": "ordem", "BACKLOG_ORDER": "requisição do backlog", "SPRINT_ORDER": "ordem de sprint ", @@ -1248,6 +1223,12 @@ "SHOW": "Exibir tags", "HIDE": "Esconder tags" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Histórias de Usuários", "TITLE_COLUMN_POINTS": "Selecionar exibição por função" @@ -1260,7 +1241,7 @@ "IOCAINE_DOSES": "iocaine
    doses", "SHOW_STATISTICS_TITLE": "Mostrar estatísticas", "TOGGLE_BAKLOG_GRAPH": "Mostrar/Esconder gráfico de burndown", - "POINTS_PER_ROLE": "Points per role" + "POINTS_PER_ROLE": "Pontos por regra" }, "SUMMARY": { "PROJECT_POINTS": "pontos do
    projeto", @@ -1527,9 +1508,9 @@ "PUBLIC_PROJECT": "Projeto Público", "PRIVATE_PROJECT": "Projeto Privado", "CREATE_PROJECT": "Criar projeto", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PRIVATE_PROJECTS": "Você atingiu o número máximo de projetos privados", "MAX_PUBLIC_PROJECTS": "Infelizmente, você atingiu o número máximo de projetos públicos", - "CHANGE_PLANS": "change plans" + "CHANGE_PLANS": "mudar planos" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", @@ -1541,8 +1522,8 @@ "DELETE_LINK_TITLE": "Remover link de Wiki", "NAVIGATION": { "HOME": "Página principal", - "SECTION_NAME": "BOOKMARKS", - "ACTION_ADD_LINK": "Add bookmark", + "SECTION_NAME": "MARCADORES", + "ACTION_ADD_LINK": "Adicionar marcador", "ALL_PAGES": "Todas as páginas wiki" }, "SUMMARY": { @@ -1569,7 +1550,7 @@ "HINT2_TITLE": "Você sabia que pode criar campos personalizados?", "HINT2_TEXT": "Equipes agora podem personalizar campos, um jeito flexível de inserir dados específicos para uso em seu próprio fluxo de trabalho.", "HINT3_TITLE": "Reordene seus projetos para evidenciar os mais relevantes para você.", - "HINT3_TEXT": "The 10 projects are listed in the direct access bar at the top.", + "HINT3_TEXT": "Os 10 projetos estão listados na barra de acesso direto, no topo.", "HINT4_TITLE": "Você esqueceu onde está trabalhando?", "HINT4_TEXT": "Não se preocupe, no seu painel você vai encontrar suas tarefas abertas, problemas, e histórias de usuários na ordem em que você trabalhou nelas." }, @@ -1581,8 +1562,8 @@ "TASK_CREATED_WITH_US": "{{username}} criou nova tarefa {{obj_name}} em {{project_name}} que pertence a História de Usuário {{us_name}}", "WIKI_CREATED": "{{username}} criou uma página wiki {{obj_name}} em {{project_name}}", "MILESTONE_CREATED": "{{username}} criou uma nova sprint {{obj_name}} em {{project_name}}", - "EPIC_CREATED": "{{username}} has created a new epic {{obj_name}} in {{project_name}}", - "EPIC_RELATED_USERSTORY_CREATED": "{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}", + "EPIC_CREATED": "{{username}} criou um novo épico {{obj_name}} em {{project_name}}", + "EPIC_RELATED_USERSTORY_CREATED": "{{username}} relacionou a história de usuário {{related_us_name}} ao épico {{epic_name}} em {{project_name}}", "NEW_PROJECT": "{{username}} criou o projeto {{project_name}}", "MILESTONE_UPDATED": "{{username}} atualizou a sprint {{obj_name}}", "US_UPDATED": "{{username}} atualizou o atributo \"{{field_name}}\" da História de Usuário {{obj_name}}", @@ -1595,13 +1576,13 @@ "TASK_UPDATED_WITH_US": "{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} que pertence à História de Usuário {{us_name}}", "TASK_UPDATED_WITH_US_NEW_VALUE": "{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} que pertence à História de Usuário {{us_name}} para {{new_value}}", "WIKI_UPDATED": "{{username}} atualizou a página wiki {{obj_name}}", - "EPIC_UPDATED": "{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}", - "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}", - "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ", + "EPIC_UPDATED": "{{username}} atualizou o atributo \"{{field_name}}\" do épico {{obj_name}}", + "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} atualizou o atributo \"{{field_name}}\" do épico {{obj_name}} para {{new_value}}", + "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} atualizou o \"{{field_name}}\" do épico {{obj_name}} para ", "NEW_COMMENT_US": "{{username}} comentou na História de Usuário {{obj_name}}", "NEW_COMMENT_ISSUE": "{{username}} comentou no problema {{obj_name}}", "NEW_COMMENT_TASK": "{{username}} comentou na tarefa {{obj_name}}", - "NEW_COMMENT_EPIC": "{{username}} has commented in the epic {{obj_name}}", + "NEW_COMMENT_EPIC": "{{username}} comentou no épico {{obj_name}}", "NEW_MEMBER": "{{project_name}} tem um membro novo", "US_ADDED_MILESTONE": "{{username}} adicionou a História de Usuário {{obj_name}} a {{sprint_name}}", "US_MOVED": "{{username}} moveu a História de Usuário {{obj_name}}", @@ -1694,7 +1675,7 @@ "MOST_LIKED_EMPTY": "Não existe projetos curtidos ainda", "VIEW_MORE": "Visualizar mais", "RECRUITING": "Este projeto esta procurando colaboradores", - "FEATURED": "Featured Projects", + "FEATURED": "Projetos em destaque", "EMPTY": "Não há projetos para exibir sob esse critério de pesquisa.
    Tente novamente!", "FILTERS": { "ALL": "Tudo", diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index fa49835a..415a3923 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -11,7 +11,7 @@ "CANCEL": "Отмена", "ACCEPT": "Принимаю", "DELETE": "Удалить", - "UNLINK": "Unlink", + "UNLINK": "Отсоединить", "CREATE": "Создать", "ADD": "Добавить", "COPY_TO_CLIPBOARD": "Копировать: Ctrl+C", @@ -41,14 +41,14 @@ "LOGOUT": "Выйти", "EXTERNAL_USER": "внешний пользователь", "GENERIC_ERROR": "Один из Умпа-Лумп говорит {{error}}.", - "IOCAINE_TEXT": "Чувствуете, что задание берет верх над вами? Дайте другим знать об этом, нажав на \"Иокаин\", когда редактируете задание. Возможно стать неуязвимым к этому (выдуманному) смертельном яду, потребляя небольшие количества время от времени, так же как возможно стать лучше в том, что вы делаете, временами беря на себя дополнительные препятствия!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Владелец проекта", "CAPSLOCK_WARNING": "Be careful! You are using capital letters in an input field that is case sensitive.", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "Are you sure you want to close the edit mode?", "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Remember that if you close the edit mode without saving all the changes will be lost", - "RELATED_USERSTORIES": "Related user stories", + "RELATED_USERSTORIES": "Связанные пользовательские истории", "CARD": { "ASSIGN_TO": "Assign To", "EDIT": "Edit card" @@ -125,7 +125,7 @@ "ISSUE": "Запрос", "EPIC": "Epic", "TAGS": { - "PLACEHOLDER": "Enter tag", + "PLACEHOLDER": "Ввести тэг", "DELETE": "Удалить тэг", "ADD": "Добавить тэг" }, @@ -227,32 +227,7 @@ } }, "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_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": "Редактировать", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Помощь по синтаксису Markdown" @@ -260,11 +235,11 @@ "PERMISIONS_CATEGORIES": { "EPICS": { "NAME": "Epics", - "VIEW_EPICS": "View epics", - "ADD_EPICS": "Add epics", - "MODIFY_EPICS": "Modify epics", + "VIEW_EPICS": "Посмотреть эпосы", + "ADD_EPICS": "Добавить эпосы", + "MODIFY_EPICS": "Изменить эпосы", "COMMENT_EPICS": "Comment epics", - "DELETE_EPICS": "Delete epics" + "DELETE_EPICS": "Удалить эпосы" }, "SPRINTS": { "NAME": "Спринты", @@ -408,15 +383,15 @@ "TITLE": "EPICS", "SECTION_NAME": "Epics", "EPIC": "EPIC", - "PAGE_TITLE": "Epics - {{projectName}}", - "PAGE_DESCRIPTION": "The epics list of the project {{projectName}}: {{projectDescription}}", + "PAGE_TITLE": "Эпосы - {{projectName}}", + "PAGE_DESCRIPTION": "Список эпосов этого проекта {{projectName}}: {{projectDescription}}", "DASHBOARD": { "ADD": "+ ADD EPIC", "UNASSIGNED": "Не назначено" }, "EMPTY": { - "TITLE": "It looks like there aren't any epics yet", - "EXPLANATION": "Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.", + "TITLE": "Похоже, здесь пока нет ни одного эпоса ", + "EXPLANATION": "Эпосы - это сущности высокого уровня, которые направляют пользовательские истории.
    Эпосы находятся на вершине иерархии и могут быть использованы, чтобы связывать вместе пользовательские истории.", "HELP": "Learn more about epics" }, "TABLE": { @@ -431,7 +406,7 @@ }, "CREATE": { "TITLE": "New Epic", - "PLACEHOLDER_DESCRIPTION": "Please add descriptive text to help others better understand this epic", + "PLACEHOLDER_DESCRIPTION": "Пожалуйста, добавьте описание, чтобы другие лучше поняли этот эпос", "TEAM_REQUIREMENT": "Team requirement", "CLIENT_REQUIREMENT": "Client requirement", "BLOCKED": "Заблокирован", @@ -573,7 +548,7 @@ "REGENERATE_SUBTITLE": "Вы собираетесь изменить ссылку доступа к данным CSV. Прежний вариант ссылки перестанет работать. Вы уверены?" }, "CSV": { - "SECTION_TITLE_EPIC": "epics reports", + "SECTION_TITLE_EPIC": "отчёты о эпосах", "SECTION_TITLE_US": "Отчёты по пользовательским историям", "SECTION_TITLE_TASK": "отчёты о задачах", "SECTION_TITLE_ISSUE": "отчёты о запросах", @@ -586,8 +561,8 @@ "CUSTOM_FIELDS": { "TITLE": "Пользовательские поля", "SUBTITLE": "Укажите специальные поля для ваших пользовательских историй, задач и запросов", - "EPIC_DESCRIPTION": "Epics custom fields", - "EPIC_ADD": "Add a custom field in epics", + "EPIC_DESCRIPTION": "Специальные поля эпосов", + "EPIC_ADD": "Добавить специальное поле для эпосов", "US_DESCRIPTION": "Специальные поля для пользовательских историй", "US_ADD": "Добавить специальное поле для пользовательских историй", "TASK_DESCRIPTION": "Специальные поля задач", @@ -625,8 +600,8 @@ "PROJECT_VALUES_STATUS": { "TITLE": "Статус", "SUBTITLE": "Укажите, какие статусы будут принимать ваши пользовательские истории, задачи и запросы", - "EPIC_TITLE": "Epic Statuses", - "US_TITLE": "User Story Statuses", + "EPIC_TITLE": "Статусы Эпоса", + "US_TITLE": "Статусы пользовательских историй", "TASK_TITLE": "Статус задач", "ISSUE_TITLE": "Статусы запроса" }, @@ -755,7 +730,7 @@ }, "US_STATUS": { "ACTION_ADD_STATUS": "Добавить новый статус", - "IS_ARCHIVED_COLUMN": "Архивирована", + "IS_ARCHIVED_COLUMN": "В архиве", "IS_CLOSED_COLUMN": "Закрыта", "WIP_LIMIT_COLUMN": "Лимит текущей работы", "PLACEHOLDER_WRITE_NAME": "Укажите название для нового статуса" @@ -850,7 +825,7 @@ "FILTER_TYPE_PROJECTS": "Проекты", "FILTER_TYPE_PROJECT_TITLES": "Показать только проекты", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPIC_TITLES": "Показывать только эпосы", "FILTER_TYPE_USER_STORIES": "Истории", "FILTER_TYPE_USER_STORIES_TITLES": "Показывать только пользовательские истории", "FILTER_TYPE_TASKS": "Задачи", @@ -1071,15 +1046,15 @@ } }, "EPIC": { - "PAGE_TITLE": "{{epicSubject}} - Epic {{epicRef}} - {{projectName}}", - "PAGE_DESCRIPTION": "Status: {{epicStatus }}. Description: {{epicDescription}}", + "PAGE_TITLE": "{{epicSubject}} - Эпос {{epicRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "Статус: {{epicStatus }}. Описание: {{epicDescription}}", "SECTION_NAME": "Epic", "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "Unlink related userstory", "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "It will delete the link to the related userstory '{{subject}}'", "ERROR_UNLINK_RELATED_USERSTORY": "We have not been able to unlink: {{errorMessage}}", - "CREATE_RELATED_USERSTORIES": "Create a relationship with", + "CREATE_RELATED_USERSTORIES": "Создать связь с", "NEW_USERSTORY": "Новая пользовательская история", - "EXISTING_USERSTORY": "Existing user story", + "EXISTING_USERSTORY": "Существующая пользовательская история", "CHOOSE_PROJECT_FOR_CREATION": "What's the project?", "SUBJECT": "Тема", "SUBJECT_BULK_MODE": "Subject (bulk insert)", @@ -1088,7 +1063,7 @@ "NO_USERSTORIES": "This project has no User Stories yet. Please select another project.", "FILTER_USERSTORIES": "Filter user stories", "LIGHTBOX_TITLE_BLOKING_EPIC": "Blocking epic", - "ACTION_DELETE": "Delete epic" + "ACTION_DELETE": "Удалить эпос" }, "US": { "PAGE_TITLE": "{{userStorySubject}} - Пользовательская История {{userStoryRef}} - {{projectName}}", @@ -1248,6 +1223,12 @@ "SHOW": "Показать теги", "HIDE": "Скрыть тэги" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Пользовательские Истории", "TITLE_COLUMN_POINTS": "Выберите вид для Роли" @@ -1255,9 +1236,9 @@ "SPRINT_SUMMARY": { "TOTAL_POINTS": "всего
    очков", "COMPLETED_POINTS": "получено
    очков", - "OPEN_TASKS": "открыть
    задачи", + "OPEN_TASKS": "открытые
    задачи", "CLOSED_TASKS": "завершённые
    задачи", - "IOCAINE_DOSES": "иокаина
    дозы", + "IOCAINE_DOSES": "дозы
    иокаина", "SHOW_STATISTICS_TITLE": "Показать статистику", "TOGGLE_BAKLOG_GRAPH": "Показать/Скрыть график решения задач", "POINTS_PER_ROLE": "Points per role" @@ -1543,7 +1524,7 @@ "HOME": "Главная страница", "SECTION_NAME": "ЗАКЛАДКИ", "ACTION_ADD_LINK": "Добавить закладку", - "ALL_PAGES": "All wiki pages" + "ALL_PAGES": "Все wiki-страницы" }, "SUMMARY": { "TIMES_EDITED": "раз
    отредактировано", diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 8419f1cf..5e33219b 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -41,7 +41,7 @@ "LOGOUT": "Logga ut", "EXTERNAL_USER": "en extern användare", "GENERIC_ERROR": "En av våra Oompa Loompier säger {{error}}.", - "IOCAINE_TEXT": "Känner du dig lite bortkommen med en uppgift? Försäkra dig om att andra känner till uppgiften när du klickar på Iocaine-knappen när du ändrar uppgiften. Det är möjligt att bli immun till det här (påhittade) dödliga giftet om du tar små mängder över tid - och du kan även så småningom om bli bättre på vad du gör när du då och då tar på dig större utmaningar!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Project Owner", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "H1_BUTTON": "Första nivån snart klar", - "H1_SAMPLE_TEXT": "Din titel här", - "H2_BUTTON": "Andra nivåns rubrik", - "H2_SAMPLE_TEXT": "Din titel här", - "H3_BUTTON": "Tredje nivåns rubrik", - "H3_SAMPLE_TEXT": "Din titel här", - "BOLD_BUTTON": "Fet", - "BOLD_BUTTON_SAMPLE_TEXT": "Din text här", - "ITALIC_BUTTON": "Kursiv", - "ITALIC_SAMPLE_TEXT": "Din text här", - "STRIKE_BUTTON": "Slag", - "STRIKE_SAMPLE_TEXT": "Din text här", - "BULLETED_LIST_BUTTON": "Punktlista", - "BULLETED_LIST_SAMPLE_TEXT": "Din text här", - "NUMERIC_LIST_BUTTON": "Numrerad lista", - "NUMERIC_LIST_SAMPLE_TEXT": "Din text här", - "PICTURE_BUTTON": "Bild", - "PICTURE_SAMPLE_TEXT": "Din alternativa text till bilden här ...", - "LINK_BUTTON": "Länk", - "LINK_SAMPLE_TEXT": "Din text till länken här ...", - "QUOTE_BLOCK_BUTTON": "Citatblock", - "QUOTE_BLOCK_SAMPLE_TEXT": "Din text här", - "CODE_BLOCK_BUTTON": "Kodblock", - "CODE_BLOCK_SAMPLE_TEXT": "Din text här", - "PREVIEW_BUTTON": "Förhandsvisa", - "EDIT_BUTTON": "Redigera", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Hjälp för markeringssyntax" @@ -1248,6 +1223,12 @@ "SHOW": "Visa etiketter", "HIDE": "Dölj etiketter" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Användarhistorie", "TITLE_COLUMN_POINTS": "Välj visning per roll" diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 0d981ca4..7fbdd3f4 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -41,7 +41,7 @@ "LOGOUT": "Çıkış", "EXTERNAL_USER": "bir dış kullanıcı", "GENERIC_ERROR": "Honki ponkilerimizden biri derki; {{error}}.", - "IOCAINE_TEXT": "Bir görev size ağır geldi ve bunaldınız mı? Diğerlerinin bu durumdan haberi olması için bir görevi düzenlerken baldıran zehrinin üzerine tıklayın. Nasıl ki zaman zaman ekstra meydan okumalarla bir işte gittikce iyi olmanız mümkünse, zaman içerisinde küçük dozlar alarak bu ölümcül zehre de bağışıklık kazanabilmek mümkün!", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Müşteri gereksinimi, daha önceden belli olmayan ama projeye dahil olması gereken bir gereksinimdir", "TEAM_REQUIREMENT": "Takım gereksinimi, müsteriyi ilgilendirmeyen, ama projede yer alması zorunlu olan bir gereksinimdir.", "OWNER": "Project Owner", @@ -227,32 +227,7 @@ } }, "WYSIWYG": { - "H1_BUTTON": "İlk Düzey Başlık", - "H1_SAMPLE_TEXT": "Başlığınız...", - "H2_BUTTON": "İkinci Düzey Başlık", - "H2_SAMPLE_TEXT": "Başlığınız...", - "H3_BUTTON": "Üçüncü Düzey Başlık", - "H3_SAMPLE_TEXT": "Başlığınız...", - "BOLD_BUTTON": "Kalın", - "BOLD_BUTTON_SAMPLE_TEXT": "Yazınız buraya...", - "ITALIC_BUTTON": "Eğik", - "ITALIC_SAMPLE_TEXT": "Yazınız buraya...", - "STRIKE_BUTTON": "Üstünü çiz", - "STRIKE_SAMPLE_TEXT": "Yazınız buraya..", - "BULLETED_LIST_BUTTON": "Maddeler", - "BULLETED_LIST_SAMPLE_TEXT": "Yazınız buraya...", - "NUMERIC_LIST_BUTTON": "Sayısal Liste", - "NUMERIC_LIST_SAMPLE_TEXT": "Yazınız buraya..", - "PICTURE_BUTTON": "Resim", - "PICTURE_SAMPLE_TEXT": "Resminize alternatif yazıyı buraya...", - "LINK_BUTTON": "Bağlantı", - "LINK_SAMPLE_TEXT": "Bağlantınız...", - "QUOTE_BLOCK_BUTTON": "Alıntı Bloku", - "QUOTE_BLOCK_SAMPLE_TEXT": "Metni buraya yazın...", - "CODE_BLOCK_BUTTON": "Kod Bloğu", - "CODE_BLOCK_SAMPLE_TEXT": "Yazınız buraya..", - "PREVIEW_BUTTON": "Ön izleme", - "EDIT_BUTTON": "Düzenle", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Markdown yazım kılavuzu" @@ -1248,6 +1223,12 @@ "SHOW": "Etiketleri göster", "HIDE": "Etiketleri gizler" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "Kullanıcı Hikayeleri ", "TITLE_COLUMN_POINTS": "Her rol için görünüm seç" diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 7312dc86..e755e06d 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -41,7 +41,7 @@ "LOGOUT": "登出", "EXTERNAL_USER": "外部使用者", "GENERIC_ERROR": "我們的系統指出{{error}}.", - "IOCAINE_TEXT": "感到任務的不堪負荷?確認其它人在編輯任務時知道此狀況,可以點選Iocaine。它可能會成為免疫的致命狀況,只要長期小量消耗,但如果你只是偶而挑戰它可有助表現。", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", "OWNER": "Project Owner", @@ -227,32 +227,7 @@ } }, "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_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": "編輯", + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", "MARKDOWN_HELP": "Markdown 語法協助" @@ -1248,6 +1223,12 @@ "SHOW": "顯示標籤", "HIDE": "隱藏標籤" }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "Display backlog", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, "TABLE": { "COLUMN_US": "使用者故事", "TITLE_COLUMN_POINTS": "選擇檢示每個角色" From 92cef11a52a8572d363f43c0e6bd9bd8eab9183d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 22 Nov 2016 13:42:33 +0100 Subject: [PATCH 066/175] Update CHANGELOG --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0779bfbe..2969887e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,14 @@ # Changelog # + ## 3.1.0 No name yet (no date yet) - Velocity forecasting. Create sprints according to team velocity. - Remove bower -- Add new wysiwyg editor (emojis, local storage changes, mentions) +- Add new wysiwyg editor (like the Medunm editor) with emojis, local storage changes, mentions... + +### Misc +- Lots of small and not so small bugfixes. + ## 3.0.0 Stellaria Borealis (2016-10-02) From 6f4689e7cbf67901257c17e4d1b8aff7c00d255c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 22 Nov 2016 18:49:03 +0100 Subject: [PATCH 067/175] Changed taiga-tribe edit link url to the new version --- app/modules/components/tribe-button/tribe-linked.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/modules/components/tribe-button/tribe-linked.jade b/app/modules/components/tribe-button/tribe-linked.jade index 965e8997..51450b29 100644 --- a/app/modules/components/tribe-button/tribe-linked.jade +++ b/app/modules/components/tribe-button/tribe-linked.jade @@ -22,7 +22,7 @@ ) {{gigTitle}} a.delete-link( - href="{{::vm.tribeHost}}/gigs/{{gigId}}/link-with-taiga?from=taiga" + href="{{::vm.tribeHost}}/gigs/{{gigId}}/link-with-task-manager?from=taiga" title="{{ 'US.TRIBE.EDIT_LINK' | translate }}" ) {{ 'US.TRIBE.EDIT_LINK' | translate }} From bcb7c5e3010fc395e3639550499d2b75070108c8 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 23 Nov 2016 10:14:18 +0100 Subject: [PATCH 068/175] fix adding dragula styles --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index 7b769f5c..f06b4201 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -69,7 +69,7 @@ paths.images = paths.app + "images/**/*"; paths.svg = paths.app + "svg/**/*"; paths.css_vendor = [ paths.modules + "intro.js/introjs.css", - paths.modules + "dragula.js/dist/dragula.css", + paths.modules + "dragula/dist/dragula.css", paths.modules + "awesomplete/awesomplete.css", paths.app + "styles/vendor/*.css", paths.modules + "medium-editor/dist/css/medium-editor.css", From 7e6cb6877a08c86d118e847d4b2ec638d733a69f Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 23 Nov 2016 10:23:28 +0100 Subject: [PATCH 069/175] fix issue #4789 - fix kanban headers --- app/coffee/modules/kanban/main.coffee | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index be2a2ab2..b8e7f4fb 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -409,12 +409,8 @@ module.directive("tgKanbanArchivedStatusIntro", ["$translate", "tgKanbanUserstor ## Kanban Squish Column Directive ############################################################################# -KanbanSquishColumnDirective = (rs) -> +KanbanSquishColumnDirective = (rs, projectService) -> link = ($scope, $el, $attrs) -> - $scope.$on "project:loaded", (event, project) -> - $scope.folds = rs.kanban.getStatusColumnModes(project.id) - updateTableWidth() - $scope.foldStatus = (status) -> $scope.folds[status.id] = !!!$scope.folds[status.id] rs.kanban.storeStatusColumnModes($scope.projectId, $scope.folds) @@ -432,9 +428,12 @@ KanbanSquishColumnDirective = (rs) -> $el.find('.kanban-table-inner').css("width", totalWidth) + $scope.folds = rs.kanban.getStatusColumnModes(projectService.project.get('id')) + updateTableWidth() + return {link: link} -module.directive("tgKanbanSquishColumn", ["$tgResources", KanbanSquishColumnDirective]) +module.directive("tgKanbanSquishColumn", ["$tgResources", "tgProjectService", KanbanSquishColumnDirective]) ############################################################################# ## Kanban WIP Limit Directive From 2a68d7243655d10969cd34ca1421c18cf52a990c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Tue, 25 Oct 2016 10:44:18 +0200 Subject: [PATCH 070/175] Get in touch with project admins --- CHANGELOG.md | 4 +- app/coffee/modules/resources.coffee | 1 + app/locales/taiga/locale-en.json | 12 ++ .../contact-project-button.controller.coffee | 38 ++++++ ...tact-project-button.controller.spec.coffee | 50 +++++++ .../contact-project-button.directive.coffee | 32 +++++ .../contact-project-button.jade | 10 ++ .../contact-project-button.scss | 14 ++ .../lb-contact-project.controller.coffee | 41 ++++++ .../lb-contact-project.controller.spec.coffee | 85 ++++++++++++ .../lb-contact-project.directive.coffee | 37 +++++ .../lb-contact-project.jade | 27 ++++ .../lb-contact-project.scss | 29 ++++ .../like-project-button.jade | 7 +- .../watch-project-button.jade | 22 +-- app/modules/projects/project/project.jade | 14 +- .../projects-resource.service.coffee | 9 ++ app/partials/admin/admin-project-profile.jade | 12 ++ app/styles/components/track-btn.scss | 126 +++++++++--------- .../modules/admin/admin-project-profile.scss | 11 +- app/styles/modules/home-project.scss | 7 + app/svg/sprite.svg | 3 + e2e/helpers/project-detail-helper.js | 8 ++ .../admin/project/project-detail.e2e.js | 15 +++ e2e/suites/project-home.e2e.js | 26 +++- 25 files changed, 550 insertions(+), 90 deletions(-) create mode 100644 app/modules/projects/components/contact-project-button/contact-project-button.controller.coffee create mode 100644 app/modules/projects/components/contact-project-button/contact-project-button.controller.spec.coffee create mode 100644 app/modules/projects/components/contact-project-button/contact-project-button.directive.coffee create mode 100644 app/modules/projects/components/contact-project-button/contact-project-button.jade create mode 100644 app/modules/projects/components/contact-project-button/contact-project-button.scss create mode 100644 app/modules/projects/components/lb-contact-project/lb-contact-project.controller.coffee create mode 100644 app/modules/projects/components/lb-contact-project/lb-contact-project.controller.spec.coffee create mode 100644 app/modules/projects/components/lb-contact-project/lb-contact-project.directive.coffee create mode 100644 app/modules/projects/components/lb-contact-project/lb-contact-project.jade create mode 100644 app/modules/projects/components/lb-contact-project/lb-contact-project.scss diff --git a/CHANGELOG.md b/CHANGELOG.md index 2969887e..d452b6f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ # Changelog # - ## 3.1.0 No name yet (no date yet) + +### Features +- Contact with the project: if the projects have this module enabled Taiga users can contact them. - Velocity forecasting. Create sprints according to team velocity. - Remove bower - Add new wysiwyg editor (like the Medunm editor) with emojis, local storage changes, mentions... diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index f8b0a7be..adc6daed 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -74,6 +74,7 @@ urls = { "project-unlike": "/projects/%s/unlike" "project-watch": "/projects/%s/watch" "project-unwatch": "/projects/%s/unwatch" + "project-contact": "contact" "project-transfer-validate-token": "/projects/%s/transfer_validate_token" "project-transfer-accept": "/projects/%s/transfer_accept" "project-transfer-reject": "/projects/%s/transfer_reject" diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 9eb45448..c82506d2 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -194,6 +194,7 @@ "BUTTON_TITLE": "Upvote/Downvote this item", "COUNTER_TITLE": "{total, plural, one{one vote} other{# votes}}" }, + "CUSTOM_ATTRIBUTES": { "CUSTOM_FIELDS": "Custom Fields", "SAVE": "Save Custom Field", @@ -519,6 +520,7 @@ "RECRUITING": "Is this project looking for people?", "RECRUITING_MESSAGE": "Who are you looking for?", "RECRUITING_PLACEHOLDER": "Define the profiles you are looking for", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Public project", "PRIVATE_PROJECT": "Private project", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", @@ -959,6 +961,10 @@ "UNWATCH": "Unwatch", "UNWATCH_TITLE": "Unwatch this project" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1044,6 +1050,12 @@ "TITLE": "Who do you want to be the new project owner?", "ADD_COMMENT": "Add comment", "BUTTON": "Ask this project member to become the new project owner" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { diff --git a/app/modules/projects/components/contact-project-button/contact-project-button.controller.coffee b/app/modules/projects/components/contact-project-button/contact-project-button.controller.coffee new file mode 100644 index 00000000..839b28b2 --- /dev/null +++ b/app/modules/projects/components/contact-project-button/contact-project-button.controller.coffee @@ -0,0 +1,38 @@ +### +# Copyright (C) 2014-2016 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: like-project-button.controller.coffee +### + +class ContactProjectButtonController + @.$inject = ['tgLightboxFactory'] + + constructor: (@lightboxFactory)-> + + launchContactForm: () -> + @lightboxFactory.create( + 'tg-lb-contact-project', + { + "class": "lightbox lightbox-contact-project e2e-lightbox-contact-project", + "project": "project" + }, + { + "project": @.project + } + ) + + +angular.module("taigaProjects").controller("ContactProjectButtonCtrl", ContactProjectButtonController) diff --git a/app/modules/projects/components/contact-project-button/contact-project-button.controller.spec.coffee b/app/modules/projects/components/contact-project-button/contact-project-button.controller.spec.coffee new file mode 100644 index 00000000..13c42bc6 --- /dev/null +++ b/app/modules/projects/components/contact-project-button/contact-project-button.controller.spec.coffee @@ -0,0 +1,50 @@ +### +# Copyright (C) 2014-2016 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: contact-project-button.controller.spec.coffee +### + +describe "ContactProjectButton", -> + provide = null + controller = null + mocks = {} + + _mockTgLightboxFactory = () -> + mocks.tgLightboxFactory = { + create: sinon.stub() + } + + provide.value "tgLightboxFactory", mocks.tgLightboxFactory + + _mocks = () -> + module ($provide) -> + provide = $provide + _mockTgLightboxFactory() + + return null + + beforeEach -> + module "taigaProjects" + + _mocks() + + inject ($controller) -> + controller = $controller + + it "Launch Contact Form", () -> + ctrl = controller("ContactProjectButtonCtrl") + ctrl.launchContactForm() + expect(mocks.tgLightboxFactory.create).have.been.called diff --git a/app/modules/projects/components/contact-project-button/contact-project-button.directive.coffee b/app/modules/projects/components/contact-project-button/contact-project-button.directive.coffee new file mode 100644 index 00000000..ed41564f --- /dev/null +++ b/app/modules/projects/components/contact-project-button/contact-project-button.directive.coffee @@ -0,0 +1,32 @@ +### +# Copyright (C) 2014-2016 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: contact-project-button.directive.coffee +### + +ContactProjectButtonDirective = -> + return { + scope: {} + controller: "ContactProjectButtonCtrl", + bindToController: { + project: '=' + layout: '@' + } + controllerAs: "vm", + templateUrl: "projects/components/contact-project-button/contact-project-button.html", + } + +angular.module("taigaProjects").directive("tgContactProjectButton", ContactProjectButtonDirective) diff --git a/app/modules/projects/components/contact-project-button/contact-project-button.jade b/app/modules/projects/components/contact-project-button/contact-project-button.jade new file mode 100644 index 00000000..7b6638f4 --- /dev/null +++ b/app/modules/projects/components/contact-project-button/contact-project-button.jade @@ -0,0 +1,10 @@ +button.track-button.contact-team.e2e-contact-team( + title="{{ 'PROJECT.CONTACT_BUTTON.CONTACT_TITLE' | translate }}" + ng-click="vm.launchContactForm()" + ng-class="{'contact-team-large': vm.layout == 'large'}" +) + tg-svg(svg-icon="icon-mail") + span( + ng-if="vm.layout == 'large'" + translate="PROJECT.CONTACT_BUTTON.CONTACT_BUTTON" + ) diff --git a/app/modules/projects/components/contact-project-button/contact-project-button.scss b/app/modules/projects/components/contact-project-button/contact-project-button.scss new file mode 100644 index 00000000..ece4ccba --- /dev/null +++ b/app/modules/projects/components/contact-project-button/contact-project-button.scss @@ -0,0 +1,14 @@ +.contact-team { + margin-left: .75rem; + &-large { + @include font-size(small); + @include font-type(light); + justify-content: center; + margin-left: 0; + width: 100%; + .icon-mail { + margin-right: .5rem; + vertical-align: center; + } + } +} diff --git a/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.coffee b/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.coffee new file mode 100644 index 00000000..33657083 --- /dev/null +++ b/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.coffee @@ -0,0 +1,41 @@ +### +# Copyright (C) 2014-2016 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: lb-contact-team.controller.coffee +### + +class ContactProjectLbController + @.$inject = [ + "lightboxService", + "tgResources", + "$tgConfirm", + ] + + constructor: (@lightboxService, @rs, @confirm) -> + @.contact = {} + + contactProject: () -> + project = @.project.get('id') + message = @.contact.message + + promise = @rs.projects.contactProject(project, message) + @.sendingFeedback = true + promise.then => + @lightboxService.closeAll() + @.sendingFeedback = false + @confirm.notify("success") + +angular.module("taigaProjects").controller("ContactProjectLbCtrl", ContactProjectLbController) diff --git a/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.spec.coffee b/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.spec.coffee new file mode 100644 index 00000000..6700e424 --- /dev/null +++ b/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.spec.coffee @@ -0,0 +1,85 @@ +### +# Copyright (C) 2014-2016 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: lb/contact-project-button.controller.spec.coffee +### + +describe "LbContactProject", -> + provide = null + controller = null + mocks = {} + + _mockTgLightboxSercice = () -> + mocks.tglightboxService = { + closeAll: sinon.stub() + } + + provide.value "lightboxService", mocks.tglightboxService + + _mockTgResources = () -> + mocks.tgResources = { + projects: { + contactProject: sinon.stub() + } + } + + provide.value "tgResources", mocks.tgResources + + _mockTgConfirm = () -> + mocks.tgConfirm = { + notify: sinon.stub() + } + + provide.value "$tgConfirm", mocks.tgConfirm + + _mocks = () -> + module ($provide) -> + provide = $provide + _mockTgLightboxSercice() + _mockTgResources() + _mockTgConfirm() + + return null + + beforeEach -> + module "taigaProjects" + + _mocks() + + inject ($controller) -> + controller = $controller + + it "Contact Project", (done) -> + ctrl = controller("ContactProjectLbCtrl") + ctrl.contact = { + message: 'abcde' + } + ctrl.project = Immutable.fromJS({ + id: 1 + }) + + project = ctrl.project.get('id') + message = ctrl.contact.message + + promise = mocks.tgResources.projects.contactProject.withArgs(project, message).promise().resolve() + + ctrl.sendingFeedback = true + + ctrl.contactProject().then () -> + expect(mocks.tglightboxService.closeAll).have.been.called + expect(ctrl.sendingFeedback).to.be.false + expect(mocks.tgConfirm.notify).have.been.calledWith("success") + done() diff --git a/app/modules/projects/components/lb-contact-project/lb-contact-project.directive.coffee b/app/modules/projects/components/lb-contact-project/lb-contact-project.directive.coffee new file mode 100644 index 00000000..8a8bd88f --- /dev/null +++ b/app/modules/projects/components/lb-contact-project/lb-contact-project.directive.coffee @@ -0,0 +1,37 @@ +### +# Copyright (C) 2014-2016 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: lb-contact-team.directive.coffee +### + +ContactProjectLbDirective = (lightboxService) -> + + @.inject = ['lightboxService'] + + link = (scope, el) -> + lightboxService.open(el) + + return { + controller: "ContactProjectLbCtrl", + bindToController: { + project: '=' + } + controllerAs: "vm", + templateUrl: "projects/components/lb-contact-project/lb-contact-project.html", + link: link + } + +angular.module("taigaProjects").directive("tgLbContactProject", ["lightboxService", ContactProjectLbDirective]) diff --git a/app/modules/projects/components/lb-contact-project/lb-contact-project.jade b/app/modules/projects/components/lb-contact-project/lb-contact-project.jade new file mode 100644 index 00000000..f43fd711 --- /dev/null +++ b/app/modules/projects/components/lb-contact-project/lb-contact-project.jade @@ -0,0 +1,27 @@ +tg-lightbox-close + +form.lightbox-contact-project-container + img.lightbox-contact-project-logo( + ng-if="vm.project.logo_big_url" + alt="{{vm.project.get('name')}}" + ng-src="vm.project.logo_big_url" + ) + img.lightbox-contact-project-logo( + ng-if="!vm.project.logo_big_url" + tg-project-logo-big-src="vm.project" + alt="{{vm.project.get('name')}}" + ) + h2.lightbox-contact-project-title(translate="LIGHTBOX.CONTACT_PROJECT.TITLE") + h3.lightbox-contact-project-name {{vm.project.get('name')}} + p(translate="LIGHTBOX.CONTACT_PROJECT.WARNING") + textarea.lightbox-contact-project-message.e2e-lightbox-contact-project-message( + ng-model="vm.contact.message" + required + placeholder="{{'LIGHTBOX.CONTACT_PROJECT.PLACEHOLDER' | translate}}" + ) + button.button-green.lightbox-contact-project-button.e2e-lightbox-contact-project-button( + translate="LIGHTBOX.CONTACT_PROJECT.SEND" + ng-click="vm.contactProject()" + tg-loading="vm.sendingFeedback" + ng-disabled="!vm.contact.message.length" + ) diff --git a/app/modules/projects/components/lb-contact-project/lb-contact-project.scss b/app/modules/projects/components/lb-contact-project/lb-contact-project.scss new file mode 100644 index 00000000..4cc6e3af --- /dev/null +++ b/app/modules/projects/components/lb-contact-project/lb-contact-project.scss @@ -0,0 +1,29 @@ +.lightbox-contact-project { + align-items: center; + display: flex; + justify-content: center; + &-container { + max-width: 600px; + text-align: center; + width: 90%; + } + &-logo { + width: 5rem; + } + &-title { + margin: 0; + } + &-name { + @include font-size(larger); + color: $primary; + margin-bottom: 1rem; + } + &-message { + max-height: 400px; + } + &-button { + display: block; + margin-top: .5rem; + width: 100%; + } +} diff --git a/app/modules/projects/components/like-project-button/like-project-button.jade b/app/modules/projects/components/like-project-button/like-project-button.jade index de8da23f..57fc69b0 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.jade +++ b/app/modules/projects/components/like-project-button/like-project-button.jade @@ -1,5 +1,4 @@ -a.track-button.like-button.like-container( - href="", +button.track-button.like-button( title="{{ 'PROJECT.LIKE_BUTTON.BUTTON_TITLE' | translate }}" ng-click="vm.toggleLike()" ng-class="{'active':vm.project.get('is_fan'), 'is-hover':vm.project.get('is_fan') && vm.isMouseOver}" @@ -21,9 +20,7 @@ a.track-button.like-button.like-container( ng-if="vm.project.get('is_fan') && vm.isMouseOver" translate="PROJECT.LIKE_BUTTON.UNLIKE" ) - span.track-button-counter( title="{{ 'PROJECT.LIKE_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_fans\")||0}:'messageformat' }}", tg-loading="vm.loading" - ) - | {{ vm.project.get('total_fans') }} + ) {{ vm.project.get('total_fans') }} diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.jade b/app/modules/projects/components/watch-project-button/watch-project-button.jade index dff7401a..2ad65e58 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.jade +++ b/app/modules/projects/components/watch-project-button/watch-project-button.jade @@ -1,5 +1,4 @@ -a.track-button.watch-button.watch-container( - href="", +button.track-button.watch-button( title="{{ 'PROJECT.WATCH_BUTTON.BUTTON_TITLE' | translate }}" ng-click="vm.toggleWatcherOptions()" ng-class="{'active': vm.project.get('is_watcher')}" @@ -7,24 +6,25 @@ a.track-button.watch-button.watch-container( span.track-inner span.track-icon tg-svg(svg-icon="icon-watch") - span(ng-if="!vm.project.get('is_watcher')", translate="PROJECT.WATCH_BUTTON.WATCH") - span(ng-if="vm.project.get('is_watcher')", translate="PROJECT.WATCH_BUTTON.WATCHING") + span( + ng-if="!vm.project.get('is_watcher')" + translate="PROJECT.WATCH_BUTTON.WATCH" + ) + span( + ng-if="vm.project.get('is_watcher')" + translate="PROJECT.WATCH_BUTTON.WATCHING" + ) tg-svg.watch-options-arrow(svg-icon="icon-arrow-down") span.track-button-counter( - title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_watchers\")||0}:'messageformat' }}", + title="{{ 'PROJECT.WATCH_BUTTON.COUNTER_TITLE'|translate:{total:vm.project.get(\"total_watchers\")||0}:'messageformat' }}" tg-loading="vm.loading" - ) - | {{ vm.project.get('total_watchers') }} + ) {{ vm.project.get('total_watchers') }} ul.watch-options( ng-class="{'hidden': !vm.showWatchOptions}" ng-mouseleave="vm.closeWatcherOptions()" ) - //- NOTIFY LEVEL CHOICES: - //- 1 - Only involved - //- 2 - Receive all - //- 3 - No notifications li a( diff --git a/app/modules/projects/project/project.jade b/app/modules/projects/project/project.jade index 01feadbc..fd5949e1 100644 --- a/app/modules/projects/project/project.jade +++ b/app/modules/projects/project/project.jade @@ -25,6 +25,10 @@ div.wrapper div.track-buttons-container(ng-if="vm.user") tg-like-project-button(project="vm.project") tg-watch-project-button(project="vm.project") + tg-contact-project-button( + ng-if="vm.project.get('is_contact_activated')" + project="vm.project" + ) div.track-container(ng-if="!vm.user") .list-itemtype-track @@ -56,9 +60,13 @@ div.wrapper src="/#{v}/images/looking-for-people.png" title="{{'PROJECT.LOOKING_FOR_PEOPLE' | translate}}" ) - h3 {{'PROJECT.LOOKING_FOR_PEOPLE' | translate}} - p(ng-if="vm.project.get('looking_for_people_note')") - | {{::vm.project.get('looking_for_people_note')}} + h3(ng-class="{'is-empty': !vm.project.get('looking_for_people_note')}") {{'PROJECT.LOOKING_FOR_PEOPLE' | translate}} + p(ng-if="vm.project.get('looking_for_people_note')") {{::vm.project.get('looking_for_people_note')}} + tg-contact-project-button( + ng-if="vm.project.get('is_contact_activated')" + project="vm.project" + layout="large" + ) h2.title {{"PROJECT.SECTION.TEAM" | translate}} ul.involved-team diff --git a/app/modules/resources/projects-resource.service.coffee b/app/modules/resources/projects-resource.service.coffee index 9df02c3a..82942b37 100644 --- a/app/modules/resources/projects-resource.service.coffee +++ b/app/modules/resources/projects-resource.service.coffee @@ -108,6 +108,15 @@ Resource = (urlsService, http, paginateResponseService) -> url = urlsService.resolve("project-unwatch", projectId) return http.post(url) + service.contactProject = (projectId, message) -> + params = { + project: projectId, + comment: message + } + + url = urlsService.resolve("project-contact") + return http.post(url, params) + service.transferValidateToken = (projectId, token) -> data = { token: token diff --git a/app/partials/admin/admin-project-profile.jade b/app/partials/admin/admin-project-profile.jade index 50a41dc9..bd37c9cb 100644 --- a/app/partials/admin/admin-project-profile.jade +++ b/app/partials/admin/admin-project-profile.jade @@ -119,6 +119,18 @@ div.wrapper( ng-model="project.looking_for_people_note" placeholder="{{ 'ADMIN.PROJECT_PROFILE.RECRUITING_PLACEHOLDER' | translate }}" ) + + fieldset.get-feedback + .get-feedback-inner + span {{ 'ADMIN.PROJECT_PROFILE.FEEDBACK' | translate }} + div.check + input( + type="checkbox", + ng-model="project.is_contact_activated" + ) + div + span.check-text.check-yes(translate="COMMON.YES") + span.check-text.check-no(translate="COMMON.NO") tg-admin-project-restrictions(project="project") diff --git a/app/styles/components/track-btn.scss b/app/styles/components/track-btn.scss index 221d893a..62d76f5a 100644 --- a/app/styles/components/track-btn.scss +++ b/app/styles/components/track-btn.scss @@ -1,6 +1,3 @@ -////////////////////// -//Watch like buttons -////////////////////// .track-buttons-container { @include font-size(small); @@ -9,75 +6,80 @@ .track-button { align-items: stretch; - display: inline-flex; - position: relative; - .track-inner { - align-items: center; - background: $mass-white; - border-radius: 4px 0 0 4px; - display: flex; - flex: 1; - flex-basis: 140px; - justify-content: flex-start; - margin-right: .1rem; - min-width: 140px; - &:hover { - background: darken($mass-white, 5%); - transition: background .3s; - } - } - .watch-options-arrow { - margin: 0 .5rem 0 auto; - svg { - @include svg-size(.75rem); - } - } - &:hover { - color: $blackish; - } + display: flex; + margin: 0; + padding: 0; &.active { .track-inner { background: rgba($primary-light, .2); } - .track-icon { - svg { - fill: $primary; - } + .icon { + fill: $primary; + } + .track-button-counter { + background: rgba($primary-light, .4); } } - &.watch-container { - margin-right: 1rem; - position: relative; - } - .track-icon { - padding: .3rem .6rem .3rem .75rem; - svg { - fill: $grayer; - position: relative; - top: 2px; + &.is-hover { + .track-inner { + background: lighten($red, 10%); + color: $whitish; + transition: background .2s; + } + .icon { + fill: $red-light; + } + .track-button-counter { + background: $red; + color: $whitish; + transition: background .2s; } } - .track-button-counter { - align-items: center; - border: 1px solid $whitish; - display: flex; - justify-content: center; - min-width: 2rem; + .watch-options-arrow { + margin-left: auto; + } + .icon-arrow-down { + @include svg-size(.75rem); } } -.watch-button, -.like-button { - &.active { - &.is-hover { - .track-inner { - background: $red; - color: $whitish; - transition: background .3s; - } - svg { - fill: $red-light; - } - } + +.track-inner { + align-items: center; + background: $whitish; + border-radius: 4px 0 0 4px; + display: flex; + flex: 1; + flex-basis: 140px; + justify-content: flex-start; + min-width: 140px; + padding: .25rem 1rem; + &:hover { + background: darken($whitish, 5%); + transition: background .3s; + } +} + +.track-icon { + fill: $grayer; + margin-right: .5rem; + position: relative; + top: 2px; +} + +.track-button-counter { + align-items: center; + background: darken($whitish, 5%); + border-radius: 0 4px 4px 0; + padding: .25rem .75rem; +} + +.contact-team { + background: $whitish; + border-radius: 4px; + padding: .25rem .75rem; + &:hover { + background: darken($whitish, 5%); + transition: background .3s; } } diff --git a/app/styles/modules/admin/admin-project-profile.scss b/app/styles/modules/admin/admin-project-profile.scss index 31060629..0984f6f6 100644 --- a/app/styles/modules/admin/admin-project-profile.scss +++ b/app/styles/modules/admin/admin-project-profile.scss @@ -1,13 +1,18 @@ @import '../dependencies/mixins/profile-form'; .project-details { @include profile-form; - .looking-for-people { + .looking-for-people, + .get-feedback { @include font-type(light); border-bottom: 1px solid $whitish; - border-top: 1px solid $whitish; padding: 1rem 0; } - .looking-for-people-selector { + .looking-for-people { + border-top: 1px solid $whitish; + margin-bottom: 0; + } + .looking-for-people-selector, + .get-feedback-inner { align-items: center; display: flex; svg { diff --git a/app/styles/modules/home-project.scss b/app/styles/modules/home-project.scss index 3da70541..db929b69 100644 --- a/app/styles/modules/home-project.scss +++ b/app/styles/modules/home-project.scss @@ -79,9 +79,16 @@ h3 { @include font-size(small); } + .is-empty { + margin-bottom: .5rem; + } p { @include font-size(small); @include font-type(light); + margin-bottom: .5rem; + } + .contact-team { + margin-bottom: 1rem; } } .involved-data { diff --git a/app/svg/sprite.svg b/app/svg/sprite.svg index 869e7c00..bfbdeb26 100644 --- a/app/svg/sprite.svg +++ b/app/svg/sprite.svg @@ -454,5 +454,8 @@ Broken Link + + + diff --git a/e2e/helpers/project-detail-helper.js b/e2e/helpers/project-detail-helper.js index 88f2c81a..784612d2 100644 --- a/e2e/helpers/project-detail-helper.js +++ b/e2e/helpers/project-detail-helper.js @@ -14,6 +14,14 @@ helper.toggleIsLookingForPeople = function() { helper.lookingForPeople().click(); }; +helper.receiveFeedback = function() { + return $$('.get-feedback input').get(0); +}; + +helper.togglereceiveFeedback = function() { + helper.receiveFeedback().click(); +}; + helper.editLogo = function() { let inputFile = $('#logo-field'); diff --git a/e2e/suites/admin/project/project-detail.e2e.js b/e2e/suites/admin/project/project-detail.e2e.js index 033015a4..2034f4d0 100644 --- a/e2e/suites/admin/project/project-detail.e2e.js +++ b/e2e/suites/admin/project/project-detail.e2e.js @@ -67,6 +67,21 @@ describe('project detail', function() { expect(utils.notifications.success.open()).to.be.eventually.equal(true); }); + it('receive feedback', async function() { + let checked = !! await adminHelper.receiveFeedback().getAttribute('checked'); + + if(!checked) { + adminHelper.togglereceiveFeedback(); + } + + $('button[type="submit"]').click(); + + checked = !! await adminHelper.receiveFeedback().getAttribute('checked'); + + expect(checked).to.be.true; + expect(utils.notifications.success.open()).to.be.eventually.equal(true); + }); + it('edit logo', async function() { let imageContainer = $('.image-container'); diff --git a/e2e/suites/project-home.e2e.js b/e2e/suites/project-home.e2e.js index 087e3477..6278abd7 100644 --- a/e2e/suites/project-home.e2e.js +++ b/e2e/suites/project-home.e2e.js @@ -14,7 +14,7 @@ describe('project home', function() { await utils.common.takeScreenshot("project", "home-like"); //reset - let link = $('tg-like-project-button a'); + let link = $('tg-like-project-button button'); let likeActive = await utils.common.hasClass(link, 'active'); if (!likeActive) { @@ -47,7 +47,7 @@ describe('project home', function() { }); */ it('unlike', async function() { - let link = $('tg-like-project-button a'); + let link = $('tg-like-project-button button'); let likesCounterOld = parseInt(await link.$('.track-button-counter').getText(), 10); link.click(); @@ -62,7 +62,7 @@ describe('project home', function() { }); it('like', async function() { - let link = $('tg-like-project-button a'); + let link = $('tg-like-project-button button'); let likesCounterOld = parseInt(await link.$('.track-button-counter').getText(), 10); link.click(); @@ -77,8 +77,24 @@ describe('project home', function() { expect(likesCounter).to.be.equal(likesCounterOld + 1); }); + it('contact project', async function() { + $('tg-contact-project-button > .e2e-contact-team').click(); + + let contactProjectLb = $('div[tg-lb-contact-project]'); + + await utils.lightbox.open(contactProjectLb); + await utils.common.takeScreenshot("project", "contact-form"); + + let form = $('.e2e-lightbox-contact-project'); + + await form.$('.e2e-lightbox-contact-project-message').sendKeys('contact'); + form.$('.e2e-lightbox-contact-project-button').click(); + await utils.notifications.success.open(); + + }); + it('unwatch', async function() { - let link = $('tg-watch-project-button > a'); + let link = $('tg-watch-project-button > button'); let watchOptions = $('tg-watch-project-button .watch-options'); let watchCounterOld = parseInt(await link.$('.track-button-counter').getText(), 10); @@ -104,7 +120,7 @@ describe('project home', function() { }); it('watch', async function() { - let link = $('tg-watch-project-button > a'); + let link = $('tg-watch-project-button > button'); let watchOptions = $('tg-watch-project-button .watch-options'); let watchCounterOld = parseInt(await link.$('.track-button-counter').getText(), 10); From 4a7a09e331a22aefa7bd56ecdbff4849dd2083cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Fri, 28 Oct 2016 13:46:48 +0200 Subject: [PATCH 071/175] Update looking for people image --- app/images/looking-for-people.png | Bin 18714 -> 9013 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/app/images/looking-for-people.png b/app/images/looking-for-people.png index 8980016496580887560865cfdbdcf72898fac981..01b4e4ed79416eed08899e65d17b03a92020bcf6 100644 GIT binary patch delta 8974 zcmY*;_dnH-AMZh-Y$3Dkk$uSCIXJeH?7hhfr<^0+wzA5xva@Go@0AsD4v|ClJhJy5 z_i?|U`^)_oUa!~l`Ff6Y6kfgBXE?BvW%`M87`|{v)%<6E>sT9u#Cfi^x2zVbQllUV z;A^`sVLAtmP=}siyq@6g#{gL;u>>hoq+;+1dsk$=QlyO*MFXE%3U5qX8wmp8ypxul zJzw^ESnvl$8Z81WoByn~VK;klp-20bk(#OzT&-VGH&ZG~UY;J>RwUAI3z*Y^l<@cE zj02s_CFt!zAVp$URbr3`>7ycB5GnDC5Z3*H`tIr-24T*Q;O#9$>1Mm%N%~>^jwi_e z-@=Dmx_>LMK<>g=g~Wg0=@w14=T*4Eva{cRh96J8hd}yhe#LYIL+l>)5}P`Gxy7>I66x82t6rHj;{#>QoEqaD;a zWANQU*hY)-AU_u$JS!FqogX_aaxIIeinMhjm)P}I`Cu3|JPE-C*NIs_cPCjq!1~^- zHg)IgN-8Ma{sI=2%Cj@EOv)!x!}luuA8tiywQpM(&2`sW%(Z^aTYgxBqVfdx__7rP z@j)9EUW>P~dzE?9rTPeBRSt$g9Y-5GQ-{){lD>o|#V4A4f1G8Y>EB+PPI23ysER%$ zdv0)p1vuG%P=qKi^9M&JwiOMOe)Ya77+J(uYl?B=VgYt9#s|)C&pJpzO}=*{T7Q-{ z+W2Rd`b|;_WuWwt#GxDUOPM{40cEQKqP%*v3&t!l4LpU0@Iu*>L+=VzLh|-d7WA;< zE)f(lfd98Tmh`^&?69!d?}?KZedthhG%XAn&O{b91)S0-9fx-w^=E9>7Jqs|z3?ME zF`wfE2~6#+Ea?F#^Rujgv+kAR>)YC5da@``aNIW!zsbpAt1^|w)0AYtqzcYowNBvv zIwSP9%oD*xEc#Wgg%cIKs0Ph<%l3w(U2h)ssPl2f%Ro@DhwS+`;1u)6dEut^F5c?Q z&+Z~s`1I99#5?Of!2@*w7g`J5nD;wdj>4~$+ht2QlVCs2Fp8|f zb;&4Al^&6#SQ?d*!`SL1>_;4;tj7SVxs++`y2aH;fp>>Ordn`Y#dW@g^wH)X6FaAK z%WQ2Oye64Td~}jVbCi~a*40~#XOEIAHhQ@;rR!0N45^b%iI+S3c5ndAiMzv0T225v z<-aau=&4h=SUq%B<=)t%j>XahRJ78p?n#KlU1yvJ%`C^jl~21c(qoIH@EO=%z&f;~ z%uT-U05$`DeMsa5S%7F>WABc}CR*nI&h-<$^V0UJ<0SkP)F~R}{LeAI#t>DLXBT0} zQkiELk(82j6`*&pa67zLdL~nQS#^6^wKyl-DOO!syUTDp*Lh3PoMW&xCkb?%u(aJR zVN#lZHIE5eIG^<=*TV>vzta6F<+P;TK_Zu070rS&faBDs9KX`8H8j4-txR;c1xL0% zL)9D$`2PM&8{w<)$JY)8&1_(EtpDztOr=7%DP9V$+PLl3gc%uDd^UCqK(ptPEKm4V zkyL-KhdDK##R_Ib+LnOpgn)h%O{?FOR4I;@e0oW_xRrn$dDz~<-*yr@VQo1X|H$0O z|E97|1l`4DaYLWpKc=wWPIfyQ9DdZceTrdeB#rlKf2Y`}U7O-g%XslIr`QpHWXeX6 z%Uh*vM;yhKGSB;_t8(U};aO2Mc{McWjH`H@S_wf*$*AC#RZ3cTxvgU0{ zsj^(BXt=kxBef_%{nC%oHiK?c`gKL^2Pl?eaoyi;rYOkFe%}Fij|aklTFKSea}z<- z_=es>q)Pd}h!B)ODBjS6M3^h*ZFh@v0;BW82tZxvU7h#;!m7{~ zk58-%t|n?68h2LXQ~|#L9V-UQj23Xqil1LT7CfAioscTUfZ2MU+apdoJJVb`F9xQY zotjdkRC_$?y@?ybANwgOB+RwH@inup;9hQ*b>OXP``zMvCF4n?)$%IKmxzf)&?sT(;r^X_}SFAL~9+@n~ZfyFQU z%j!?<7XlmT44ORU$98xcYDL>J4hdBJOs4Jz^l~4&xI`Dw+pMJDJAvS`at{b>B4QwrnfK!`GMl?Dn`?C zbw_d+Q~xwxg~LNfh37e+xax~EN)iMMKhv)AK+Wmsn`|jCiL`YTNf>2-o^xu5=@hb~ zEjt2piXu{OU9V{Cd4;O6TWU*JV2`nN-STdg^!hp-&HXdOJY&d zXKm(Lr zMSwW1^XKpvRX{0J%ryv%AsKz@zgZuj>g%6`jpm~@__c>Vgs>Vv+{gNzf#?J1*00I3kUd+`T3 z06uuVaN9iFLe_DKSkPvp3q9vviS5z$NGF9!>imll6?~OL9O0(^i(&7u1}3hy?g)AJ zQLc7ZiUOt?-qNW!&Q!D^dPKdZ(jjLIGdN(>H-lYfMl!)M_;Kw!Sp{|hTkQpi>4IMejjUh=F~CywWCex(-(>w3%Vff%}6U!U-$ z)0s}{n~p1l!05)o(@A}GN59GQwM?~Veg#>rwpy4u&=lc)smbR!31AX=?mM$$)lvQd zz++(hk7kUhRX5N~UU_4&kta?8^(1k_tL!QQ`Wx{F+tQGs8Ez4D8dc<_cCq6U^OPG8 z<}g3|%O)it7_LhBP)W_8^+~%w;nyaP`lt6cC@?whjD$hA!(OW?h@jtnJ&zBvM|R+| zf79n&^LhFId1qkX*7+Pg^QB^=<4v?nr!kcgkiomqycq4fjwRzT>d3Q)z zPjVzM)aBkpC_|J#iWVzB@|lMPqmj}N28Q(3ZPU8U+}Uy@dw&Q_c<8PNa_?FMaGbR{ zM-`X#wAZ)BHNMTi@p~#iJG|qq%)8&N_q62ftkSEL{A_af^haeUZ*oCJi3!^uVq;WA ztU#zxQfLyabt;<-`}u6TpwHdXGFM|+RFeUSb64UN8yF~dl+9A(!#ly-DE+5yQNNgTZTJl7HHTCtb4Ib-Re7psg#0E7*+tCbCNDgXB#~gu^ z3tEl`T9SH>d?XGJqJSf%_Pe2znbP-O2xhV?|My6R8xecb&V!LgUrh_0XaD<60Npdb z!ptY^amss+3M7zK3j5&)$DEEbZ&;K0r>PvxB(lM5bS23!b*csE$JMh8h}y$60d11y zKYLCVMfeH#{yaCedqY;J-)UU}ha}P`d|Bm|G(@230)+p4edcG?+^!FuW;rZ+ z<1DHZi7&;Z^R$4eA>2dAN}6Jh5+LG9@Dr2j`Suz*Ni-KE!2)?9uyHzWc~89ehi&I4 zjK(byiCSk>J9#wAdyer%{fB@ua$|#PmG$2o zFnmk)e==m1$DX{0C!V~Vy7oLT(ZO%O%}P)!I?($YaEy8DHPpGhHE#ksdPO|PCAc;x zx6^}*xbhO_RM-wySw$ljW_8#7ASo1nY;^r-w7BEJR47Aau7sm#M3HcjvWN4Mqp{7# zCtTLrF!1IYrc=@<_m{NGR&SA4muR+9v_kT+Vo*3cD#3m|UQ^!s;P}3N*iX(EeNDdv zutI~XmP5w{h~M|jEO7vSkx$FBdx#&ZSL>RSP`Bf7hc;pjDtT#35<&zROS;yo;*|uA<{$jp<5*-yL{#FW`nya z>=;}*Js$Fnv5c-BU0}5fJsS7y?jQ~fzRZtWu`(AC#6e#Gxj)j*-W3PBo_NBO)uh3W zTqM7R^(>zEdeym4O|Cl66i_~hv~{@={$@y7TtF)CX=;?4pg*8&T(Y;fwo2SYdTjYX zcz)hK<6mjNW8V7-A(7q%l2|V%!lQEq)w~>_iWjZ}JWh43`_iUS) zScz5sIE|sk0HpbGI>BacmkB#Z?OC-JxPvCEoaRBb5=#+$p!OFN;q1xU@52z`XnoZq z7f`urW=6vB1${}0KP0W&1@$BXrl&9xCP$2-(VJcT{(Q2Ioj9#d`d{f5GF$V~#&j*L z_>yhnY$>zUKnHjAjBAl-@V=?jp@1yYJ^H4EV|OV+!0q(nbs7zljmf=4!-SB&(}KG1Z1kDjA(2r$CqxrQo-ic+U_}O)z0Y z8dFY?$gwD+>mlqB^RS`h3rZ7Ek@{+0rzI86vBg56l^Yj717Y-`9`r5c8{S(R&3VSAXouuVVZuJ#hu{^Dtvfn1K5w0pLsq}pb{9~Of3 z`)`}DDljW_a(*;6A!2ujID(fZ4{4xLz~LxJJpi_$A50YG-12Cd8%CfAL2mI6_^ssX ze%YaXU>k?*whS8wHCx^=&CKQtw_ICBz}t?b0-{!?QKkz7Z3*RjBM$#I&@<{9_LJOi z;kdiLAaxnw8xxF;PXXDGdNnQF8Stoe3+H76jEjtx zj0D+dL@G#vA`}c8WVsvc)pPZ7p04Ec2xG9rWbcpW+taFEkG0XEYVwwAL=ux>h#C%$ zkl42*+5qZz$t#HC&!)e;i)DrHTm!)LgP%0qqe8^P$7c!5!w;GaVt=!sSG&vt+ot#q262N8 zmrRnCdX_d%;?(?4x21z!6pq#;i*d{)rquQR6f=X%?f$@kzAb+6N+-InWc@n);5dL@|p8kUE_B`s752jY4`p zE-XUNYQJ=6igtatvm?}+4X4lemS|8EVW3gTrl__C6p+h~c=s^8&=GvSfjQCmHMoc` zG3aP-r5hF!R25VFKV{^Q8)8HB!fW#_%eYO6^pOXKfg`+^b)c0s#-1rcUT%mo690wd zJZ>OZZ7v(8qGtdt8Ky|pITsx)MWl1m!j>VDZ+OoaauoIA-0jVtlYBe(G8Gf7z~%>v zcmkA*D>z}zJ3@pA=;?e%+SPPVzCANeO2J*6`Mp06>MT=iyKW1IZsw(vnMC{cjNs!) zzxBJ#6wnh|yIi&G!|Uv6$*PswbxV%GJ0I#2e>X_mH&v%NREUcE)JYzW#XR+w-JzSG zjrZKnmAqjyq3{1b{cBGI(|VzW-{4wM3EYAI?^dpa z3n!GpTG&j6TlsGsQSnB<@|T8mGIxpmgaTV(r*!WpH*k*$rbY0j=Ln;E`IFAKLVF&8 zh^p=94hd{@e(2#kA;ustYA;JIY8Hh(a>FR|a;&$rJ(9ZjV)T=@M=N0l1Qi6-dMsb| zuXSeqryzvxIBeD0g85=f9W|0Htg*|N_@40;g-O9UuKb}%q}aQVK$K&Gin?q|5uM<5 zDn+%@42J(j)oYk#YZl?=!D&GpvRP1Fj4h;nyb{?u?#Ac*U|5^EcO+)E-!jy=p@&Q^ zQb`pEPvNlH@6+zM$_D{a#kd!E#B8JT(gu52S@?dY;N3LuPz!l6iC)4EaSJ60Br~<= zbGR@k+fmIC6rIQ!y*F=SJaEPFv7^-@Kl0xG;1R(|&`unqHU}ypeq^ba-GiCzs^;bY zpi*;4r8~r{DjobY)km2FGmFLV5;vlx3;p>MYRelPsm03#*s<~34>-DHnIcL%)oj`> z=E&}$)vT_Oi0*u3W$|fa{cF0+sa#uwmywROhvc{@?X{#8(kXW#9&RWVez&&_^MZHR zQce*$cDHSm8vL;vDmZc4nEi{A`?4!ud zU80Om`Xj1Gmlb_s3XNj&Ck>M-&h!{+F34aK$?QW-EK)PYIVku{3FE%HGxk*$N-le^ zT>BNdF80^|Z2VO1XOXmj8Ht>OCz6)DhU1m5UVjE6wZ02zLEGFvL{vYA5htJ$5-XC# zH?d8m{}a=+NB<4-KhCKcz41=U9$xALYljvDfw^Srr{6u)O4BY@N%*Oylp|BVMofD$ zOh$jXE9LWDwY95$6lu+Tx_|w(Tv2-crqQc}WieJKn`2#>!{4zH`|FV%8!6B;k&;>6 zC)PTp^DPOo>cGlrp=g~Q&{6CO8m{S@vdcb-@3W;d>1fgx@F3?Y=pgt-(2n5ZUm(IPeivy-uKZlyRYa zXzOZ(|Cvy5M7+0rYPkUiaU#G|V6Q3Vgi7%F6Z@V}n3?EFdX>;{!mTqq(R#b?uV+`57|VRxk>6ykSL)+xcmucgL}FDvx1s0 zgzED1kGKm}s}#-rnM^k{lE~UWk051=G(JSQGaxfBgMOdF^ZnmqtQv%#d097(c_~2o zLUJW7W#TMCmRyiB({VsUG85Yn1w&+z->hh^OlA@_$FgO@rgwH~_*0Q{m`tWE{j#dhRz%vyDIq(81YhYZz2b06!Xsrgs>)A2a0XtpT`Xxa0u5?v<85hVSi zExG|6Lp_tOZ>Fjrb^m-s-v^)OR?l}@orFj;o$ufHE1JjTQ{~{0Y{;ICbe%B!Z_nlD zoxK*z`%YWz^9+C(PiIBSjZ+RtAAOILGm`g1H?O{OpvSOME7gr)#Ahi5t%)B_#S+Gz zp}$##w&s)>NY%}@%${TtNJ_<1n+xJwY#`FgKJ{pU` zeXUOqbIQ-H1W4_*S%`vDc`TEUS0>*E+M-uAW{9CKP&|CBP&~sO9hYT zrm&MNwCOgeqr>sA5aeQ;t%$c%Sqpi5e#V<`j!U~I8&}R;d~1ExG4rf$cS4e*B@mBn zGC8@a82na=E$&IPjF&)6*a{oD9tQ&uSRSJG?LLUU1+T-O5kZhfC_J&Gi?-NiImQDq zc@XWW(ExG3C?d*8K$A1^5+a^d|CwUVPu}h-Cie!G=_$N}c#}zUz0o#(hi(So*V^=v znmC^xlc|DP*2srpzH2p*a%a+#geW9NysLNBue37XFFxU?f)w7D?`5b1JQtXZ{Q6%CPu`DIQSY1#@TKbzuZ#i~13J^Pd zN<&DrYpE3vH1LR^0nyT=zc}y8`ZU-Hn)9^S18KnrfSLd!H zA*KK82uw>}V+$yWjv`<21_}b@uH2m?#{74xefXv>Q2|Yg8m>#C87xfZS$zfYL%F9n z$_^nUJ(SMH7kp6xbE?!H)-!6dZ>1_tsRf-6#+p^|-d791+)Guay!V&2`lyS+*p}fu zscww6_WvX9I+g|5t@uN^pIUBjlIcmKHpn;_%zWJ^+<@w1yI@CdE6FFKiSIDTAuzU% z*+gr9tzd$MU~k@I0Ly-`GB7TflEK0>vo-ckR7y+mEud5pnzP8CV%DPIF*cHrSe zUsoO6lzU*R#EULASz-7u)7qa6Dq33O@MgM>Lf~HZQ!aB@I{YQVc4E6vdYdqmkAe=H zx)GNr*|BGTcM;^7HZr2~#YjB3s@`2Zv${<%N6BH83q3rS9h2x;AR)gF0^t`yRh117 zvq}}Y;2iDn{QT^2xN}EwUOd#GvE`;0f!JHqF#XhsWf8Y8^)k1Rzo|9oEWxbXa85)5 z7tTb1Tn`#2-Aq2+(CDD`V~$825<^C@&IHzo4{dT!mg^ovF}maZ^&>yox^0x^phFvP zr_Q4A+NN3;kAL+ICvNP)s?wSef@ZxqQj^y@XNAnoc##Jsvro_cgXm3v2qv!VdQ!ve z+t(^45ozp&+K5E=s%fo+1nyKfffO6y`;Xp1BlT}qFP(PN1=k-QC~*x=PlIlP0JpTr z+U#ka@BSNcS#ZWZ@x+WI1)8n+giC>{O7{;Dy8P36XNOX0xCv$grX2@G*0@i0>;4xY z4TMwXiK`#3pt9nqF5YQQRjebTG`ya)a`Tzyh^Rrn!2o&wos@myR=O$|AOADJ=%)n- zv%Nt5*LKqBq`pO^p7`vJ`0h7bYC*8Gw_!aZ%c{pD%r1X*)MuP7Wm4}1@>}b8s@vCj zp%%4ARs8%=_@Phj%2(P?u#xmqL9x=xYVbdC!NLzEVLlD98Fg@r3{2z9FE}lN170cC9 z)c&+(XR%($mExvjkW=%8up}$#R%)*{uQZ9TuCko^bIGQ674JlnE|;wYWrZiX28Zxg zUQk+5n!DME312B^Aysb;%5PR7Ib57w{BueH4I_NJ?Ekg%K%BR6EYuVp{iOKtyM}Cw zw%oB8BYBo+(a33{@j^ihcNRcfT9IT-YWX1o;zMPmd1=WF{av1Y+w?zY)Z6xhA_hy{ z|K)K0)9M`RuQb+kyz z)xEn{ueD~PloTY95bzKH005G-l$Z(t09XeA03mR&004k-v-I-@?J6Rz1_uWR=LcsN z2><}#ousr~0RW_>&kI6?Cff@D0N}cbYq_a9TDW-{yO;w!Jw2JM9c*1qjh)Py99=B4 zFZl5Q01|+-n6R2x&RMRfo0|B`XfOMN!`5VJ5-dD?;X}L-;5ZUhI2taRrjCRJ7y>h1 z1zZk@ChH2JQCCZ$lP{5C{uS>AN0FGA*wQK8vd-E2gM~EPP6S;fq$A&zKO)z~(qY}w z^3YoJkoaH3KnymsI%LfSychV|ae&^*pi7O^Aoymt1ObeYgUzfSskz+=SygkLQP1fP(KQJP5{IW9%ROT^LOxB-OVDI2VA|JEgA)kLx7u}R!2 zc{P){3POv)T)~cHAd}#+*qDS#uj*87&Ak}7tWR=X@5ZN$dTk07pX5m@k1;r@ct{#* zdgMxJ|9fG{w1P0G`jdllP@eTSCyx~eKJq8433NG85CR}W#1A4U2o*N#BfJE_ibWi5 z)nC9k7luPl0yACp4U>fr@C(&K9R~wmm0swxw0B8V0q{}!ZB>}iRo960T$M)CCBnSkcj-u2sm55wrWd<)Q zayeU>=5O=1(;zVH_}1aLCN70O*Vl#2;`73O5gqsG5(c>T2^0iZjR$^yWsBe&+xuBH zfa>M0Ue|gN4SL9=;DpA;O&ei!U-@9kKZqeI^*@tRi_j}DDnH1^+RHjXX$hLvyCrJX z-d(?x$WGmN1p;B^r{|$dORb30algjWCNU=XMk*!gZ`{yL^r~6!mQ*h{K9R_1`M6IP zF+fKka1nT~yK4*k(-3fnj5m{=msR>2go6=s(*L1Zkx();c9bdOtypLE~wzWa!?B3tI^)n+yE(k=7rR%yZt$Uc$DK;pBT3m#I{ZY?~ql}d5_?= zfO{T>Sf%AxSky><^#(DakZ3d8<}upvLZKZC7B*Y!=?a7~TBpF3Is%_mlI*WtKp+sv z9vsXzYy}h}Z760HMiQ3aNsG28KNx7EOLqHkhXUwejfaE4&rAHDN3P3Ch1wu`~5EPCSV4Ck+R<_@( zwfkf{+5X|oeacZJ#X$MaO5CaSiIHWz4bG_Pa5t4xKL?>SAPKO2ZSL!)x5#8e)Vq&L7c^;bP}^ba?~aPh_NZVZ#eR*kg0R{baX0zZa*_Xn^}Y>> zP!*`n1cy*{hO1lHci4Dd8M-mOwFOMMrVXSe$a`*83Va!eY5=tYw5jCQ2SsWbl;>SA9q6VRUf-or$ zB`T+`4JvkVU>75H*S?A^JK;k2?j|iHOnZRzl4_a}S=&=6kcCBL$0%CGP#Kl+kJWh9 zfxUzXTdqRsKO5=UtsxspG#qyxE0kpIS7o#(9VY4fn8^CT{D9#Z6{nDO`YHnO;dgLS zPJun}N=&0_d6HNmTv?a|Ha*6Xbo`o~V3??qOcD#;0(JQ72oK!o8MG5BtgKg<|6KP~ zxQBG?+?AMu!Xg(cVYTo%&gkk%o~m+}3}JX3;HY>@tuG zjMvlMW<0KHty+sC!4j1P94H?CI`j?m;*|)XQi~_q{*Q;aQFsgq8OtH;Cl7|GsD65- z@02*}^BB*La;>Sk{Uv5wt%7z@vf z=}O?D^Vu|h=ISU`@LN$2mz=RpccV>CW4EphGt9pE^{fw4{7;Ex6l^9gI<6u@k)rcJ zDFi+l+NU+TD1H&lyt#IYp!K`LE=W*GP*RI=d&;j@ZkoJz{{go#k#`&U1@#;9>x5N2 zuL?i7VEq=CR;0zZ&g~=|&Bw;GnX9l_x)(Is8w5)po^yHee{nQ7$?$LvZ!94}2furF zw-K7rAks9us!S|tW*5mJT{4l*!jvv7lT-VzKTgu zdbD?QJS1R8Y&`et7|yH+ZEcIX*;E9o3%f$IQ@aRK%1jbSMmY0p>yhJ_6j71fMBuj_ zGd@+VU{qB)9xc)`w3^G~P^^H$K$aYY3Se>=q*V1qyBchN@W0Kb)5>4c*v+}*CON(o zvp4;WPYtBs*bvz(p$pljJl=7;r(I_U#Bl|7|y*t@i;CvRD7N!2dkj_k4DeKhxh}Qu+S`6zxd-y z+7XmkdLhxTaH)x7HWGOj7d{}Y6PgIH_oOdAygJJt-QzC^U^5RZ+xCYv$J^$eKqI)^ zH3i_%G-kZ+f2=ZAN>12#_bNu7)*d)j{O(&(kjJ5k=_$e?=M@=7R620b3@2Q+z7_y!wuJa=gmoD5m6l z+Q8*`6_PJ-J>EcA*n#D*xlVNHa$|@}_?~#q@uT$TJZ=}KDZ42iw%Hz(i^t#x??2vo z4T65n`2b6Pgv3PLqGkh}Ueu)b0Mz9^%n0_@DK`cB+MVVlx?!MWCwHyw<^t1}=#F1u zL(Lq{)D*|U^Et-U!+;1?IWp?7l?jkE&05tHyc)|FZLqko+#7M#V(wyKhD6D{?>`#1 z{2tQmTv|VJJRW{_W^ln;Yw)i*9SaZR+knQwA+RK{z^iXmvnwyNrq;6c8rCq7_Q@eu zm$W46?yON1Q+R2lZbh;VlL?z`E%WA|i6mS4JFSR5AICeG_{8?yiO-d6)8=Z ze|s=eE*>Fkqw67}mNq9!WCGmsVu2A$ZIvQ!FfQTU-WAC7c-fNCNow(^O~yyn8*kTQ zb`}}n2r!WoeJSgcpX>aRZJszRXgJ?mt^n2hok zA+7#pY{eabzPy>3FKgdH$o=$5gT3~?|mh`qT4=T%*Lz;m|xnF%(r5q{8Kzw!`EGSgFlae-J!Wle6J>On{#Cisl-#`p+yAktcq;P>?uyWjyCx>jY!H>vg!i9?YaOo()Q~7B+65m##d{D zawbn34{>anH*|GitEx>M&s1Ls@s+iL^cH{mfSSMLnE{O<=cgPqWZ6TO%DPP|KNc2q z=8|`z(=X?Pej0j4a5m3F{kofvNj3}r`N;M5co*HJxEPhb1@Zz}yB1BSs~3Nqqt?13 zHtDX$YEZmkgvm&9+aE3o-W^`{;G25W@+nZO>dVgyXtws;d?2J7DyoJ@z{aEo#8>@J zOG4w3{&knkvk~Wf_4o5{NRGk7SG|E9EhgC)%+WG>@X@02OvtklHb3D$&0#n~qi(PAQ<5b*-l z2T>vRFjg1tbA!C4vQ`hC$y1=*Ckb&+viJmds(%@pQK3X8pK)wX3chzFmopgRllSW1 zICesw8U$;GDx*+=J4x+?U|^{uH)FR*>ytML^o;&L52l z-NvQ}OZ=eqIf0w-__@-_^jzaQNE+pBuS#mULgkKac?UXg|NSgzDnwJWzgER`-FZCf zRPb4NVvCDv&`2=)J*J8L1^>$67OA0=ykyR!^zEqd^ zlB~#$aW}y)mlf3`>cPTTBku7z`qR}lTWX^(oD@nhs$(xIPJ+>7pkNUdOwA;cHD*v7 zdctM<^Vu)E(M%a-h;f7rpjvK>X*6h!kw;SmAGO&j*x$D_$O~0;t}4 z20~`o^{z5%{cgcMkgD&I^Vr{;teBq+zzyiP zSjaA$UsNQ0_Y0GXAUw9`tAyI+!e)A~6)gJVWDAo99oWr!w2c%#&9tn*+n9xyIl*xo zv+h++5Ew5bX=p2%)w39{n4>KZ;!E}wAUhNb$aH^gKFwKuZZ_OF$VQlcy8JU3_i?mW zSMz}kp;^_CCmq!xol&uuMXf`@{KDwmhfljAIo7>Ujdfh!z_&j}>2!bVzyYU~w)kP@ za4|fp8xwM@oci=HIq*#+T@aO;M?C68rjk00orMYn0GNtddhOhuPWt`QEf@5wX5O6rJU|FIzHme&tj9AM07Q|8xEuOrlW~@ zdGYJ(dSMX}E_#x#yTca=H_7&K5zWx(`Q<$sXbSjf*()%hhMbUAa09Q*I zmRT>+*i<*uNG#U zPOm{4$xfC0nk-(|G0jbvRB!>`=c~P!^|1bQRH(V&*^Ku)Jh{pHJ`8JjU^DtEcr78_bvNJ$A52n5bFS*yBTZW5lawSFnN=s=FQ z;%h?m_Ec^;I3iy<`x1u!vr1!(+KI!{Y~NyN?6Y|_DOWLXF(4^xEAaDbE5{ZIg$c;* zUAGNf9sWp$w%y306v$TL(S(#+j48?r0W&U)4AnpXAx2Sc7X8b6e<*GLIJHq?Us1kV zX!Xj>4;rg(9q=%|UHG@&fj~}ylqt=flbZE>ECkVENWPf?%y2a>`VX=&m0J3Yid z-rwrIZw^($kpQo6Z?mQH__2h1-{>`}`}#w_6wV!g#+pIDW4@*)iyehn>*HZ6^?@^0 z5{6%1L~Ug>|2YcXIHG-JG(WY>aLI}UjS1w>7dFGrz}7Hqe3&H_q2kEj}KqK=eCbJ-!J6l zviBo?cFYE+Hv81 zH_`Lvz43-;09W!~NSA2GImKRB0Ns=G3W(^uN-7{3Vi-YuA&uS8tKc`Y*(V1?qQ-r? zw%<5>kV&q1H{{}AR(%AA1FO9N5tfB(3Lxj-3CmRiIk1T{=)NglU;WO-pHuJ%S1@DS z%BegXcjI_qnt!~Qu08Q?f)8LUSD)1Mgc=%E_1DuQ_=$x7^B1|K#%cz;<^}zCI)%=mrbU%N`LLW) zBj6KS|F_(2spGd4f#$u@Xkh$yGj2YH0&f*fmXFwXoTh$XPYABuVi?(Rlvv@HQrFUA z7wbbzDiJ~_3T5mr%VhQ}_w7{c_G&ssLl!$daPhDA5Q_)>EooTq)cIj$S*HQf>qrSdg zN?N)<1O}1C>&gfa^pjnZp#6R4T88ilxx%SQ=wdOh0Hk)?mMCI{#=S{?Gg@i&9r8ZR($U@?v7p=#a|Fd zs-S3UpB$-AuLZGucXIj!@BOnx^V7fY091xq;^$UB$G%+t%gYe*cG*Pw z&W%0wV-|hYE#Zy2oitJC@4u~bHyk8S7i;P*r-`7Uq1RKv5lHwygQ32d%$H{`&6XXU z;kI4)<=ZsZeJd5|NeMaV`I+(u6pmEaTMZKcu~T^8cEMs+#BgaH(y9hc@SQ?-MUG zidjIT38XJ_Hdk6U<^^3J5j6~6*7C^V&lf8C&|!cI1UqS;XGuZ7)qSrftu8>6Nj;opyjHc+rGcS8b(MOE`ze%%W96YU6$ zd5CcRIc}OcvD9jK;!5(eFUx+N^pbj%qND-4xV0ID?k=k6Zo615TxZa2#F>5Rma&G8 zjUAy{rm!=XN)L!^(eAr}x_mA$FBX9uRko#r!PcnOOMk05yKO)JHdA&1gwpxIa1O)1 zSBkr{G_AROS?5^jviiCcnS=mn7&yLS*4yDXj(@r@HoQThI)(JyP>eKjE@^&ad>Oi> zY(Xs2Rlm)A?|`NBIc3mo`Kl;*>4RIDPXa^a_U#cBEaX2eGG|* zJF|+9`!+xweaV4Lzlp>j&)%_+3*Gv}CRP$~> zW;tKm{}7yA&`{3nrgxy2q|Oc`2{qlQ;3z)jH%r!KM2`c3f=okd$Nit*c^*u3`^oVW2u`%Q&< z>{&AN&W6brA^E|js+hm*wgfktLPxgY#44=95 zW|U7~MzIghw**Zz97W0{JJ%L#bZ6@fdl9D3PZp{kw?k1_EGBSnkLSJ!3k!R_oVSun zQ=a;9$BWw8F?gIULjWkoEc*n&A8iA_YGWf`2p12B*P(Cw@ijs#)nfVnsq~t_z>oJUFu1>1I{CB4?c{oH z_J3}mN|SkLG@StUVMY|i_Eyw{YLZ=SALKUmJY4NOLTNl=j( z9CIb7`7)AG5>Y{SinOBf5tzfFf+S+2G?fPdU{fbBQbPf(1om(f$u0cRay>}lo9uaY zq#kq3__cStAyc{4XoeiHWf@=)Zs)ssj8Psr=mmq;q=^!DuTcDjh9tv!5xJsM9q z_;T5skjv+3G7tuDwb8-B>v0xIt6FOGaIsk}0_a22w`)`E zMIRijj7C7r3H)=oh5M)>V$o@0LoIl;&PH`YRG35zs<_-3S@*h-fCQWQ?EbD$Y9qPw z<^lvIb>SQ7MIPLyNMb2-sbDvqN;@Vk@|Ed7-d;e9?Nwat4#$*h-&iF6S*|y&4|wz8 z|9HLeIx38qX|z=Adb#M#U@?ZIlFw4BzFc$cjazB79Gsq>-fMI0ed9#Oz#tvZBg}E* zC8R0&y>?DQlC@YkM^}wn$w0^8)WD-mGJn@7P%@4oekx~tT8CCiVNUs#ZUg3(2?+mk zC(mL}plZckHZAuBFm<`j1M@u^zVxro&8+0dro#9GGOyrJQ3EvK{&Fi}DwognZxUr> zOpK_Tn_E3+g1|jat$ycEL~MtH3wLgUHZL$4ultGGZrl6&yVWdEykc#vR6cum|8I8B zwT1in8r{tWr)Nq{WE~i!C;m@hN9qDytvboo!IlxXG!;)e4;Nxm%&}yL)D~(A%ItqijV<8F{NhII{ z01ySfI#=tpHxyjl9?w}VR%hzI2>9L$VQz$8XMeX2xdBb5bN5ooXKmje&jA2fmao2u zIkaY`2%~)1?f>}vwZ4Cgxw?-r@+�Er%=pX=q>8b>}Z>Q-!oLYWRWG;9O4k_*l?j z=5nvXxhn4W50_+^U>iob@3-;b)rRMm@!iRSl&q|%S6ipO|Hu1VWNa)npvig;cCFQM zGzx<{F)=Y{Xh^KJPX&;{@9k25UQ}1d%*M|CD={%hHl69S(*D+Q3^)537DmE&UWy#K z=T=k2XK@vO8F6F#c()!qH_agXL-4pe=qKVPP2||OxO2GuSiZa+!riso8!Q!%QN#1J ztp1U!J8YTpujeJNk5;z6^AA-EHWN8K7y`ccL*xnkAsd}BFLL=juCVgin-g6HbH`36 z^R%C7_FIeL&%^{nX}4Ru-i%GNgZX9m0};UJ=5TW6*bNmLLR(w=_ljL21-wl&9{;px ziAte#GS#~UTZ4v0Ur4cx_Y;ECC}i2yN&~0KuV z0Kp~Brepr_=;f3{?X3y{&p8RS$`VmdAc!ztRAc?{^LV z6&8xqaWnR}l)CN~)8h*Q0pQ4=ndi3WGGSWQtGa#v)=|Q3MfcUFZryOhdgDymx!K>w zQ91>a&$ZM8*{RswFSt_AaxzZP@NmM$#?9cAFSY#q%OujF&&1$viJOl^ot3DNZHijp z_5NSTV4utG2NttGsIOOpD4+EMu-y*IqqpkxzOisSTdv=3{A(r>hsWWxI}{btxL&K@ zxt`bSxFtAWu3RK$3>8#RKmrX7ZS?vG1^}{8$zFD*KT;pm>EmR&T^{SYQbvP!GvlhV z&gL+P%xVihq+56$pB8lPY6P0sOyV(+|Asul_=>DMq}TlAij|7kzREwAa%|VccDv2H zqWa)ND{xe*eECzMS~k<>Yzhzxg+=;px55^S$AQr8`!EuTMy^z6AYf)`X*&25Nvq3? z_5NbxbTRPx_SozF2?Rc^>-}bjcq6T#Fw*9{clGwLmCh@vo!0N%TCGaAi=lmiT_aY> zQ0Akal)lcK10T%JZGR}H&BmYWY(8(J1XgsNOW1@>u4}iO)WB$V&kMXkF{Gkf`-n=j z7=9J$UMJ$PJW5V}Y?>hObAR8=ZmWlo zD!KEb#CECnXuX{s76~t`(bAEMN>*Ne`1R>#w$V~?B8#KSsF@)O2s!F}lIYTFMX6Fj zzup~U7Go_tkL#F$|Lz!iK5%4)&^)W<+0O*Ha(tXLlJ;nL-Ind8%HL8YeGFvgPI!RW zcRd)xny=MgtC1_4+o>NV8Z=E1&?rUQ40y4BeZ86Xx?iz$zB^HehJ^*{wmK}=n|=ui z4Ru`Ga%dGT>pUVs)`OQ?#sjvsOS9H8opMwQ5_E4m(?W8wVjG$IktH!)$!2h z%X*iNYFEOf(%X$}8FKWuv7r+Yx$qOl<#r;0MXuJ8(v^`x7#MJ9zhgtSr=1)ZXS@OU zZ}dspWOAT!0Qx9(T<7e3Yl#$I3dGL49y&oVfbBBd@)PWv8=P*sBV`%2J3v92qGG%G z zl%SxX)hrOEp|P>vevMO1Qj(m6q_0Tl!@>1@wHZ>L77&!g76|gLq<%Z8y+kdrea(nw zzo-9e*hB-Z$4E&0{ouX49VJtJ2P%I3k*3k;@mg+k{6|6$YZab&HnHA;@G=5Pf$&|3 z1OpPsz0+F!n~U=mZ8*Fn!07R6hudizz+})BxfS?9SR|PM3wV9pOYl0(wEVCAe!RbU z-s$r@?+(Fp4Mzk2w00kfj=#(q%PV~K2a1nPDVav7+f3amSr3fh40gDmuKNi?1fi>+ zTNqEbo9EorI(?X|ig#h_jjz9afjn6u>_tr}H}R1OWOrYQT6LJ+=G<9TF_dr0#_n0M zlSpUM-@d#|c)9^;-Zzbl%g97$%i@MQ6*b*&6!p{+o$jqC^Gi30()1hNvID>b^ zV{zGGlc^P%mSw8A^LzLg6sJ)jK37%os-%{G9rf2xk>OLcQV&*aM)V$+mu{f;zQr5a zKNVj?7wL-zWmT%6V_?MK4vVj-n}kViWpK!!JR)sr5gGe}ay=7sa$>RQHHj6-MKJ@1|j z&p`DC`?VI63uA;vU%efh6TWiW=k*`?iEDNDPZN0p_+T(ttHlnNJ3dsQY%ms={kQX; zM5{;ei4Tmfb6wvXB6yBNE%UoFvu1JK&zrz5>t%Ka;ZfhZo~|6$5-pvQMEV*?vHuLSrHI*OvXu0V;%Vq<{#zAGmYdzUoz#P$yPo`ammZx~;#LGKtn+hkt3Vo)@ia!QMhm2P;veyrdET(5 zBbePykvQ33PBbscwDT*i@@=E z_PBH8mhTfXte37sda`@DzD-=;ccvF45rdi*IXZ?&pg=0Nlx2=26#9`sD_ejb9A+)- zUaq>wnw)xalE0W5P!CMd1oMQ*q}K+hT8Ku%=frHv=5iz&iNlW&@V#$)B1d;>ejc?u z>N&9+t$8w+bnr`A0UpNmUJYq&qyH-u{lcK#uwUCVUMiohRHi^UUuU>g}mo zR7Z8FC*7$qn_MN1?Id=t(DSIdbk4n);_FoSfzs2 zI^9+#CjAcRvN?gM6~4=^Q1kILEcTOYv88Uw+{=wxjGmg_UcLD5=2eFs_Pn1C(qlG$Q2&kJ(8b7eQq90oGtQAFJodP_4I4J;4}yTY z8pbxnTr+^;%5B1C($lh&6K<)MZ?X57gZF~DFdXYI)>Ofw!i0kxbv{~cwhbuVg>>U3 zw3yC|E6We)C?`pjQcbW9M`Y3pXaYDP@)EI{K&LV4YLxPzi6o|^ge@8P*35f&bP_5G zK2f;w5*m2*>l-XqYeNMF2DZ9l0+xryhwoe7PCuSmC@WP&8^x4|ej5+6n2%v5ERnO1 zusE!@g_K_p6d#TR>Na(2Zodz658rZx|M>BGHKv_GFZGEQKtle&2G8p`L+xlovW&b0cJw5uS(Z(<^Bfj@XrI+7i2(GnQ)Zq`*lKLiBdZdH|J&~S01Y?o?D1q29D1RqJL6!T)sX*`oN7i`4q47#soC5a1lTOAzS z+eO9#d-=4N&X-KoZo;B`1RtA+W3cyPn0xvv)vKb1FXZzD3AMGg9rDP-+nshGVNr-; z{a@~}5cA|G1-NfPt{V^E&Q%?PU8#^N_9iO4iAfs>!=eB}728H(>vHu&(AYaL)PO%- z3|D_#0f0FgphW702N!;wg1d_9zw+r+}A_bw`cdE;bG(J{l74p zNLwKXcCt82rA`@g;|17nYZ6`Em&|i$9%swJQ5e)FcP9%l(P>XNAk(+!JFQL+Mz5YW zhgpZ#BH47N3<2L3U8Zk@VjCPEn4XYQ{k1Sn9d1tto#~#R8~K4Z=m` zB_dOVv(&2+Un|hJ4At}{|M~|t71i!e1o23rXrALSA&U`UB!M{L{p}^)7Ww%2_-M76 zp3`wtFEOTp?Nh_q?hj>kJ)AHxpag6uvG?k^FqlZ}G*IhMOsl!}C}J}4xgDW?4%DA` zNJ>s_sPnQXrbf5*8(;bXyUjd}+tEzFYP82w(gDa|jVX@%w8F3*Mgh%DZOUrz6y0AQ zAY?9MX2Gx=$g-kU@L^7N2_@r@hk@&8be4u2f;JUFQzA)?9$t<)z~2j=^cjEy{;FRaFl;cDOqYkkDL?7M1wKko&1HI|2c3on*Feg|uu8J5M zZJUJHFvq1%Mh#z#>{aCP&ytxd8n>3VwQxu#i|2*j*;X&{R)DS?HKcG0gSH>Tt2)XCKy7GF>|Due z`GNuKDuLrG6xU_EYR=u)=<-9#^!#5TAWZS9g^0Sl$8mS&U%uXQwye}{Y{~5sDbv}G zwcXd!D=GV6G8yT5_Rfs@^>So?f!?zf%lu(%L%$v6Z8CClR+oLL&-&~2uyMVyw%qCI zSX@?CWY`<9++>a6=TCnaX4bmKYQOqDhsPB*o70}o<989n|H_jjWqUvpmppVcm z#!x}Of3u*9kVvBwAWstoP%Gs0Eg1&tJJBcbO?X^CW9O%Ede)^iKzoIXt9%*KZ6@_) zi~Dtoares>Jyv-uzbBoY3zQoOl)sNUmKBqoWQKRXK#n$8{o8t6X1H~c^J;l$xdlZ&yJo~go<^9qu{%vu+UItNnT4r30N#< zKVd${F?huI>H1)~-IcoM`Gh{<{NZ9F=6J5mbTpn2YfRVW{nh)ky_IX$5mCu!?H`)y zVP;SMRIk$5X`B`mJzcC}^?!C78cNAqQ8L~=7#VPc#NU3tI|VQ5IvS6sF~WH3P|0V7{rMv$m(5wD6&Ma*rjdL6DAckiR{?qnEU{hs z0khW5dTyq9BsS6pn=<`0pymr!?dm5}r`Wh#$k9hUeMBaR>LuurjKv97{PBhfn#!d= zEQ15&^16#`bhy`>{YB>o4`Cb-)fsgAd=9CccFRGUhW=Q`$H$+nCmyFATxfq#P7Z;Y zxw-LZJmK#ZyQ8&M=Fi7;n#VkT#LBk3<}lk4lK()eGwyPPkU?$XaXsv_Xf%GlJ%%xd zg8eF_pn$x)yZhVw#^P+f9m8@uZ}@DbG3L%PHfqUkEx$AOH^e5^g=5tDdWJ^>xf@-d zII8*-f$911kA2We7e<~<>JzzS6ATmHCrGbUui~fs0wAHMN6h7QANV|CYAa=BW#l9z zfRwZVpHD$E3WM6|`PO>*+#_Ss;_>OJ&~!AO$RFD=LR9X}Y$b{}|F-tVz8mf)G=^4r z;eOuXGp&pV(<0^LpkUwN+*4eDhyh`0l2uhTHQYG z%BJ4xB(!qe;!z!FGFmGR>utfc`kf||SsYd~1;J%h00&;@PCceq@F?+&)w(M@t=yyQ zLT3EictZyS7AiMsW9~}kN(1hfbkQ9c>Kzvs?oFF?q;`d(%U{6$vID9gZm6yX8v;;=ueV7XQ*CCGG;SOMV_2AFlN0ZxSLFyz|x*Te>6daf; zg*%gH7|NR| z=!_l%oavHdDSfmsLik5A*3yH64p??C=Cd3ho=?fYpqhFgI_ttU1_z@JRDU%JW5G8y z8jjlpK#ZFkT^oM1V2EU>41F6FGOGcf`T5^=(5LcFt329@`$o}HB-${zzMV1}`nNh# z;LYye(j-$|7Y&%3j>e0pGwI9RQuBM9;q3127R()A&4{AxJc06=Rq?J*_M4XsLK((C zg%=q+)5aC2E&m7Oo5RV-$jClf=I$`trCQ^^Nt8+zYQGWxI{NuGY;qmowyr~tYLhQ$ zAJ^X%mdmRhHY3c#itoe{?71P7D=0^1CWD^OOqZWID=!U^x*q7$Iw0QuefZ`j$L30b-A1P zQ{BR;OR5qQ-c(Ga=;E)Al;D4tc78bT0 ziXtc^B?b2xe8YgJ5)qkrV4GfTNL56Q27R>#eM4iTapMX?E#dvm4O9sxDJf~WekbS2 zVvX-w=htct`cElmp-QvJpxcMCWv$(ndei5W(Qd1!ds*YTaoR%L(EILSKkcEhY;-~? zo!)DO-su6*a){J&)AlRFINL?%rJ!6U8%zu~ z^G}JQ{+G+%%WpefHVbssTJ^x~Z*vWwqmzE8hw zdK|dt(pibTgBmTTP5u>2f3h$g?x*~)rjT6cn$!F@v67OzemM%%oc60>?x%~Sf`UX4 z5D-WIN)Sy3o#Nl~_#!?~?7TJ@?Z^tm0PsxOBq+ z+~D9~BBXT>(x*E|#YNqtLfyXpdwNs>*S9jX@)bTqzF>POa7$ zuR2QOS#=}S2Ga9gZ})55?kAX=-XOwi!(Jl!Y)*H+B}^(-Ry3$D$V2_1Ut$iV+Wnr` zEGDx)L06GtzM$9RPQ+}XXoN|{AzjR8^Q!B<$6IZ-jW8ciGwut5&}wziuedM@e1D>r zNFa)X`htwfw-ps_KMX7?oZkAI(*>z1zK@u-`!xq)w4qgULN+su?_mJb_QkDHPomys<7Uk z?*?a!B*ELED7$6(0d(~>K$=g~EckjgxXbD=;eFKF_!gnpNKBJHuBTin{^?LX9;NOc zrI7yt^k4$rMxFWt1Nb#{^1Jo}c1%3xBr||E;*ab3{`md|{Mda0kz_|!QwOsGn3mgW zBYnyBNL7MZk|3Rw;IP5Cwunyq*W`#U6R zW&K2tCJbYK+)Z(Te|GU^J=BxobNm52#P(keu5VXEN(`$_hP?q9Z00icdPGllYb{9A z{5M|-kiUG2JV!@IootrMn6o|pz63lj`z`i{UOO;3{NCtX4(oj=KVE}=B00h!o0*vv zeA4aRzOC6TY^7#~^|k(1<0Yd^UOpDy6)wT9+7~zDo$IFsiyvl&n;AKo>GPM7oR3nP z!^ij}`#%$cfEN`kVM-!6IMoFM8VbqX2H*U7S;7~u9pC#O&yrOQe~N^@Wd*veVOpxk zea5P!?0KB2x56koZq9Owb1A>Iqywa`OjO?4BQBqRksX~zO+i7z#Dok6gNde%z+iA> zT-9JDZL~>dYfcDBf&a@rw@;JS&mNOM4Y6N{{ZPAo?goJ3F;`Q3mqs%M z*(;PpzGtkr=WE#HlJN}lp*;W2d?RZ3=0HyE1_hXv{5pNV)&l@L#c$7lIN;l(pvZ8Q znfM&O8v<_)9YP)fgRG=V#k% ze>|ePKKl!il(9>=g<*KIm0nC|PYGomVG#KA?r^<$60# zvlgz8+i}A$Yyb|tv|FBA{#w6{Aat6nl$GAsU8jwQqp^k|xyJ|a9lL_5k{|I0m@b}~c|PqIDVPrI(G?em8!^Zi;$KM)miWK&KS z8{MZ_rCpkQnkC$EyboF-A8cTByZciu`^hkz#iFwDHH;cRW%D5^^j}UD$v@oQH1^f< zH>R(Ybl|V16O;$@TPgl$aa)awJ>Lg?9Q>FqHRi_dMj2qlXOvGfrJ)$g$}W;%ZnO;Y z!SR7N54-Qy1F(Q>=Aqog{Vo%p3$MJ<^>$bA1p73mSKud|(ffLhnCE-Zju4lcmZm|Q zM^^%V+)LQI+8LCRkrAmg=tjlGjlwqcL*wBQ_rHwdoG3fpy>L(4;>7aNuDE5S{B-PD zd(rc79SLjC@&hC$!Z18AHs7nLj?U=gn>gtgehz)G4>SCrf>P3Mtfh(XQz=4-D!%)Y z+z8Q!bN6NqC~J)G{TFmSRit*nP2DM{Zzj1Nb3fFNbS~{|2?tuAw07}$g86Xy-SunQ zeAvTyorVgRsJJ7=y63KUC6H^REnVvG#*1@UyC(|f(=UgmTEf*P>rm$2S9JNT@BI

    5VySj`=i2fY+g9vSPI8$qlmYP4v1xyMOjPUwc%sDBcg2ZU?C49pKp#j zQ8i%sS;MQvoigNI#8{Z}&FTcFu~TXPx!gnvc{?)OBLSU?MIutM`>7M+3>Lsjxwz$E zzbTD&SKrV*GKveY2+c}H0PJdunbY60FK>QU1pMjbZG$fxYd$8YyLh@>du%KLq-ivL zY{eNeAwS*MRZKG8Udw&wUJXK;Hi&L|h z5cU52(|jwqEHBx^i+1D}{^hhC@pHfy@FB#~%&hOgg_MpCfnYTCC~Fu;^m4P?`P%I7 zV$MHEVS0=_5Uca9SouP0k4PviQb>M2@$>z8OtbA0(2}?}4FG@({QNI~LM|_iJM?#! z)rWp8zlkx)fNt)6Iq}h&8QiIZNGlXF$|GQ49Ay|R;Csr|fX>wvIRd%dn6(XE1vB{= z5}ggA$dB^k1$v_ri_~4OHKg!gco!%@AC{8&fafE3&55}G1uzKD_dZ`1&}jYytzY6u zN}a12xJbfV=YY$d#bkB)RA~QlE~T%|VNA{~T$YiMfkA@?;k)m?Lr_o0Ku|F7??(IO!0lvVJ2=nubi$c4eYzd~RN?2y(U04aTH%luD-vZ$HZWCLA+_Z%!se zx+E*Q0=EFkRU@1dCAri|*0`7;+G1+DtPS-V^O?UgDRW^^JAd)ip0h@(vs1gbU_xLA zMNze93f~rh9h`Uo)VYp{=9dA;D&sZJ5tUww5o+wA?Gv;7lft<{^78U9aNt0^`R1F5 zjg3W2Obpt#ZChfXYGPtyu{!~(3YW`OEImSv8a1HNXpoqg=#~w-bLY-jx^yXq3>kuz zD_5dXqecaFgiv$1sp}7e8todh=5!ZN$tg>vLIS4?-<7WNJ<-jc+^4Q@^l#_?3MDDH zo>$0>(Yh?{>q&xt119O3DuVBLIlXOTS9;qV5G9pJ#GG^H=_6Y6nPZBi4I@l0Rp4|! z2W?K$>yqO}$CeuNnY{qO7!6mea*~0YrUNOhOH)M*Xsbx7E`X{n04t$FJfY6td1Km# zes$NJ%=hweS?-&qh)!7-bktVLuwMS6U)^=hYMQ!!UijidQ4}$B=unIpF#>}J4+a2) zhK8bDyLLEm;DE>HSglr%E>(9MNs`d9V@Di5T->BKaNs~}+_(`FCQNWEZ`ZCJmM>q9 zAwz~>&6+huGM5oUpsv-o4>$f}+^SP;%aw(@!b%g~V3B<4tvKW9pr#JE=u`(>JOSVY zfFFUInT+i>de@P1Yjy+knJ%~jr--TDn}aeZ0lQ{7HDwglr~FZ(PbDWDA`btyaE8QN zlKZp*qcxqm;g7kFy*?9+YXYJqQcgI?YjS?%d@j9U2;b}`#8RP&YJB%+SM%Mw4-WAMbhkEnJL@H#P9b9t(n$} zfq{Xrt^R!bq?vC+;sXvV!PPN;3?#s{$6JSZk ziQ_nl;wP{aRQJxGg+fsj1mWS1`w4=8nwpxhI(Bm0ym?brK*VS?VrXaxJkJN|nBT)} zHsj>Ulc=hy!kIH?f;LhBFgmrtUc+A5&@q^IJQ81G(g>C?vnM$J6Yo*CO@Bco=?NL< z_A=^``T0@H7Jeb?C4r0IF7ldpIG>@BfItL4Lm=D$5e1r=IVAFGR;0Lpk_(O;j)nj0 zfn8fV-wzjTt*xyX92~^ivuDG0@uDbdISC#LP1CZrNbz_)SX_)wyvXnOOV)3J{f>rf4QMeG>Nlc=nQ5)*BK8*8rRVfZM~bZ;cmbeVQkGBx4m;hs>mxKSD_JRF}(zg9i_y zudfdpjYI`(nU$VmEX&G1MIvQpW=5jUdOui}gem>_oU+=&AR z4xp^83_U$PNK6c>BqTcZ=1(e&{S)6_E$)+>BZk@nV~feAkEJWs`;ffZ;eHg}C@fJ` z;C_`M2|EI>jgF4OX0yTRbguZr1pu8+hv{iKeaweP5QM13LySh_iV1a-$%Lk+rikXU zTCJF#o<><&8M?ZgsA(ES8AodDH=CwOUtfardAkCMLq?i##pc z*w_fYULUscEg^LJ*0g<}YU9!*+n!3mDF6T}@?38-bi($)Yo|_~!og($xp2uJ? z!0Yv{x_|f3>2yKW{HsMyPEOQ*+wFF^-EOqCwMlF=iGQIYzhCmjDFLT|U4{;$R+Spm zgmHLy7|qSiXm4+iYR#0In!08M$g4?ZWo6Ww1JpY#< z-Dagt-a02s`=WY}@w@Y(QoM6>bC{f*49z(ygkfZ41huub=QRII5{`!u+W3&DIf3C_dh`vZ_wg3PC07*qo IM6N<$f(lzd*#H0l From 5a5d6a933df6a6493fbb201cb04069723e0f3deb Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 25 Nov 2016 09:01:38 +0100 Subject: [PATCH 072/175] Fixing admin tags area --- app/coffee/modules/admin/project-values.coffee | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index 80d26c82..8169983d 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -719,14 +719,16 @@ class ProjectTagsController extends taiga.Controller "$tgConfirm", "$tgResources", "$tgModel", + "tgProjectService" ] - constructor: (@scope, @rootscope, @repo, @confirm, @rs, @model) -> + constructor: (@scope, @rootscope, @repo, @confirm, @rs, @model, @projectService) -> @.loading = true - @rootscope.$on("project:loaded", @.loadTags) + @.loadTags() loadTags: => - return @rs.projects.tagsColors(@scope.projectId).then (tags) => + project = @projectService.project.toJS() + return @rs.projects.tagsColors(project.id).then (tags) => @scope.projectTagsAll = _.map tags.getAttrs(), (color, name) => @model.make_model('tag', {name: name, color: color}) @.filterAndSortTags() From 481fef4847c0cca2887ba2d43699756f1e691000 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 25 Nov 2016 12:02:24 +0100 Subject: [PATCH 073/175] Fixing custom fields in admin area --- .../modules/admin/project-values.coffee | 26 ++++++++++--------- .../admin-project-values-custom-fields.jade | 8 +++--- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index 8169983d..b7ddd2f2 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -440,26 +440,28 @@ class ProjectCustomAttributesController extends mixOf(taiga.Controller, taiga.Pa "$tgLocation", "$tgNavUrls", "tgAppMetaService", - "$translate" + "$translate", + "tgProjectService" ] constructor: (@scope, @rootscope, @repo, @rs, @params, @q, @location, @navUrls, @appMetaService, - @translate) -> + @translate, @projectService) -> @scope.TYPE_CHOICES = TYPE_CHOICES + @scope.project = @projectService.project.toJS() + @scope.projectId = @scope.project.id - @scope.project = {} + sectionName = @translate.instant(@scope.sectionName) + title = @translate.instant("ADMIN.CUSTOM_ATTRIBUTES.PAGE_TITLE", { + "sectionName": sectionName, + "projectName": @scope.project.name + }) + description = @scope.project.description + @appMetaService.setAll(title, description) - @rootscope.$on "project:loaded", => + @scope.init = (type) => + @scope.type = type @.loadCustomAttributes() - sectionName = @translate.instant(@scope.sectionName) - title = @translate.instant("ADMIN.CUSTOM_ATTRIBUTES.PAGE_TITLE", { - "sectionName": sectionName, - "projectName": @scope.project.name - }) - description = @scope.project.description - @appMetaService.setAll(title, description) - ######################### # Custom Attribute ######################### diff --git a/app/partials/admin/admin-project-values-custom-fields.jade b/app/partials/admin/admin-project-values-custom-fields.jade index 19cb292b..4ef46a11 100644 --- a/app/partials/admin/admin-project-values-custom-fields.jade +++ b/app/partials/admin/admin-project-values-custom-fields.jade @@ -20,27 +20,27 @@ div.wrapper( div.admin-attributes-section( tg-project-custom-attributes, ng-controller="ProjectCustomAttributesController as ctrl", - ng-init="type='epic'; customFieldSectionTitle='ADMIN.CUSTOM_FIELDS.EPIC_DESCRIPTION'; customFieldButtonTitle='ADMIN.CUSTOM_FIELDS.EPIC_ADD'" + ng-init="init('epic'); customFieldSectionTitle='ADMIN.CUSTOM_FIELDS.EPIC_DESCRIPTION'; customFieldButtonTitle='ADMIN.CUSTOM_FIELDS.EPIC_ADD'" ) include ../includes/modules/admin/admin-custom-attributes div.admin-attributes-section( tg-project-custom-attributes, ng-controller="ProjectCustomAttributesController as ctrl", - ng-init="type='userstory'; customFieldSectionTitle='ADMIN.CUSTOM_FIELDS.US_DESCRIPTION'; customFieldButtonTitle='ADMIN.CUSTOM_FIELDS.US_ADD'" + ng-init="init('userstory'); customFieldSectionTitle='ADMIN.CUSTOM_FIELDS.US_DESCRIPTION'; customFieldButtonTitle='ADMIN.CUSTOM_FIELDS.US_ADD'" ) include ../includes/modules/admin/admin-custom-attributes div.admin-attributes-section( tg-project-custom-attributes, ng-controller="ProjectCustomAttributesController as ctrl", - ng-init="type='task'; customFieldSectionTitle='ADMIN.CUSTOM_FIELDS.TASK_DESCRIPTION'; customFieldButtonTitle='ADMIN.CUSTOM_FIELDS.TASK_ADD'" + ng-init="init('task'); customFieldSectionTitle='ADMIN.CUSTOM_FIELDS.TASK_DESCRIPTION'; customFieldButtonTitle='ADMIN.CUSTOM_FIELDS.TASK_ADD'" ) include ../includes/modules/admin/admin-custom-attributes div.admin-attributes-section( tg-project-custom-attributes, ng-controller="ProjectCustomAttributesController as ctrl", - ng-init="type='issue'; customFieldSectionTitle='ADMIN.CUSTOM_FIELDS.ISSUE_DESCRIPTION'; customFieldButtonTitle='ADMIN.CUSTOM_FIELDS.ISSUE_ADD'" + ng-init="init('issue'); customFieldSectionTitle='ADMIN.CUSTOM_FIELDS.ISSUE_DESCRIPTION'; customFieldButtonTitle='ADMIN.CUSTOM_FIELDS.ISSUE_ADD'" ) include ../includes/modules/admin/admin-custom-attributes From 0937fbfcc5ee61e9fa636f3f529f34a5b4d8a146 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Mon, 21 Nov 2016 13:33:35 +0100 Subject: [PATCH 074/175] Add rich text field --- CHANGELOG.md | 3 +- .../modules/admin/project-values.coffee | 5 ++ .../modules/common/custom-field-values.coffee | 17 ++++++ app/locales/taiga/locale-en.json | 1 + ...custom-field-edit-wysiwyg.directive.coffee | 58 +++++++++++++++++++ .../history-custom-attributes.jade | 28 ++++++--- .../custom-attribute-value-edit.jade | 4 ++ .../custom-attribute-value.jade | 11 +++- .../admin/admin-custom-attributes.jade | 4 ++ app/styles/modules/common/custom-fields.scss | 3 + 10 files changed, 121 insertions(+), 13 deletions(-) create mode 100644 app/modules/components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee diff --git a/CHANGELOG.md b/CHANGELOG.md index d452b6f4..88ba03b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,8 +5,9 @@ ### Features - Contact with the project: if the projects have this module enabled Taiga users can contact them. - Velocity forecasting. Create sprints according to team velocity. -- Remove bower +- Remove bower, now use only npm packages. - Add new wysiwyg editor (like the Medunm editor) with emojis, local storage changes, mentions... +- Add rich text custom fields (with a wysiwyg editor like descreption or comments). ### Misc - Lots of small and not so small bugfixes. diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index b7ddd2f2..772ea749 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -406,6 +406,7 @@ module.directive("tgColorSelection", ColorSelectionDirective) # Custom attributes types (see taiga-back/taiga/projects/custom_attributes/choices.py) TEXT_TYPE = "text" MULTILINE_TYPE = "multiline" +RICHTEXT_TYPE = "richtext" DATE_TYPE = "date" URL_TYPE = "url" @@ -419,6 +420,10 @@ TYPE_CHOICES = [ key: MULTILINE_TYPE, name: "ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI" }, + { + key: RICHTEXT_TYPE, + name: "ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT" + }, { key: DATE_TYPE, name: "ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE" diff --git a/app/coffee/modules/common/custom-field-values.coffee b/app/coffee/modules/common/custom-field-values.coffee index b9808cbb..3b164981 100644 --- a/app/coffee/modules/common/custom-field-values.coffee +++ b/app/coffee/modules/common/custom-field-values.coffee @@ -32,6 +32,7 @@ module = angular.module("taigaCommon") # Custom attributes types (see taiga-back/taiga/projects/custom_attributes/choices.py) TEXT_TYPE = "text" +RICHTEXT_TYPE = "url" MULTILINE_TYPE = "multiline" DATE_TYPE = "date" URL_TYPE = "url" @@ -53,6 +54,10 @@ TYPE_CHOICES = [ { key: URL_TYPE, name: "ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL" + }, + { + key: RICHTEXT_TYPE, + name: "ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT" } ] @@ -193,6 +198,15 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, requiredEditionPerm = $attrs.requiredEditionPerm return permissions.indexOf(requiredEditionPerm) > -1 + $scope.saveCustomRichText = (markdown, callback) => + attributeValue.value = markdown + $ctrl.updateAttributeValue(attributeValue).then -> + callback() + render(attributeValue, false) + + $scope.cancelCustomRichText= () => + render(attributeValue, false) + submit = debounce 2000, (event) => event.preventDefault() @@ -214,6 +228,9 @@ CustomAttributeValueDirective = ($template, $selectedText, $compile, $translate, # Bootstrap attributeValue = $scope.$eval($attrs.tgCustomAttributeValue) + if attributeValue.value == null or attributeValue.value == undefined + attributeValue.value = "" + $scope.customAttributeValue = attributeValue render(attributeValue) ## Actions (on view mode) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index c82506d2..ac8d9fef 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -573,6 +573,7 @@ "ISSUE_DESCRIPTION": "Issues custom fields", "ISSUE_ADD": "Add a custom field in issues", "FIELD_TYPE_TEXT": "Text", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Multi-line", "FIELD_TYPE_DATE": "Date", "FIELD_TYPE_URL": "Url" diff --git a/app/modules/components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee new file mode 100644 index 00000000..ec79e6b2 --- /dev/null +++ b/app/modules/components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee @@ -0,0 +1,58 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee +### + +CustomFieldEditWysiwyg = (attachmentsFullService) -> + link = ($scope, $el, $attrs) -> + types = { + userstories: "us", + issues: "issue", + tasks: "task" + } + + uploadFile = (file, cb) -> + return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.comment.comment.id, types[$scope.vm.comment.comment._name], file).then (result) -> + cb(result.getIn(['file', 'name']), result.getIn(['file', 'url'])) + + $scope.uploadFiles = (files, cb) -> + for file in files + uploadFile(file, cb) + + return { + scope: true, + link: link, + template: """ +

    + + +
    + """ + } + +angular.module("taigaComponents") + .directive("tgCustomFieldEditWysiwyg", ["tgAttachmentsFullService", CustomFieldEditWysiwyg]) diff --git a/app/modules/history/history/history-templates/history-custom-attributes.jade b/app/modules/history/history/history-templates/history-custom-attributes.jade index 69d6a1bf..d8ba2873 100644 --- a/app/modules/history/history/history-templates/history-custom-attributes.jade +++ b/app/modules/history/history/history-templates/history-custom-attributes.jade @@ -1,19 +1,29 @@ -.diff-custom-new( +.diff-status-wrapper( ng-if="vm.diff.new.length" ng-repeat="newCustom in vm.diff.new" ) span.key(translate="ACTIVITY.CREATED_CUSTOM_ATTRIBUTE") span.diff ({{newCustom.name}}) - span.diff {{newCustom.value}} - -.diff-custom-new( + + span(ng-if="newCustom.type == 'richtext'") + p.diff(tg-bo-html="newCustom.value_diff") + + span(ng-if="newCustom.type != 'richtext'") + span.diff {{newCustom.value}} + +.diff-status-wrapper( ng-if="vm.diff.changed.length" ng-repeat="changeCustom in vm.diff.changed" ) span.key(translate="ACTIVITY.UPDATED_CUSTOM_ATTRIBUTE") span.diff ({{changeCustom.name}}) - span.diff {{changeCustom.changes.value[0]}} - tg-svg( - svg-icon="icon-arrow-right" - ) - span.diff {{changeCustom.changes.value[1]}} + + span(ng-if="changeCustom.type == 'richtext'") + p.diff(tg-bo-html="changeCustom.value_diff") + + span(ng-if="changeCustom.type != 'richtext'") + span.diff {{changeCustom.changes.value[0]}} + tg-svg( + svg-icon="icon-arrow-right" + ) + span.diff {{changeCustom.changes.value[1]}} diff --git a/app/partials/custom-attributes/custom-attribute-value-edit.jade b/app/partials/custom-attributes/custom-attribute-value-edit.jade index e00fc04f..3e2a1a60 100644 --- a/app/partials/custom-attributes/custom-attribute-value-edit.jade +++ b/app/partials/custom-attributes/custom-attribute-value-edit.jade @@ -13,6 +13,8 @@ form.custom-field-single.editable input#custom-field-value(name="value", type="text", value!="<%- value %>") <% } else if (type=="multiline") { %> textarea#custom-field-value(name="value") <%- value %> + <% } else if (type=="richtext") { %> + tg-custom-field-edit-wysiwyg() <% } else if (type=="date") { %> input#custom-field-value(name="value", type="text", data-pikaday, value!="<%- value %>") <% } else if (type=="url") { %> @@ -21,6 +23,8 @@ form.custom-field-single.editable input#custom-field-value(name="value", type="text", value!="<%- value %>") <% } %> + <% if (type != "richtext") { %> div.custom-field-options a.js-save-description(href="", title="{{'COMMON.CUSTOM_ATTRIBUTES.SAVE' | translate}}") tg-svg(svg-icon="icon-save") + <% } %> diff --git a/app/partials/custom-attributes/custom-attribute-value.jade b/app/partials/custom-attributes/custom-attribute-value.jade index 0350a24d..0bd427e5 100644 --- a/app/partials/custom-attributes/custom-attribute-value.jade +++ b/app/partials/custom-attributes/custom-attribute-value.jade @@ -7,14 +7,19 @@ <%- description %> <% } %> + <% if (type=="url") { %> .custom-field-value.js-value-view-mode span - <% if (type=="url") { %> a(href!="<%- value %>") <%- value %> - <% } else { %> + <% } else if (type=="richtext") { %> + .custom-field-value.js-value-view-mode.wysiwyg + div(ng-bind-html!="\'<%- value %>\'|markdownToHTML") + <% } else { %> + .custom-field-value.js-value-view-mode + span <%- value %> - <% } %> + <% } %> <% if (isEditable) { %> .custom-field-options diff --git a/app/partials/includes/modules/admin/admin-custom-attributes.jade b/app/partials/includes/modules/admin/admin-custom-attributes.jade index 847a4133..b2e97952 100644 --- a/app/partials/includes/modules/admin/admin-custom-attributes.jade +++ b/app/partials/includes/modules/admin/admin-custom-attributes.jade @@ -30,6 +30,10 @@ section.custom-fields-table.basic-table ng-switch-default translate="ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT" ) + span( + ng-switch-when="richtext" + translate="ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT" + ) span( ng-switch-when="multiline" translate="ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI" diff --git a/app/styles/modules/common/custom-fields.scss b/app/styles/modules/common/custom-fields.scss index d2aed368..003e9cc0 100644 --- a/app/styles/modules/common/custom-fields.scss +++ b/app/styles/modules/common/custom-fields.scss @@ -71,6 +71,9 @@ padding: 0 1rem 0 2rem; &.js-value-view-mode { white-space: pre-line; + &.wysiwyg { + white-space: normal; + } } } form { From 3fa88557fb1974dddd1448022d0faefda08a4d1d Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 24 Nov 2016 12:37:12 +0100 Subject: [PATCH 075/175] Issue 4672: Empty history entry --- app/modules/history/history/history-diff.jade | 5 +++++ .../history/history/history-templates/history-type.jade | 9 +++++++++ 2 files changed, 14 insertions(+) create mode 100644 app/modules/history/history/history-templates/history-type.jade diff --git a/app/modules/history/history/history-diff.jade b/app/modules/history/history/history-diff.jade index 58ea6d6a..2bfaffa9 100644 --- a/app/modules/history/history/history-diff.jade +++ b/app/modules/history/history/history-diff.jade @@ -62,3 +62,8 @@ ng-if="vm.type == 'is_blocked'" ) include history-templates/blocked + +.diff-wrapper( + ng-if="vm.type == 'type'" +) + include history-templates/history-type diff --git a/app/modules/history/history/history-templates/history-type.jade b/app/modules/history/history/history-templates/history-type.jade new file mode 100644 index 00000000..7818f23a --- /dev/null +++ b/app/modules/history/history/history-templates/history-type.jade @@ -0,0 +1,9 @@ +.diff-status-wrapper + span.key( + translate="ACTIVITY.FIELDS.TYPE" + ) + span.diff(ng-if="vm.diff[0]") {{vm.diff[0]}} + tg-svg( + svg-icon="icon-arrow-right" + ) + span.diff(ng-if="vm.diff[1]") {{vm.diff[1]}} From c8c6df49fcc7a509d433f6f4a6b47d62a030764e Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 30 Nov 2016 10:06:43 +0100 Subject: [PATCH 076/175] don't check user activity in e2e tests --- app/modules/services/project.service.coffee | 2 +- app/modules/services/user-activity.service.coffee | 2 ++ conf.e2e.js | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/modules/services/project.service.coffee b/app/modules/services/project.service.coffee index 8e2e1906..12cf1f2f 100644 --- a/app/modules/services/project.service.coffee +++ b/app/modules/services/project.service.coffee @@ -38,7 +38,7 @@ class ProjectService taiga.defineImmutableProperty @, "sectionsBreadcrumb", () => return @._sectionsBreadcrumb taiga.defineImmutableProperty @, "activeMembers", () => return @._activeMembers - @.autoRefresh() + @.autoRefresh() if !window.localStorage.e2e cleanProject: () -> @._project = null diff --git a/app/modules/services/user-activity.service.coffee b/app/modules/services/user-activity.service.coffee index 07e4afd6..2f1668f2 100644 --- a/app/modules/services/user-activity.service.coffee +++ b/app/modules/services/user-activity.service.coffee @@ -27,6 +27,8 @@ class UserActivityService idleTimeout: 60 * 5 * 1000 constructor: (@timeout) -> + return null if window.localStorage.e2e + window.addEventListener('mousemove', @.resetTimer.bind(this), false) window.addEventListener('mousedown', @.resetTimer.bind(this), false) window.addEventListener('keypress', @.resetTimer.bind(this), false) diff --git a/conf.e2e.js b/conf.e2e.js index d7ca0a01..a250f24c 100644 --- a/conf.e2e.js +++ b/conf.e2e.js @@ -111,6 +111,7 @@ var config = { browser.executeScript('window.sessionStorage.clear();'); browser.executeScript('window.localStorage.clear();'); + browser.executeScript('window.localStorage.e2e = true'); browser.driver.manage().window().maximize(); From dbee1ef8c032012ede838a5032386a256a0afde1 Mon Sep 17 00:00:00 2001 From: Xaviju Date: Thu, 1 Dec 2016 08:11:24 +0100 Subject: [PATCH 077/175] Fix bad link on taigatribe info --- app/locales/taiga/locale-en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index ac8d9fef..a5badc03 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -1108,7 +1108,7 @@ "CLOSE": "Close", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Team Requirement", From 42b244151e9a7e2625f8a467d89d336f6d5ccbdd Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 1 Dec 2016 11:36:37 +0100 Subject: [PATCH 078/175] Fixing tasks bulk creation --- app/coffee/modules/taskboard/lightboxes.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/taskboard/lightboxes.coffee b/app/coffee/modules/taskboard/lightboxes.coffee index 801a6235..f162b8fe 100644 --- a/app/coffee/modules/taskboard/lightboxes.coffee +++ b/app/coffee/modules/taskboard/lightboxes.coffee @@ -212,7 +212,7 @@ CreateBulkTasksDirective = ($repo, $rs, $rootscope, $loading, lightboxService, $ promise = $rs.tasks.bulkCreate(projectId, sprintId, usId, data) promise.then (result) -> - result = _.map(result, (x) => $model.make_model('userstories', x)) + result = _.map(result, (x) => $model.make_model('tasks', x)) currentLoading.finish() $rootscope.$broadcast("taskform:bulk:success", result) lightboxService.close($el) From b5f0473a035c2d079d3bede0ccd207d2e203570d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 1 Dec 2016 16:01:18 +0100 Subject: [PATCH 079/175] [i18n] Add locales ja nad zh-Hans --- CHANGELOG.md | 3 + app/locales/taiga/locale-ja.json | 1699 +++++++++++++++++++++++++ app/locales/taiga/locale-zh-hans.json | 1699 +++++++++++++++++++++++++ 3 files changed, 3401 insertions(+) create mode 100644 app/locales/taiga/locale-ja.json create mode 100644 app/locales/taiga/locale-zh-hans.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 88ba03b9..34614d89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ - Remove bower, now use only npm packages. - Add new wysiwyg editor (like the Medunm editor) with emojis, local storage changes, mentions... - Add rich text custom fields (with a wysiwyg editor like descreption or comments). +- i18n: + - Add japanese (ja) translation. + - Add chinese simplified (zh-Hans) translation. ### Misc - Lots of small and not so small bugfixes. diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json new file mode 100644 index 00000000..61e690b1 --- /dev/null +++ b/app/locales/taiga/locale-ja.json @@ -0,0 +1,1699 @@ +{ + "COMMON": { + "YES": "はい", + "NO": "いいえ", + "OR": "または", + "LOADING": "ロード中...", + "LOADING_PROJECT": "プロジェクトを読み込んでいます...", + "DATE": "YYYY年MM月DD日", + "DATETIME": "YYYY年MM月DD日 HH時mm分", + "SAVE": "保存", + "CANCEL": "キャンセル", + "ACCEPT": "はい", + "DELETE": "削除", + "UNLINK": "リンク解除", + "CREATE": "作成", + "ADD": "追加", + "COPY_TO_CLIPBOARD": "クリップボードにコピー: Ctrl+C", + "EDIT": "編集", + "DRAG": "ドラッグ", + "TAG_LINE": "あなたのアジャイルでフリーでオープンソースなマネジメントツールです", + "TAG_LINE_2": "LOVE YOUR PROJECT", + "BLOCK": "ブロック", + "BLOCK_TITLE": "Block this item for example if it has a dependency that can not be satisfied", + "BLOCKED": "ブロック中", + "UNBLOCK": "ブロック解除", + "UNBLOCK_TITLE": "ブロックを解除する", + "BLOCKED_NOTE": "なぜこれはブロックされているのか?", + "BLOCKED_REASON": "理由を説明してください", + "CREATED_BY": "{{fullDisplayName}} によって作成", + "FROM": "from", + "TO": "to", + "CLOSE": "閉じる", + "GO_HOME": "ホームに戻る", + "PLUGINS": "プラグイン", + "BETA": "これはベータ版です!", + "ONE_ITEM_LINE": "1行に1アイテム", + "NEW_BULK": "一括登録", + "RELATED_TASKS": "関連タスク", + "PREVIOUS": "前", + "NEXT": "次へ", + "LOGOUT": "ログアウト", + "EXTERNAL_USER": "外部ユーザー", + "GENERIC_ERROR": "ウンパルンパのひとりが「{{error}}」と言っています。", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", + "CLIENT_REQUIREMENT": "Client requirement is new requirement that was not previously expected and it is required to be part of the project", + "TEAM_REQUIREMENT": "Team requirement is a requirement that must exist in the project but should have no cost for the client", + "OWNER": "プロジェクトオーナー", + "CAPSLOCK_WARNING": "Be careful! You are using capital letters in an input field that is case sensitive.", + "CONFIRM_CLOSE_EDIT_MODE_TITLE": "本当にこの編集画面を閉じてもよろしいですか?", + "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Remember that if you close the edit mode without saving all the changes will be lost", + "RELATED_USERSTORIES": "関連するユーザーストーリー", + "CARD": { + "ASSIGN_TO": "アサイン", + "EDIT": "編集" + }, + "FORM_ERRORS": { + "DEFAULT_MESSAGE": "無効な値です", + "TYPE_EMAIL": "有効なメールアドレスでなければいけません", + "TYPE_URL": "有効なURLでなければいけません", + "TYPE_URLSTRICT": "有効なURLでなければいけません", + "TYPE_NUMBER": "有効な数字でなければいけません", + "TYPE_DIGITS": "アラビア数字でなければいけません", + "TYPE_DATEISO": "YYYY-MM-DD の形式でなければいけません (例: 2038年01月23日)", + "TYPE_ALPHANUM": "半角英数字でなければなりません", + "TYPE_PHONE": "有効な電話番号でなければいけません", + "NOTNULL": "null以外でなければいけません", + "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": "この値は同じでなければいけません", + "LINEWIDTH": "One or more lines is perhaps too long. Try to keep under %s characters.", + "PIKADAY": "無効なデータフォーマットです。DD MMM YYYYの形式で入力してください。(例:23 Mar 1984)" + }, + "PICKERDATE": { + "FORMAT": "YYYY年MM月DD日", + "IS_RTL": "false", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "先月", + "NEXT_MONTH": "翌月", + "MONTHS": { + "JAN": "1月", + "FEB": "2月", + "MAR": "3月", + "APR": "4月", + "MAY": "5月", + "JUN": "6月", + "JUL": "7月", + "AUG": "8月", + "SEP": "9月", + "OCT": "10月", + "NOV": "11月", + "DEC": "12月" + }, + "WEEK_DAYS": { + "SUN": "日曜", + "MON": "月曜", + "TUE": "火曜", + "WED": "水曜", + "THU": "木曜日", + "FRI": "金曜", + "SAT": "土曜" + }, + "WEEK_DAYS_SHORT": { + "SUN": "日", + "MON": "月", + "TUE": "火", + "WED": "水", + "THU": "木", + "FRI": "金", + "SAT": "土" + } + }, + "SEE_USER_PROFILE": "{{username }} のプロフィールを見る", + "USER_STORY": "User story", + "TASK": "タスク", + "ISSUE": "課題", + "EPIC": "エピック", + "TAGS": { + "PLACEHOLDER": "タグを入力", + "DELETE": "タグを削除", + "ADD": "タグを追加" + }, + "DESCRIPTION": { + "EMPTY": "空欄だと退屈です…。説明を追加してください。", + "NO_DESCRIPTION": "説明はありません" + }, + "FIELDS": { + "SUBJECT": "題名", + "NAME": "名前", + "URL": "URL", + "DESCRIPTION": "説明", + "VALUE": "値", + "SLUG": "スラッグ", + "COLOR": "色", + "IS_CLOSED": "クローズ", + "STATUS": "ステータス", + "TYPE": "タイプ", + "SEVERITY": "深刻度", + "PRIORITY": "優先度", + "ASSIGNED_TO": "担当者", + "POINTS": "ポイント", + "BLOCKED_NOTE": "ブロックノート", + "IS_BLOCKED": "はブロックされています。", + "REF": "参照", + "VOTES": "投票", + "SPRINT": "スプリント" + }, + "ROLES": { + "ALL": "すべて" + }, + "ASSIGNED_TO": { + "NOT_ASSIGNED": "未アサイン", + "ASSIGN": "アサイン", + "DELETE_ASSIGNMENT": "アサインを解除", + "REMOVE_ASSIGNED": "Remove assigned", + "TOO_MANY": "…ユーザーが多すぎます。フィルタを継続してください。", + "CONFIRM_UNASSIGNED": "本当にこのアサインから外れてもよろしいですか?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "アサインを編集", + "SELF": "自分が担当する" + }, + "STATUS": { + "CLOSED": "終了", + "OPEN": "オープン" + }, + "WATCHERS": { + "WATCHERS": "ウォッチャー", + "ADD": "ウォッチャー追加", + "TITLE_ADD": "プロジェクトメンバーをウォッチャーリストへ追加", + "DELETE": "ウォッチャーを削除", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "ウォッチャーの削除..." + }, + "WATCH_BUTTON": { + "WATCH": "フォロー", + "WATCHING": "フォロー中", + "UNWATCH": "フォローをやめる", + "WATCHERS": "ウォッチャー", + "BUTTON_TITLE": "この項目のフォローを有効/無効にする", + "COUNTER_TITLE": "{total, plural, one{one watcher} other{# 人がフォロー中}}" + }, + "VOTE_BUTTON": { + "UPVOTE": "賛成", + "UPVOTED": "賛成", + "DOWNVOTE": "反対", + "VOTERS": "投票者", + "BUTTON_TITLE": "賛成/反対の投票を行う", + "COUNTER_TITLE": "{total, plural, one{one vote} other{# 人が賛成}}" + }, + "CUSTOM_ATTRIBUTES": { + "CUSTOM_FIELDS": "カスタムフィールド", + "SAVE": "カスタムフィールドを保存", + "EDIT": "カスタムフィールドを編集", + "DELETE": "カスタム属性を削除", + "CONFIRM_DELETE": "このカスタムフィールドのすべての値が削除されることになります。\n本当にこのまま続行してもよろしいですか?" + }, + "FILTERS": { + "TITLE": "フィルター", + "INPUT_PLACEHOLDER": "Subject or reference", + "TITLE_ACTION_FILTER_BUTTON": "検索", + "INPUT_SEARCH_PLACEHOLDER": "Subject or ref", + "TITLE_ACTION_SEARCH": "検索", + "ACTION_SAVE_CUSTOM_FILTER": "カスタムフィルターとして保存する", + "PLACEHOLDER_FILTER_NAME": "Write the filter name and press enter", + "APPLIED_FILTERS_NUM": "フィルター適用中", + "CATEGORIES": { + "TYPE": "タイプ", + "STATUS": "ステータス", + "SEVERITY": "深刻度", + "PRIORITIES": "優先度", + "TAGS": "タグ", + "ASSIGNED_TO": "担当者", + "CREATED_BY": "作成者", + "CUSTOM_FILTERS": "カスタムフィルター", + "EPIC": "エピック" + }, + "CONFIRM_DELETE": { + "TITLE": "カスタムフィルターを削除", + "MESSAGE": "カスタムフィルター '{{customFilterName}}'" + } + }, + "WYSIWYG": { + "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", + "ATTACH_FILE_HELP": "テキストエリアへドラッグ&ドロップでファイルを添付", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "MARKDOWN_HELP": "Markdown記法のヘルプ" + }, + "PERMISIONS_CATEGORIES": { + "EPICS": { + "NAME": "エピック", + "VIEW_EPICS": "エピックの表示", + "ADD_EPICS": "エピックの追加", + "MODIFY_EPICS": "エピックの変更", + "COMMENT_EPICS": "複数のエピックにコメントする", + "DELETE_EPICS": "エピックの削除" + }, + "SPRINTS": { + "NAME": "スプリント", + "VIEW_SPRINTS": "スプリントの表示", + "ADD_SPRINTS": "スプリントの追加", + "MODIFY_SPRINTS": "スプリントの変更", + "DELETE_SPRINTS": "スプリントの削除" + }, + "USER_STORIES": { + "NAME": "ユーザーストーリー", + "VIEW_USER_STORIES": "ユーザーストーリーの表示", + "ADD_USER_STORIES": "ユーザーストーリーの追加", + "MODIFY_USER_STORIES": "ユーザーストーリーの変更", + "COMMENT_USER_STORIES": "複数のユーザーストーリーにコメントする", + "DELETE_USER_STORIES": "ユーザーストーリーの削除" + }, + "TASKS": { + "NAME": "タスク", + "VIEW_TASKS": "タスクの表示", + "ADD_TASKS": "タスクの追加", + "MODIFY_TASKS": "タスクの変更", + "COMMENT_TASKS": "複数のタスクにコメントする", + "DELETE_TASKS": "タスクの削除" + }, + "ISSUES": { + "NAME": "課題", + "VIEW_ISSUES": "課題の表示", + "ADD_ISSUES": "課題の追加", + "MODIFY_ISSUES": "課題の変更", + "COMMENT_ISSUES": "複数の課題にコメントする", + "DELETE_ISSUES": "課題の削除" + }, + "WIKI": { + "NAME": "Wiki", + "VIEW_WIKI_PAGES": "Wikiページの表示", + "ADD_WIKI_PAGES": "Wikiページの追加", + "MODIFY_WIKI_PAGES": "Wikiページの変更", + "DELETE_WIKI_PAGES": "Wikiページの削除", + "VIEW_WIKI_LINKS": "Wikiリンクの表示", + "ADD_WIKI_LINKS": "Wikiリンクの追加", + "DELETE_WIKI_LINKS": "Wikiリンクの削除" + } + }, + "META": { + "PAGE_TITLE": "Taiga", + "PAGE_DESCRIPTION": "Taiga is a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable." + } + }, + "LOGIN": { + "PAGE_TITLE": "ログイン - Taiga", + "PAGE_DESCRIPTION": "仕事を本当に楽しくする美しくてシンプルなツールを求めている、スタートアップやアジャイル開発者及びデザイナーのためのプロジェクトマネジメント基盤、Taigaにログインしましょう。" + }, + "AUTH": { + "INVITED_YOU": "があなたをプロジェクトに参加するよう招待しています", + "NOT_REGISTERED_YET": "未登録ですか?", + "REGISTER": "登録", + "CREATE_ACCOUNT": "こちらから無料でアカウントを作成" + }, + "LOGIN_COMMON": { + "HEADER": "すでにログインしたことがあります", + "PLACEHOLDER_AUTH_NAME": "ユーザー名 または メールアドレス", + "LINK_FORGOT_PASSWORD": "忘れましたか?", + "TITLE_LINK_FORGOT_PASSWORD": "パスワードを忘れましたか?", + "ACTION_ENTER": "決定", + "ACTION_SIGN_IN": "ログイン", + "PLACEHOLDER_AUTH_PASSWORD": "パスワード" + }, + "LOGIN_FORM": { + "ERROR_AUTH_INCORRECT": "「あなたのユーザー名/メールアドレス または パスワードが間違っている」とウンパルンパたちが言っています。", + "SUCCESS": "ウンパルンパたちは嬉しいみたいですよ。Taigaへようこそ。" + }, + "REGISTER": { + "PAGE_TITLE": "登録 - Taiga", + "PAGE_DESCRIPTION": "仕事を本当に楽しくする美しくてシンプルなツールを求めるスタートアップや、アジャイル開発者及びデザイナーのためのプロジェクトマネジメントプラットフォーム、Taigaにあなたのアカウントを作成しましょう。" + }, + "REGISTER_FORM": { + "TITLE": "新しいTaigaアカウントを登録する (無料)", + "PLACEHOLDER_NAME": "ユーザー名を記入", + "PLACEHOLDER_FULL_NAME": "フルネームを記入", + "PLACEHOLDER_EMAIL": "メールアドレスを記入", + "PLACEHOLDER_PASSWORD": "パスワードを設定 (大文字・小文字を区別)", + "ACTION_SIGN_UP": "サインアップ", + "TITLE_LINK_LOGIN": "ログイン", + "LINK_LOGIN": "登録の準備は整いましたか? ログイン" + }, + "FORGOT_PASSWORD": { + "PAGE_TITLE": "パスワードを忘れました - Taiga", + "PAGE_DESCRIPTION": "新しいパスワードを取得するためにユーザー名 または メールアドレスを記入することで、Taigaに再びアクセスできます。" + }, + "FORGOT_PASSWORD_FORM": { + "TITLE": "おっと、パスワードを忘れてしまいましたか?", + "SUBTITLE": "新しく始めるためにユーザー名 または メールアドレスを入力", + "PLACEHOLDER_FIELD": "ユーザー名 または メール", + "ACTION_RESET_PASSWORD": "パスワードをリセット", + "LINK_CANCEL": "いいえ、戻ります。私はそれを覚えていると思います。", + "SUCCESS_TITLE": "Inboxを確認してください", + "SUCCESS_TEXT": "新しいパスワードを設定するための指示を記載したメールを送信しました", + "ERROR": "「あなたのアカウントはまだ登録されていない」とウンパルンパたちが言っています。" + }, + "CHANGE_PASSWORD": { + "PAGE_TITLE": "パスワードの変更 - Taiga", + "PAGE_DESCRIPTION": "あなたのTaigaアカウントに新しいパスワードを設定します。そして、いくつかの鉄分豊富な食品を摂取しましょう!脳にとって良いことです :-P", + "SECTION_NAME": "パスワード変更", + "FIELD_CURRENT_PASSWORD": "現在のパスワード", + "PLACEHOLDER_CURRENT_PASSWORD": "現在のパスワード (パスワードが未設定の場合は空)", + "FIELD_NEW_PASSWORD": "新しいパスワード", + "PLACEHOLDER_NEW_PASSWORD": "新しいパスワードを入力", + "FIELD_RETYPE_PASSWORD": "新しいパスワードを再入力", + "PLACEHOLDER_RETYPE_PASSWORD": "新しいパスワードを再入力", + "ERROR_PASSWORD_MATCH": "パスワードが一致しません。" + }, + "CHANGE_PASSWORD_RECOVERY_FORM": { + "TITLE": "新しいTaigaのパスを作成", + "SUBTITLE": "そして、いくつかの鉄分豊富な食品を摂取しましょう!脳にとって良いことです :-P", + "PLACEHOLDER_NEW_PASSWORD": "新しいパスワード", + "PLACEHOLDER_RE_TYPE_NEW_PASSWORD": "新しいパスワードを再入力", + "ACTION_RESET_PASSWORD": "パスワードをリセット", + "ERROR": "ウンパルンパたちはあなたのパスワード復元依頼を見つけられないようです。もう一度お試しください。", + "SUCCESS": "ウンパルンパたちはあなたの新しいパスワードを保存しました。
    新しい方のパスワードでサインイン してみてください。" + }, + "INVITATION": { + "PAGE_TITLE": "招待を受諾する - Taiga", + "PAGE_DESCRIPTION": "仕事を本当に楽しくする美しくてシンプルなツールを求めるスタートアップや、アジャイル開発者及びデザイナーのためのプロジェクトマネジメントプラットフォーム、Taigaのプロジェクトへの招待を受諾" + }, + "INVITATION_LOGIN_FORM": { + "NOT_FOUND": "「あなたの招待を確認できなかった」とウンパルンパたちが言っています。", + "SUCCESS": "プロジェクトへの参加に成功しました, {{project_name}}へようこそ", + "ERROR": "「あなたのアカウントはまだ登録されていないか無効なパスワードが入力された」とウンパルンパたちが言っています。" + }, + "HOME": { + "PAGE_TITLE": "ホーム - Taiga", + "PAGE_DESCRIPTION": "The Taiga home page with your main projects and all your assigned and watched user stories, tasks and issues", + "EMPTY_WORKING_ON": "何も表示されていませんか? Taigaで作業を始めると、ここにあなたが取り組んでいるユーザーストーリー、タスク、課題が表示されます。", + "EMPTY_WATCHING": "ユーザーストーリー、タスク、課題をフォローして変更が発生した際に通知を受け取りましょう。", + "EMPTY_PROJECT_LIST": "参加中のプロジェクトがありません", + "WORKING_ON_SECTION": "取り組んでいる作業", + "WATCHING_SECTION": "フォロー中", + "DASHBOARD": "プロジェクトのダッシュボート" + }, + "EPICS": { + "TITLE": "エピック", + "SECTION_NAME": "エピック", + "EPIC": "エピック", + "PAGE_TITLE": "エピック - {{projectName}}", + "PAGE_DESCRIPTION": "エピックの一覧 {{projectName}}: {{projectDescription}}", + "DASHBOARD": { + "ADD": "エピックを追加", + "UNASSIGNED": "未アサイン" + }, + "EMPTY": { + "TITLE": "まだエピックが無いようです", + "EXPLANATION": "エピックはユーザーストーリーを包含する、より上の階層のものです。
    階級のトップにあり、ユーザーストーリーをグループ化してまとめるのにも用いられます。", + "HELP": "エピックについて" + }, + "TABLE": { + "VOTES": "投票", + "NAME": "名前", + "PROJECT": "プロジェクト", + "SPRINT": "スプリント", + "ASSIGNED_TO": "アサイン済", + "STATUS": "ステータス", + "PROGRESS": "進捗", + "VIEW_OPTIONS": "オプションの表示" + }, + "CREATE": { + "TITLE": "新しいエピック", + "PLACEHOLDER_DESCRIPTION": "このエピックを他の人が理解できるように説明を加えて下さい", + "TEAM_REQUIREMENT": "チームからの要求", + "CLIENT_REQUIREMENT": "お客様からの要求", + "BLOCKED": "ブロック中", + "BLOCKED_NOTE_PLACEHOLDER": "なぜこのエピックはブロックされているのか?", + "CREATE_EPIC": "エピックを作成" + } + }, + "PROJECTS": { + "PAGE_TITLE": "マイ プロジェクト - Taiga", + "PAGE_DESCRIPTION": "A list with all your projects, you can reorder or create a new one.", + "MY_PROJECTS": "マイ プロジェクト" + }, + "ATTACHMENT": { + "SECTION_NAME": "添付ファイル", + "TITLE": "{{ fileName }} が {{ date }} にアップロードされました", + "LIST_VIEW_MODE": "ライブビューモード", + "GALLERY_VIEW_MODE": "ギャラリービューモード", + "DESCRIPTION": "要約を入力", + "DEPRECATED": "(非推奨)", + "DEPRECATED_FILE": "推奨されませんか?", + "ADD": "新しい添付ファイルを追加する。 {{maxFileSizeMsg}}", + "DROP": "添付ファイルをここにドロップ!", + "SHOW_DEPRECATED": "+ 非推奨のアタッチメントを表示する", + "HIDE_DEPRECATED": "- 非推奨のアタッチメントを隠す", + "COUNT_DEPRECATED": "({{ counter }} deprecated)", + "MAX_UPLOAD_SIZE": "アップロード上限サイズは {{maxFileSize}} です", + "DATE": "YYYY年MM月DD日 hh時mm分", + "ERROR_UPLOAD_ATTACHMENT": "'{{fileName}}'のアップロードに失敗. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "添付ファイルの削除...", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "添付ファイル '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": " 削除に失敗: {{errorMessage}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。", + "FIELDS": { + "IS_DEPRECATED": "は非推奨です。" + } + }, + "PAGINATION": { + "PREVIOUS": "前へ", + "NEXT": "次へ" + }, + "ADMIN": { + "COMMON": { + "TITLE_ACTION_EDIT_VALUE": "値を編集", + "TITLE_ACTION_DELETE_VALUE": "値を削除", + "TITLE_ACTION_DELETE_TAG": "タグを削除" + }, + "HELP": "手助けが必要な場合はサポートページをチェックしてください。", + "PROJECT_DEFAULT_VALUES": { + "TITLE": "初期値設定", + "SUBTITLE": "プルダウン項目の初期値を設定してください。" + }, + "MEMBERSHIPS": { + "TITLE": "メンバー管理", + "PAGE_TITLE": "メンバーシップ - {{projectName}}", + "ADD_BUTTON": "+ 新規メンバー", + "ADD_BUTTON_TITLE": "新規メンバーを追加", + "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "このプロジェクトは許可されている最大メンバー数({{members}}名)に達しました。", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "このプロジェクトは許可されている最大メンバー数({{members}}名)に達しました。上限を増やしたい場合は管理者にお問い合わせください。" + }, + "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": "無効", + "EPICS": "エピック", + "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", + "BACKLOG": "バックログ", + "BACKLOG_DESCRIPTION": "ユーザーストーリーが適切にメンテナンスされるよう管理し、優先順位に基づく作業を行うためのビュー", + "NUMBER_SPRINTS": "予測されるスプリント数", + "NUMBER_SPRINTS_HELP": "0に設定した場合、無制限となります", + "NUMBER_US_POINTS": "予測されるストーリーポイントの合計", + "NUMBER_US_POINTS_HELP": "0に設定した場合、無制限となります", + "KANBAN": "かんばん", + "KANBAN_DESCRIPTION": "このかんばんを利用して、無駄のない方法でプロジェクトを整理しましょう。", + "ISSUES": "課題", + "ISSUES_DESCRIPTION": "プロジェクトのバグ追跡、質問、機能改善に関する議論などが行えるようになります。", + "WIKI": "Wiki", + "WIKI_DESCRIPTION": "他のメンバーと協力してコンテンツを編集することができます。
    プロジェクトの情報を文書化するのにぴったりです。", + "MEETUP": "会議", + "MEETUP_DESCRIPTION": "あなたが利用しているビデオ会議システムを選択してください。", + "SELECT_VIDEOCONFERENCE": "ビデオ会議システムを選択", + "SALT_CHAT_ROOM": "Add a prefix to the chatroom name", + "JITSI_CHAT_ROOM": "Jitsi", + "APPEARIN_CHAT_ROOM": "AppearIn", + "TALKY_CHAT_ROOM": "Talky", + "CUSTOM_CHAT_ROOM": "カスタム", + "URL_CHAT_ROOM": "チャットルームのURL" + }, + "PROJECT_PROFILE": { + "PAGE_TITLE": "{{sectionName}} - プロジェクトプロフィール - {{projectName}}", + "PROJECT_DETAILS": "プロジェクト詳細", + "PROJECT_NAME": "プロジェクト名", + "PROJECT_SLUG": "プロジェクトのスラッグ", + "TAGS": "タグ", + "DESCRIPTION": "説明", + "RECRUITING": "プロジェクトメンバーを探していますか?", + "RECRUITING_MESSAGE": "どんな人を探していますか?", + "RECRUITING_PLACEHOLDER": "探している人のプロフィールを記載してください", + "PUBLIC_PROJECT": "パブリック プロジェクト", + "PRIVATE_PROJECT": "非公開プロジェクト", + "PRIVATE_OR_PUBLIC": "パブリックプロジェクトとプライベートプロジェクトの違いは何ですか?", + "DELETE": "このプロジェクトを削除", + "LOGO_HELP": "画像は縦横80ピクセルに変換されます。", + "CHANGE_LOGO": "ロゴを変更", + "ACTION_USE_DEFAULT_LOGO": "デフォルトのイメージを使用する", + "MAX_PRIVATE_PROJECTS": "あなたの現在のプランで許可されている非公開プロジェクトの上限数に達しました。", + "MAX_PRIVATE_PROJECTS_MEMBERS": "非公開プロジェクトの最大メンバー数を超えました。", + "MAX_PUBLIC_PROJECTS": "あなたの現在のプランで許可されている公開プロジェクトの上限数に達しました。", + "MAX_PUBLIC_PROJECTS_MEMBERS": "The project exceeds your maximum number of members for public projects", + "PROJECT_OWNER": "プロジェクトオーナー", + "REQUEST_OWNERSHIP": "Request ownership", + "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "Do you want to become the new project owner?", + "REQUEST_OWNERSHIP_DESC": "Request that current project owner {{name}} transfer ownership of this project to you.", + "REQUEST_OWNERSHIP_BUTTON": "リクエスト", + "REQUEST_OWNERSHIP_SUCCESS": "プロジェクトオーナーに通知します。", + "CHANGE_OWNER": "オーナーを変更", + "CHANGE_OWNER_SUCCESS_TITLE": "あなたのリクエストが送信されました!", + "CHANGE_OWNER_SUCCESS_DESC": "We will notify you by email if the project ownership request is accepted or declined" + }, + "REPORTS": { + "TITLE": "レポート", + "SUBTITLE": "オリジナルのレポートを作成するためにプロジェクトのデータをCSVで出力することができます。", + "DESCRIPTION": "CSVのダウンロードボタンまたは生成されたURLへアクセスしてファイルを入手し、お好みのテキストエディタや表計算ソフトで開いてください。データの可視化や分析を簡単に行うことが可能です。", + "HELP": "このファイルをどうやって表計算ソフトで活用すればいいですか?", + "REGENERATE_TITLE": "URLが変更されます", + "REGENERATE_SUBTITLE": "CSV出力用のURLを変更しようとしています。前回のURLは無効化されます。よろしいですか?" + }, + "CSV": { + "SECTION_TITLE_EPIC": "エピックレポート", + "SECTION_TITLE_US": "ユーザーストーリーを出力する", + "SECTION_TITLE_TASK": "タスクを出力する", + "SECTION_TITLE_ISSUE": "課題を出力する", + "DOWNLOAD": "CSVのダウンロード", + "URL_FIELD_PLACEHOLDER": "CSV出力用のURLを作成してください", + "TITLE_REGENERATE_URL": "CSV出力用のURLを作成", + "ACTION_GENERATE_URL": "URL を生成", + "ACTION_REGENERATE": "再作成" + }, + "CUSTOM_FIELDS": { + "TITLE": "カスタムフィールド", + "SUBTITLE": "ユーザーストーリー、タスク、課題のためのカスタムフィールドを明記してください。", + "EPIC_DESCRIPTION": "エピックカスタムフィールド", + "EPIC_ADD": "複数のエピックにカスタムフィールドを追加", + "US_DESCRIPTION": "ユーザーストーリーのカスタムフィールド", + "US_ADD": "ユーザーストーリーにカスタムフィールドを追加", + "TASK_DESCRIPTION": "タスクカスタムフィールド", + "TASK_ADD": "タスクにカスタムフィールドを追加", + "ISSUE_DESCRIPTION": "課題のカスタムフィールド", + "ISSUE_ADD": "課題にカスタムフィールドを追加", + "FIELD_TYPE_TEXT": "テキスト", + "FIELD_TYPE_MULTI": "マルチライン", + "FIELD_TYPE_DATE": "日時", + "FIELD_TYPE_URL": "Url" + }, + "PROJECT_VALUES": { + "PAGE_TITLE": "{{sectionName}} - Project values - {{projectName}}", + "REPLACEMENT": "この値を持つすべてのアイテムはこちらに変更されます:", + "ERROR_DELETE_ALL": "すべての値を削除することはできません。" + }, + "PROJECT_VALUES_POINTS": { + "TITLE": "ポイント", + "SUBTITLE": "予測されるユーザーストーリーのポイントを定義することができます。", + "US_TITLE": "ユーザーストーリーのポイント", + "ACTION_ADD": "新規ポイントを追加" + }, + "PROJECT_VALUES_PRIORITIES": { + "TITLE": "優先度", + "SUBTITLE": "課題の優先度を定義することができます。", + "ISSUE_TITLE": "課題の優先度", + "ACTION_ADD": "新しい優先度を追加" + }, + "PROJECT_VALUES_SEVERITIES": { + "TITLE": "深刻度", + "SUBTITLE": "課題の深刻度を定義することができます。", + "ISSUE_TITLE": "課題の深刻度", + "ACTION_ADD": "新しい深刻度を追加" + }, + "PROJECT_VALUES_STATUS": { + "TITLE": "ステータス", + "SUBTITLE": "ユーザーストーリー、タスク、課題のステータスを定義することができます。", + "EPIC_TITLE": "エピックステータス", + "US_TITLE": "ユーザーストーリーステータス", + "TASK_TITLE": "タスクのステータス", + "ISSUE_TITLE": "課題のステータス" + }, + "PROJECT_VALUES_TYPES": { + "TITLE": "タイプ", + "SUBTITLE": "課題のタイプを定義することができます。", + "ISSUE_TITLE": "課題のタイプ", + "ACTION_ADD": "新しい {{objName}} を追加" + }, + "PROJECT_VALUES_TAGS": { + "TITLE": "タグ", + "SUBTITLE": "タグの色を編集", + "EMPTY": "タグは現在ありません。", + "EMPTY_SEARCH": "検索条件に当てはまるものはありませんでした。", + "ACTION_ADD": "タグを追加", + "NEW_TAG": "新規タグ", + "MIXING_HELP_TEXT": "マージしたいタグを選択してください。", + "MIXING_MERGE": "Merge Tags", + "SELECTED": "Selected" + }, + "ROLES": { + "PAGE_TITLE": "役割 - {{projectName}}", + "WARNING_NO_ROLE": "Be careful, no role in your project will be able to estimate the point value for user stories", + "HELP_ROLE_ENABLED": "この設定を有効にするとメンバーがこの役割にアサインされた際、ユーザーストーリーのポイントに反映されます。", + "DISABLE_COMPUTABLE_ALERT_TITLE": "Are you sure you want to disable this role estimations?", + "DISABLE_COMPUTABLE_ALERT_SUBTITLE": "If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed", + "COUNT_MEMBERS": "{{ role.members_count }} members with this role", + "TITLE_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": "すべての値を削除することはできません", + "EXTERNAL_USER": "外部ユーザー" + }, + "THIRD_PARTIES": { + "SECRET_KEY": "シークレットキー", + "PAYLOAD_URL": "Payload URL", + "VALID_IPS": "Valid origin IPs (separated by ,)" + }, + "BITBUCKET": { + "SECTION_NAME": "Bitbucket", + "PAGE_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": "Gitlab", + "PAGE_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": "Github", + "PAGE_TITLE": "Github - {{projectName}}" + }, + "GOGS": { + "SECTION_NAME": "Gogs", + "PAGE_TITLE": "Gogs - {{projectName}}" + }, + "WEBHOOKS": { + "PAGE_TITLE": "Webhooks - {{projectName}}", + "SECTION_NAME": "Webhooks", + "SUBTITLE": "Webhookは外部サービスへコメントやユーザーストーリーといったTaigaのイベントを通知します。", + "ADD_NEW": "新規Webhookを追加", + "TYPE_NAME": "サービス名を入力", + "TYPE_PAYLOAD_URL": "サービスペイロードのURLを入力", + "TYPE_SERVICE_SECRET": "サービスのシークレットキーを入力", + "SAVE": "Webhookを保存", + "CANCEL": "Webhookをキャンセル", + "SHOW_HISTORY": "(履歴を表示)", + "TEST": "Webhookをテスト", + "EDIT": "Webhookを編集", + "DELETE": "Webhookを削除", + "REQUEST": "リクエスト", + "RESEND_REQUEST": "リクエストを再送", + "HEADERS": "ヘッダー", + "PAYLOAD": "Payload", + "RESPONSE": "レスポンス", + "DATE": "YYYY年MM月DD日 hh時mm分ss秒", + "ACTION_HIDE_HISTORY": "(履歴を非表示)", + "ACTION_HIDE_HISTORY_TITLE": "履歴を非表示", + "ACTION_SHOW_HISTORY": "(履歴を表示)", + "ACTION_SHOW_HISTORY_TITLE": "履歴を表示", + "WEBHOOK_NAME": "Webhook '{{name}}'" + }, + "CUSTOM_ATTRIBUTES": { + "PAGE_TITLE": "{{sectionName}} - カスタム属性 - {{projectName}}", + "ADD": "カスタムフィールド追加", + "EDIT": "カスタムフィールドを編集", + "DELETE": "カスタムフィールドを削除", + "SAVE_TITLE": "カスタムフィールドを保存", + "CANCEL_TITLE": "作成するのをやめる", + "SET_FIELD_NAME": "カスタムフィールド名を設定", + "SET_FIELD_DESCRIPTION": "カスタムフィールドの説明を設定", + "FIELD_TYPE_DEFAULT": "-- 1つ選択 --", + "ACTION_UPDATE": "カスタムフィールドを更新", + "ACTION_CANCEL_EDITION": "編集をキャンセル" + }, + "MEMBERSHIP": { + "COLUMN_MEMBER": "メンバー", + "COLUMN_ADMIN": "管理", + "COLUMN_ROLE": "役割", + "COLUMN_STATUS": "ステータス", + "STATUS_ACTIVE": "有効", + "STATUS_PENDING": "Pending", + "DELETE_MEMBER": "メンバーを削除", + "RESEND": "再送信", + "SUCCESS_SEND_INVITATION": "招待メールを '{{email}}' へもう一度送りました。", + "ERROR_SEND_INVITATION": "招待はまだ送られていません。", + "SUCCESS_DELETE": "{{message}} を削除しました", + "ERROR_DELETE": "{{message}} を削除できませんでした", + "DEFAULT_DELETE_MESSAGE": "{{email}} への招待メール" + }, + "DEFAULT_VALUES": { + "LABEL_EPIC_STATUS": "エピックステータスの初期値", + "LABEL_US_STATUS": "ユーザーストーリーステータスの初期値", + "LABEL_POINTS": "ポイントの初期値", + "LABEL_TASK_STATUS": "タスクステータスの初期値", + "LABEL_ISSUE_TYPE": "課題タイプの初期値", + "LABEL_ISSUE_STATUS": "課題ステータスの初期値", + "LABEL_PRIORITY": "優先度の初期値", + "LABEL_SEVERITY": "深刻度の初期値" + }, + "STATUS": { + "PLACEHOLDER_WRITE_STATUS_NAME": "新しいステータス名を記入" + }, + "TYPES": { + "PLACEHOLDER_WRITE_NAME": "新しいエレメント名を記入" + }, + "US_STATUS": { + "ACTION_ADD_STATUS": "ステータスを追加", + "IS_ARCHIVED_COLUMN": "アーカイブ", + "IS_CLOSED_COLUMN": "終了", + "WIP_LIMIT_COLUMN": "WIP制限", + "PLACEHOLDER_WRITE_NAME": "新しいステータス名を記入" + }, + "MENU": { + "TITLE": "管理", + "PROJECT": "プロジェクト", + "ATTRIBUTES": "属性", + "MEMBERS": "メンバー", + "PERMISSIONS": "権限", + "INTEGRATIONS": "インテグレーション", + "PLUGINS": "プラグイン" + }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "属性" + }, + "SUBMENU_PROJECT_VALUES": { + "STATUS": "ステータス", + "POINTS": "ポイント", + "PRIORITIES": "優先度", + "SEVERITIES": "深刻度", + "TYPES": "タイプ", + "CUSTOM_FIELDS": "カスタムフィールド", + "TAGS": "タグ" + }, + "SUBMENU_PROJECT_PROFILE": { + "TITLE": "プロジェクトプロフィール" + }, + "SUBMENU_ROLES": { + "TITLE": "役割", + "ACTION_NEW_ROLE": "+ 新規役割", + "TITLE_ACTION_NEW_ROLE": "新しい役割を追加" + }, + "SUBMENU_THIDPARTIES": { + "TITLE": "サービス" + }, + "PROJECT_TRANSFER": { + "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "新しいプロジェクトオーナーとなりますか?", + "PRIVATE": "プライベート", + "ACCEPTED_PROJECT_OWNERNSHIP": "おめでとうございます!あなたが新しいプロジェクトオーナーです。", + "REJECTED_PROJECT_OWNERNSHIP": "OK. We'll contact the current project owner", + "ACCEPT": "はい", + "REJECT": "却下", + "PROPOSE_OWNERSHIP": "プロジェクト {{project}} の現在のプロジェクトオーナー {{owner}} が、あなたに新しいプロジェクトオーナーになるようリクエストしています。", + "ADD_COMMENT": "プロジェクトオーナーにコメントしますか?", + "UNLIMITED_PROJECTS": "Unlimited", + "OWNER_MESSAGE": { + "PRIVATE": "あなたが持てる非公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。", + "PUBLIC": "あなたが持てる公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。" + }, + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", + "CHANGE_MY_PLAN": "プランを変更" + } + }, + "USER": { + "PROFILE": { + "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", + "EDIT": "プロフィールを編集", + "FOLLOW": "フォロー", + "CLOSED_US": "終了した
    ストーリー", + "PROJECTS": "プロジェクト", + "PROJECTS_EMPTY": "{{username}} はまだプロジェクトに参加していません", + "CONTACTS": "連絡先", + "CONTACTS_EMPTY": "{{username}} はまだ連絡先を持っていません", + "CURRENT_USER_CONTACTS_EMPTY": "あなたへのコンタクトはまだありません。", + "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Taigaで一緒に仕事をしたメンバーは自動的に連絡先へ追加されます", + "REPORT": "悪用を報告", + "TABS": { + "ACTIVITY_TAB": "タイムライン", + "ACTIVITY_TAB_TITLE": "このユーザのすべてのアクティビティーを表示する", + "PROJECTS_TAB": "プロジェクト", + "PROJECTS_TAB_TITLE": "ユーザーが参加しているプロジェクト", + "LIKES_TAB": "いいね", + "LIKES_TAB_TITLE": "このユーザーが「いいね」と評価したすべての内容を表示", + "VOTES_TAB": "投票", + "VOTES_TAB_TITLE": "このユーザーが「賛成」したすべての内容を表示", + "WATCHED_TAB": "フォロー", + "WATCHED_TAB_TITLE": "このユーザーが「フォロー」したすべての内容を表示", + "CONTACTS_TAB": "連絡先", + "CONTACTS_TAB_TITLE": "このユーザーが「コンタクト」したすべての内容を表示" + } + }, + "PROFILE_SIDEBAR": { + "TITLE": "プロフィール", + "DESCRIPTION": "すべてのメンバーはあなたが完了させた作業、あなたが今取り組んでいる作業を確認することができます。自己紹介を追記してあなたについてもっと知ってもらいましょう!", + "ADD_INFO": "編集する" + }, + "PROFILE_FAVS": { + "FILTER_INPUT_PLACEHOLDER": "入力してください", + "FILTER_TYPE_ALL": "すべて", + "FILTER_TYPE_ALL_TITLE": "すべてを表示", + "FILTER_TYPE_PROJECTS": "プロジェクト", + "FILTER_TYPE_PROJECT_TITLES": "プロジェクトのみ表示", + "FILTER_TYPE_EPICS": "エピック", + "FILTER_TYPE_EPIC_TITLES": "エピックのみ表示", + "FILTER_TYPE_USER_STORIES": "ストーリー", + "FILTER_TYPE_USER_STORIES_TITLES": "ユーザーストーリーを表示", + "FILTER_TYPE_TASKS": "タスク", + "FILTER_TYPE_TASK_TITLES": "タスクのみ表示", + "FILTER_TYPE_ISSUES": "課題", + "FILTER_TYPE_ISSUES_TITLE": "課題のみ表示", + "EMPTY_TITLE": "表示するものがありません。" + } + }, + "PROJECT": { + "PAGE_TITLE": "{{projectName}}", + "WELCOME": "ようこそ", + "SECTION_PROJECTS": "プロジェクト", + "HELP": "最も良く使うプロジェクトがトップになるように順序を入れ替えてみましょう。
    トップ10のプロジェクトが上のナビゲーションバーのプロジェクトリストに現れます。", + "PRIVATE": "プライベート プロジェクト", + "LOOKING_FOR_PEOPLE": "プロジェクトはメンバーを探しています", + "FANS_COUNTER_TITLE": "{total, plural, one{one fan} other{# 人のファン}}", + "WATCHERS_COUNTER_TITLE": "{total, plural, one{one watcher} other{# 人がフォロー中}}", + "MEMBERS_COUNTER_TITLE": "{total, plural, one{one member} other{# 人のメンバー}}", + "BLOCKED_PROJECT": { + "BLOCKED": "ブロックされたプロジェクト", + "THIS_PROJECT_IS_BLOCKED": "このプロジェクトは一時的にブロックされています。", + "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "プロジェクトのブロックを解除したい場合は管理者にお問い合わせください。" + }, + "STATS": { + "PROJECT": "プロジェクト
    ポイント", + "DEFINED": "定義された
    ポイント", + "ASSIGNED": "アサイン済み
    ポイント", + "CLOSED": "closed
    points" + }, + "SECTION": { + "SEARCH": "検索", + "TIMELINE": "タイムライン", + "BACKLOG": "バックログ", + "KANBAN": "かんばん", + "ISSUES": "課題", + "WIKI": "Wiki", + "TEAM": "チーム", + "MEETUP": "会議", + "ADMIN": "管理" + }, + "NAVIGATION": { + "SECTION_TITLE": "あなたのプロジェクト", + "PLACEHOLDER_SEARCH": "検索...", + "ACTION_CREATE_PROJECT": "プロジェクトを作成", + "ACTION_IMPORT_PROJECT": "プロジェクトをインポート", + "MANAGE_PROJECTS": "プロジェクト管理", + "TITLE_CREATE_PROJECT": "プロジェクトを作成", + "TITLE_IMPORT_PROJECT": "プロジェクトをインポート", + "TITLE_PRVIOUS_PROJECT": "前のプロジェクトを表示", + "TITLE_NEXT_PROJECT": "次のプロジェクトを表示", + "HELP_TITLE": "Taiga サポートページ", + "HELP": "ヘルプ", + "HOMEPAGE": "ホームページ", + "FEEDBACK_TITLE": "フィードバックを送る", + "FEEDBACK": "フィードバック", + "NOTIFICATIONS_TITLE": "通知設定を編集", + "NOTIFICATIONS": "通知", + "ORGANIZATIONS_TITLE": "あなたの組織を編集してください", + "ORGANIZATIONS": "組織を編集", + "SETTINGS_TITLE": "設定を編集", + "SETTINGS": "設定", + "VIEW_PROFILE_TITLE": "プロフィールを表示", + "VIEW_PROFILE": "プロフィールを表示", + "EDIT_PROFILE_TITLE": "プロフィールを編集", + "EDIT_PROFILE": "プロフィールを編集", + "CHANGE_PASSWORD_TITLE": "パスワード変更", + "CHANGE_PASSWORD": "パスワード変更", + "DASHBOARD_TITLE": "ダッシュボード", + "DISCOVER_TITLE": "トレンドプロジェクトを探す", + "NEW_ITEM": "新規", + "DISCOVER": "Discover", + "ACTION_REORDER": "ドラッグ&ドロップで入れ替え" + }, + "IMPORT": { + "TITLE": "プロジェクトをインポート中", + "UPLOADING_FILE": "ダンプファイルをアップロード中", + "DESCRIPTION": "このプロセスには時間がかかります。ウィンドウを開いたままにしていてください。", + "ASYNC_IN_PROGRESS_TITLE": "ウンパルンパたちがあなたのプロジェクトをインポートしています。", + "ASYNC_IN_PROGRESS_MESSAGE": "この処理には時間がかかります。
    準備が出来たらメールで通知します。", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 中 {{uploadedSize}} アップロード済み", + "ERROR": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。もう一度お試しください。", + "ERROR_TOO_MANY_REQUEST": "すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。", + "ERROR_MESSAGE": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。  \n{{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。", + "SYNC_SUCCESS": "プロジェクトのインポートに成功しました", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC": "インポートしようとしているプロジェクトのメンバー数は{{members}}名ですが、あなたの現在のプランでは1プロジェクトごとに最大{{max_memberships}}名のみ許可されています。 上限を増やしたい場合は管理者にお問い合わせください。", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "現在のプランではこれ以上の非公開プロジェクトは許可されていません。", + "DESC": "インポートしようとしているプロジェクトは非公開プロジェクトです。現在のプランではこれ以上の非公開プロジェクトは許可されていません。" + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "現在のプランではこれ以上の公開プロジェクトは許可されていません。", + "DESC": "インポートしようとしているプロジェクトは公開プロジェクトです。現在のプランではこれ以上の公開プロジェクトは許可されていません。" + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "現在のプランでは非公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "現在のプランでは公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。" + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "現在のプランではこれ以上の非公開プロジェクトの作成や、一つの非公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。", + "DESC": "インポートしようとしているのは非公開プロジェクトで{{members}}名のメンバーがいます。" + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "現在のプランではこれ以上の公開プロジェクトの作成や、一つの公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。", + "DESC": "インポートしようとしているのは公開プロジェクトで{{members}}名以上のメンバーがいます。" + } + } + }, + "LIKE_BUTTON": { + "LIKE": "いいね", + "LIKED": "いいね", + "UNLIKE": "「いいね」を取り消す", + "BUTTON_TITLE": "Like or unlike this project", + "COUNTER_TITLE": "{total, plural, one{one fan} other{# 人のファン}}" + }, + "WATCH_BUTTON": { + "BUTTON_TITLE": "このプロジェクトをフォローして通知ポリシーを設定してください", + "WATCH": "フォロー", + "WATCHING": "フォロー中", + "COUNTER_TITLE": "{total, plural, one{one watcher} other{# 人がフォロー中}}", + "OPTIONS": { + "NOTIFY_ALL": "すべての通知を受信する", + "NOTIFY_ALL_TITLE": "このプロジェクトのすべての通知を受信する", + "NOTIFY_INVOLVED": "関連するものだけ", + "NOTIFY_INVOLVED_TITLE": "Recive notificacions only when you are involved", + "UNWATCH": "フォローをやめる", + "UNWATCH_TITLE": "プロジェクトのフォローをやめる" + } + } + }, + "LIGHTBOX": { + "DELETE_ACCOUNT": { + "SECTION_NAME": "Taigaアカウントを削除", + "CONFIRM": "本当にあなたのTaigaアカウントを削除してもよろしいですか?", + "NEWSLETTER_LABEL_TEXT": "ニュースレターを購読しない", + "CANCEL": "設定に戻る", + "ACCEPT": "アカウントを削除する", + "BLOCK_PROJECT": "あなたが所有しているプロジェクトは、あなたのアカウント削除後にブロックされることを覚えておいてください。あなたのアカウントが削除されてプロジェクトがブロックされる前にプロジェクトの所有権を他のメンバーに譲渡してください。", + "SUBTITLE": "お別れすることになって残念です。またのご利用をお待ちしております :(" + }, + "DELETE_PROJECT": { + "TITLE": "プロジェクトを削除", + "QUESTION": "本当にこのプロジェクトを削除していいですか?", + "SUBTITLE": "プロジェクトのすべてのデータ (ユーザーストーリー、タスク、課題、スプリント、Wikiページ) が失われます! :-(", + "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": "last sprint is {{lastSprint}} ;-) " + }, + "CREATE_EDIT_TASK": { + "TITLE": "新しいタスク", + "PLACEHOLDER_SUBJECT": "タスク名", + "PLACEHOLDER_STATUS": "タスクステータス", + "OPTION_UNASSIGNED": "未アサイン", + "PLACEHOLDER_SHORT_DESCRIPTION": "要約を入力", + "ACTION_EDIT": "タスクを編集" + }, + "CREATE_EDIT_US": { + "TITLE": "新規 US", + "PLACEHOLDER_DESCRIPTION": "このユーザーストーリーを他の人が理解できるように説明を加えてください", + "NEW_US": "新しいユーザーストーリー", + "EDIT_US": "ユーザーストーリーを編集" + }, + "DELETE_SPRINT": { + "TITLE": "スプリントを削除" + }, + "CREATE_MEMBER": { + "PLACEHOLDER_INVITATION_TEXT": "(オプション)招待する際のメッセージを追加できます。新メンバーに素敵なメッセージを伝えましょう!", + "PLACEHOLDER_TYPE_EMAIL": "メールアドレスを入力", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "このプロジェクトで許可されている最大メンバー数{{maxMembers}}名に達しようとしています。上限を増やしたい場合は管理者にお問い合わせください。", + "LIMIT_USERS_WARNING_MESSAGE": "このプロジェクトで許可されている最大メンバー数{{maxMembers}}名に達しようとしています。" + }, + "LEAVE_PROJECT_WARNING": { + "TITLE": "オーナーが不在となるため、プロジェクトを離脱することができません。", + "CURRENT_USER_OWNER": { + "DESC": "現在、あなたはこのプロジェクトのオーナーです。プロジェクトを去る前にオーナーの権限を他の誰かに譲渡してください。", + "BUTTON": "プロジェクトのオーナーを変更する" + }, + "OTHER_USER_OWNER": { + "DESC": "現在のプロジェクトのプロジェクトオーナーを削除することはできません。まず新しいプロジェクトオーナーを割り当ててください。", + "BUTTON": "プロジェクトオーナーの変更をリクエストする。" + } + }, + "CHANGE_OWNER": { + "TITLE": "誰を新しいプロジェクトオーナーにしたいですか?", + "ADD_COMMENT": "コメントを追加", + "BUTTON": "このメンバーを新しいプロジェクトオーナーにする。" + } + }, + "EPIC": { + "PAGE_TITLE": "{{epicSubject}} - エピック {{epicRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "ステータス: {{epicStatus }}. 説明: {{epicDescription}}", + "SECTION_NAME": "エピック", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "関連するユーザーストーリーのリンクを削除", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "関連するユーザーストーリー '{{subject}}' とのリンクが削除されます。", + "ERROR_UNLINK_RELATED_USERSTORY": "リンクの削除に失敗: {{errorMessage}}", + "CREATE_RELATED_USERSTORIES": "関連付ける", + "NEW_USERSTORY": "新しいユーザーストーリー", + "EXISTING_USERSTORY": "既存のユーザーストーリー", + "CHOOSE_PROJECT_FOR_CREATION": "プロジェクトとは?", + "SUBJECT": "題名", + "SUBJECT_BULK_MODE": "題名 (一括登録)", + "CHOOSE_PROJECT_FROM": "プロジェクトとは?", + "CHOOSE_USERSTORY": "ユーザーストーリーとは?", + "NO_USERSTORIES": "このプロジェクトにはユーザーストーリーがまだありません。別のプロジェクトを選択してください。", + "FILTER_USERSTORIES": "ユーザーストーリーをフィルター", + "LIGHTBOX_TITLE_BLOKING_EPIC": "ブロックしているエピック", + "ACTION_DELETE": "エピックの削除" + }, + "US": { + "PAGE_TITLE": "{{userStorySubject}} - ユーザーストーリー {{userStoryRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "ステータス: {{userStoryStatus }}. 進捗 {{userStoryProgressPercentage}}% ({{userStoryTotalTasks}}中{{userStoryClosedTasks}}タスク完了). ポイント: {{userStoryPoints}}. 説明: {{userStoryDescription}}", + "SECTION_NAME": "ユーザーストーリー", + "LINK_TASKBOARD": "タスクボード", + "TITLE_LINK_TASKBOARD": "タスクボードに移動", + "TOTAL_POINTS": "合計ポイント", + "ADD": "+ 新規ユーザーストーリーを追加する", + "ADD_BULK": "新規ユーザーストーリーを一括で追加する", + "PROMOTED": "This US has been promoted from Issue:", + "TITLE_LINK_GO_TO_ISSUE": "課題へ移動", + "EXTERNAL_REFERENCE": "This US has been created from", + "GO_TO_EXTERNAL_REFERENCE": "originへ移動", + "BLOCKED": "このユーザーストーリーはブロックされています", + "TITLE_DELETE_ACTION": "ユーザーストーリーを削除", + "LIGHTBOX_TITLE_BLOKING_US": "Blocking us", + "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} タスク完了", + "ASSIGN": "ユーザーストーリーの割当", + "NOT_ESTIMATED": "見積もりが行われていません", + "TOTAL_US_POINTS": "合計ユーザーストーリーポイント", + "TRIBE": { + "PUBLISH": "Publish as Gig in Taiga Tribe", + "PUBLISH_INFO": "詳細表示", + "PUBLISH_TITLE": "More info on publishing in Taiga Tribe", + "PUBLISHED_AS_GIG": "Story published as Gig in Taiga Tribe", + "EDIT_LINK": "リンクを編集", + "CLOSE": "Close", + "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", + "PUBLISH_MORE_INFO_TITLE": "このタスクに誰か必要ですか?", + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + }, + "FIELDS": { + "TEAM_REQUIREMENT": "チームからの要求", + "CLIENT_REQUIREMENT": "お客様からの要求", + "FINISH_DATE": "終了日" + } + }, + "COMMENTS": { + "DELETED_INFO": "{{user}}によってコメントは削除されました。", + "TITLE": "コメント", + "COMMENTS_COUNT": "{{comments}}コメント", + "ORDER": "Order", + "OLDER_FIRST": "古い順", + "RECENT_FIRST": "新しい順", + "COMMENT": "コメント", + "EDIT_COMMENT": "コメントを編集", + "EDITED_COMMENT": "Edited:", + "SHOW_HISTORY": "View historic", + "TYPE_NEW_COMMENT": "新しいコメントをここに入力", + "SHOW_DELETED": "削除済コメントを表示", + "HIDE_DELETED": "削除済コメントを隠す", + "DELETE": "コメントを削除", + "RESTORE": "コメントを復元", + "HISTORY": { + "TITLE": "アクティビティ" + } + }, + "ACTIVITY": { + "SHOW_ACTIVITY": "アクティビティを表示", + "DATETIME": "YYYY年MM月DD日 HH時mm分", + "SHOW_MORE": "+ 前のエントリーを表示 ({{showMore}} more)", + "TITLE": "アクティビティ", + "ACTIVITIES_COUNT": "{{activities}} Activities", + "REMOVED": "削除", + "ADDED": "追加", + "TAGS_ADDED": "tags added:", + "TAGS_REMOVED": "tags removed:", + "US_POINTS": "{{role}} ポイント", + "NEW_ATTACHMENT": "新しい添付ファイル:", + "DELETED_ATTACHMENT": "削除された添付ファイル:", + "UPDATED_ATTACHMENT": "更新された添付ファイル ({{filename}}):", + "CREATED_CUSTOM_ATTRIBUTE": "カスタム属性を作成しました", + "UPDATED_CUSTOM_ATTRIBUTE": "カスタム属性を更新しました", + "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", + "BECAME_DEPRECATED": "became deprecated", + "BECAME_UNDEPRECATED": "became undeprecated", + "TEAM_REQUIREMENT": "チームからの要求", + "CLIENT_REQUIREMENT": "お客様からの要求", + "BLOCKED": "ブロック中", + "VALUES": { + "YES": "はい", + "NO": "no", + "EMPTY": "空", + "UNASSIGNED": "未割当" + }, + "FIELDS": { + "SUBJECT": "題名", + "NAME": "名前", + "DESCRIPTION": "説明", + "CONTENT": "コンテンツ", + "STATUS": "ステータス", + "IS_CLOSED": "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": "is iocaine", + "TAGS": "タグ", + "ATTACHMENTS": "添付ファイル", + "IS_DEPRECATED": "は非推奨です。", + "IS_NOT_DEPRECATED": "is not deprecated", + "ORDER": "表示順", + "BACKLOG_ORDER": "バックログオーダー", + "SPRINT_ORDER": "スプリントオーダー", + "KANBAN_ORDER": "かんばんオーダー", + "TASKBOARD_ORDER": "タスクボードオーダー", + "US_ORDER": "ユーザーストーリー順", + "COLOR": "色" + } + }, + "BACKLOG": { + "PAGE_TITLE": "バックログ - {{projectName}}", + "PAGE_DESCRIPTION": "The backlog panel, with user stories and sprints of the project {{projectName}}: {{projectDescription}}", + "SECTION_NAME": "バックログ", + "CUSTOMIZE_GRAPH": "バックロググラフのカスタマイズ", + "CUSTOMIZE_GRAPH_TEXT": "To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the", + "CUSTOMIZE_GRAPH_ADMIN": "管理", + "CUSTOMIZE_GRAPH_TITLE": "管理ユーザーでポイントとスプリントを設定してください。", + "MOVE_US_TO_CURRENT_SPRINT": "現在のスプリントに移動", + "MOVE_US_TO_LATEST_SPRINT": "最新のスプリントに移動", + "SHOW_FILTERS": "フィルターを表示", + "SHOW_TAGS": "タグを表示", + "EMPTY": "バックログが空です!", + "CREATE_NEW_US": "新規US作成", + "CREATE_NEW_US_EMPTY_HELP": "新しくユーザーストーリーを作成してください。", + "EXCESS_OF_POINTS": "Excess of points", + "PENDING_POINTS": "Pending Points", + "CLOSED_POINTS": "closed", + "COMPACT_SPRINT": "Compact Sprint", + "GO_TO_TASKBOARD": "タスクボード {{::name}} へ移動", + "EDIT_SPRINT": "スプリントを編集", + "TOTAL_POINTS": "合計", + "STATUS_NAME": "ステータス名", + "SORTABLE_FILTER_ERROR": "You can't drop on backlog when filters are open", + "DOOMLINE": "Project Scope [Doomline]", + "CHART": { + "XAXIS_LABEL": "スプリント", + "YAXIS_LABEL": "ポイント", + "OPTIMAL": "Optimal pending points for sprint \"{{sprintName}}\" should be {{value}}", + "REAL": "Real pending points for sprint \"{{sprintName}}\" is {{value}}", + "INCREMENT_TEAM": "Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}", + "INCREMENT_CLIENT": "Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}" + }, + "TAGS": { + "TOGGLE": "タグ表示を固定", + "SHOW": "タグを表示", + "HIDE": "タグを非表示" + }, + "FORECASTING": { + "TITLE": "Velocity forecasting", + "BACKLOG": "バックログを表示", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, + "TABLE": { + "COLUMN_US": "User Stories", + "TITLE_COLUMN_POINTS": "役割ごとにビューを選択" + }, + "SPRINT_SUMMARY": { + "TOTAL_POINTS": "合計
    ポイント", + "COMPLETED_POINTS": "完了済み
    ポイント", + "OPEN_TASKS": "オープン
    タスク", + "CLOSED_TASKS": "完了済み
    タスク", + "IOCAINE_DOSES": "iocaine
    doses", + "SHOW_STATISTICS_TITLE": "Show statistics", + "TOGGLE_BAKLOG_GRAPH": "バーンダウングラフ 表示/非表示", + "POINTS_PER_ROLE": "役割ごとのポイント" + }, + "SUMMARY": { + "PROJECT_POINTS": "プロジェクト
    ポイント", + "DEFINED_POINTS": "定義された
    ポイント", + "CLOSED_POINTS": "closed
    points", + "POINTS_PER_SPRINT": "ポイント /
    スプリント" + }, + "FILTERS": { + "TOGGLE": "フィルター表示を固定", + "TITLE": "フィルター", + "REMOVE": "フィルターを削除", + "HIDE": "フィルターを非表示", + "SHOW": "フィルターを表示" + }, + "SPRINTS": { + "TITLE": "スプリント", + "DATE": "YYYY年MM月DD日", + "LINK_TASKBOARD": "スプリントタスクボード", + "TITLE_LINK_TASKBOARD": "タスクボード{{name}}へ移動", + "NUMBER_SPRINTS": "
    スプリント", + "EMPTY": "まだスプリントはありません", + "WARNING_EMPTY_SPRINT_ANONYMOUS": "This sprint has no User Stories", + "WARNING_EMPTY_SPRINT": "新しいスプリントを始めるために、バックログからストーリーをここにドロップしてください。", + "TITLE_ACTION_NEW_SPRINT": "新しいスプリントを追加", + "TEXT_ACTION_NEW_SPRINT": "新しくスプリントをプロジェクトに作成してください。", + "ACTION_SHOW_CLOSED_SPRINTS": "終了したスプリントを表示", + "ACTION_HIDE_CLOSED_SPRINTS": "終了したスプリントを非表示" + } + }, + "ERROR": { + "TEXT1": "何かよくないことが発生したようですがウンパルンパたちは問題なく作業しています。", + "NOT_FOUND": "見つかりません", + "NOT_FOUND_TEXT": "Error 404. 参照しようとしているページはすでに存在しません。TAIGAホームページに戻って探してみてください。", + "PERMISSION_DENIED": "権限がありません", + "PERMISSION_DENIED_TEXT": "このページへのアクセスが許可されていません。", + "VERSION_ERROR": "以前、Taigaの中の誰かが変更をしたためウンパルンパたちはあなたの変更を適用できません。リロードをしてもう一度適用してみてください。(現在の変更は失われます)" + }, + "TASKBOARD": { + "PAGE_TITLE": "{{sprintName}} - スプリントタスクボード - {{projectName}}", + "PAGE_DESCRIPTION": "Sprint {{sprintName}} (from {{startDate}} to {{endDate}}) of {{projectName}}. Completed {{completedPercentage}}% ({{completedPoints}} of {{totalPoints}} points). {{openTasks}} opened tasks of {{totalTasks}}.", + "SECTION_NAME": "タスクボード", + "TITLE_ACTION_ADD": "新規タスクを追加", + "TITLE_ACTION_ADD_BULK": "新規タスクを一括で追加する", + "TITLE_ACTION_ASSIGN": "タスクをアサイン", + "TITLE_ACTION_EDIT": "タスクを編集", + "PLACEHOLDER_CARD_TITLE": "This could be a task", + "PLACEHOLDER_CARD_TEXT": "ストーリーを分割しタスクとして別管理する。", + "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": "ポイント", + "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", + "REAL": "Real pending points for day {{formattedDate}} is {{roundedValue}}", + "DATE": "YYYY年MM月DD日" + } + }, + "TASK": { + "PAGE_TITLE": "{{taskSubject}} - タスク {{taskRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "ステータス: {{taskStatus }}. 説明: {{taskDescription}}", + "SECTION_NAME": "タスク", + "LINK_TASKBOARD": "タスクボード", + "TITLE_LINK_TASKBOARD": "タスクボードに移動", + "PLACEHOLDER_SUBJECT": "新しいタスク名を入力", + "TITLE_SELECT_STATUS": "ステータス名", + "OWNER_US": "このタスクはこちらに属しています。", + "TITLE_LINK_GO_OWNER": "ユーザーストーリーに移動", + "ORIGIN_US": "このタスクはこちらから作成されました。", + "TITLE_LINK_GO_ORIGIN": "ユーザーストーリーに移動", + "BLOCKED": "このタスクはブロックされています。", + "TITLE_DELETE_ACTION": "タスクを削除", + "LIGHTBOX_TITLE_BLOKING_TASK": "Blocking task", + "FIELDS": { + "MILESTONE": "スプリント", + "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": "すべて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": "One click more and your email will be updated!", + "PLACEHOLDER_INPUT_TOKEN": "メールトークンを変更", + "ACTION_CHANGE_EMAIL": "メール変更", + "SUCCESS": "Our Oompa Loompas updated your email" + }, + "ISSUES": { + "PAGE_TITLE": "課題 - {{projectName}}", + "PAGE_DESCRIPTION": "課題一覧パネル {{projectName}}: {{projectDescription}}", + "LIST_SECTION_NAME": "課題", + "SECTION_NAME": "課題", + "ACTION_NEW_ISSUE": "+ 新規 ISSUE", + "ACTION_PROMOTE_TO_US": "ユーザーストーリーに変更する", + "PROMOTED": "This issue has been promoted to US:", + "EXTERNAL_REFERENCE": "This issue has been created from", + "GO_TO_EXTERNAL_REFERENCE": "originへ移動", + "BLOCKED": "この課題はブロックされています", + "ACTION_DELETE": "Issue を削除", + "LIGHTBOX_TITLE_BLOKING_ISSUE": "ブロックしている Issue", + "FIELDS": { + "PRIORITY": "優先度", + "SEVERITY": "深刻度", + "TYPE": "タイプ" + }, + "CONFIRM_PROMOTE": { + "TITLE": "このIssueを新しいユーザーストーリーに変更", + "MESSAGE": "この課題から新しいユーザーストーリーを作成しますか?" + }, + "TABLE": { + "COLUMNS": { + "TYPE": "タイプ", + "SEVERITY": "深刻度", + "PRIORITY": "優先度", + "SUBJECT": "題名", + "VOTES": "投票", + "STATUS": "ステータス", + "CREATED": "作成", + "ASSIGNED_TO": "担当者" + }, + "TITLE_ACTION_CHANGE_STATUS": "ステータスを変更", + "TITLE_ACTION_ASSIGNED_TO": "担当者", + "BLOCKED": "ブロック中", + "EMPTY": { + "TITLE": "レポートが必要な課題はありません :-)", + "SUBTITLE": "課題は見つかりましたか?" + } + } + }, + "ISSUE": { + "PAGE_TITLE": "{{issueSubject}} - 課題 {{issueRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "ステータス: {{issueStatus }}. タイプ: {{issueType}}, 優先度: {{issuePriority}}. 深刻度: {{issueSeverity}}. 説明: {{issueDescription}}" + }, + "KANBAN": { + "PAGE_TITLE": "かんばん - {{projectName}}", + "PAGE_DESCRIPTION": "The kanban panel, with user stories of the project {{projectName}}: {{projectDescription}}", + "SECTION_NAME": "かんばん", + "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": "The user stories in this status are hidden by default", + "ARCHIVED": "アーカイブしました", + "UNDO_ARCHIVED": "アンドゥするにはドラッグ&ドロップしてください", + "PLACEHOLDER_CARD_TITLE": "These are your User Stories", + "PLACEHOLDER_CARD_TEXT": "Stories might also have subtasks to separate requirements" + }, + "SEARCH": { + "PAGE_TITLE": "検索 - {{projectName}}", + "PAGE_DESCRIPTION": "ユーザーストーリー、課題、タスク、Wikiページ、その他何でもこのプロジェクトを検索 {{projectName}}: {{projectDescription}}", + "FILTER_EPICS": "エピック", + "FILTER_USER_STORIES": "User Stories", + "FILTER_ISSUES": "課題", + "FILTER_TASKS": "タスク", + "FILTER_WIKI": "Wikiページ", + "PLACEHOLDER_SEARCH": "検索...", + "TITLE_ACTION_SEARCH": "検索", + "EMPTY_TITLE": "It looks like nothing was found with your search criteria.", + "EMPTY_DESCRIPTION": "Maybe try one of the tabs above or search again" + }, + "TEAM": { + "PAGE_TITLE": "チーム - {{projectName}}", + "PAGE_DESCRIPTION": "The team panel to show all the members of the project {{projectName}}: {{projectDescription}}", + "SECTION_NAME": "チーム", + "APP_TITLE": "チーム - {{projectName}}", + "PLACEHOLDER_INPUT_SEARCH": "フルネームで検索する", + "COLUMN_MR_WOLF": "Mr. Wolf", + "EXPLANATION_COLUMN_MR_WOLF": "課題を閉じる", + "COLUMN_IOCAINE": "Iocaine Drinker", + "EXPLANATION_COLUMN_IOCAINE": "Iocaine doses ingested", + "COLUMN_CERVANTES": "Cervantes", + "EXPLANATION_COLUMN_CERVANTES": "Wiki ページを編集しました", + "COLUMN_BUG_HUNTER": "バグハンター", + "EXPLANATION_COLUMN_BUG_HUNTER": "報告されている課題", + "COLUMN_NIGHT_SHIFT": "Night Shift", + "EXPLANATION_COLUMN_NIGHT_SHIFT": "完了タスク", + "COLUMN_TOTAL_POWER": "Total Power", + "EXPLANATION_COLUMN_TOTAL_POWER": "合計ポイント", + "SECTION_TITLE_TEAM": "チーム >", + "SECTION_FILTER_ALL": "すべて", + "CONFIRM_LEAVE_PROJECT": "本当にこのプロジェクトから脱退していいですか?", + "ACTION_LEAVE_PROJECT": "このプロジェクトから離脱する" + }, + "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": "関連するものだけ", + "COLUMN_NO_NOTIFICATIONS": "通知なし", + "OPTION_ALL": "すべて", + "OPTION_INVOLVED": "Involved", + "OPTION_NONE": "なし" + }, + "POPOVER": { + "USER_PROFILE": "ユーザープロフィール", + "CHANGE_PASSWORD": "パスワードを変更", + "NOTIFICATIONS": "通知", + "FEEDBACK": "フィードバック", + "TITLE_AVATAR": "ユーザー設定" + } + }, + "USER_PROFILE": { + "IMAGE_HELP": "画像は縦横80ピクセルに変換されます。", + "ACTION_CHANGE_IMAGE": "変更", + "ACTION_USE_GRAVATAR": "デフォルトのイメージを使用する", + "ACTION_DELETE_ACCOUNT": "Taigaアカウントを削除", + "CHANGE_EMAIL_SUCCESS": "メールボックスを確認してください!
    新しいメールアドレスを設定するための手順を送信しました。", + "CHANGE_PHOTO": "写真を変更", + "FIELD": { + "USERNAME": "ユーザー名", + "EMAIL": "メール", + "FULL_NAME": "フルネーム", + "PLACEHOLDER_FULL_NAME": "Set your full name (ex. Íñigo Montoya)", + "BIO": "自己紹介(最大で全角105文字まで)", + "PLACEHOLDER_BIO": "あなたについて教えてください", + "LANGUAGE": "言語", + "LANGUAGE_DEFAULT": "-- デフォルトの言語を使用 --", + "THEME": "テーマ", + "THEME_DEFAULT": "-- デフォルトのテーマを使用 --" + } + }, + "WIZARD": { + "SECTION_TITLE_CREATE_PROJECT": "プロジェクトを作成", + "CREATE_PROJECT_TEXT": "フレッシュでクリーン。わくわくしますね!", + "CHOOSE_TEMPLATE": "どちらのテンプレートがあなたのプロジェクトに適していますか?", + "CHOOSE_TEMPLATE_TITLE": "プロジェクトテンプレートの詳細", + "CHOOSE_TEMPLATE_INFO": "詳細表示", + "PROJECT_DETAILS": "プロジェクト詳細", + "PUBLIC_PROJECT": "パブリック プロジェクト", + "PRIVATE_PROJECT": "プライベート プロジェクト", + "CREATE_PROJECT": "プロジェクトを作成", + "MAX_PRIVATE_PROJECTS": "非公開プロジェクトの上限に達しました。", + "MAX_PUBLIC_PROJECTS": "公開プロジェクトの上限に達しました。", + "CHANGE_PLANS": "プランを変更" + }, + "WIKI": { + "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", + "PAGE_DESCRIPTION": "{{lastModifiedDate}} に最後に編集がありました。(合計 {{totalEditions}} 件) 内容: {{ wikiPageContent }}", + "DATETIME": "YYYY年MM月DD日 HH時mm分", + "PLACEHOLDER_PAGE": "Wikiページを作成", + "REMOVE": "このWikiページを削除", + "DELETE_LIGHTBOX_TITLE": "Wikiページを削除", + "DELETE_LINK_TITLE": "Wikiリンクを削除", + "NAVIGATION": { + "HOME": "メインページ", + "SECTION_NAME": "ブックマーク", + "ACTION_ADD_LINK": "ブックマークを追加する", + "ALL_PAGES": "全Wikiページ" + }, + "SUMMARY": { + "TIMES_EDITED": "編集
    回数", + "LAST_EDIT": "最終
    編集", + "LAST_MODIFICATION": "最後の変更" + }, + "SECTION_PAGES_LIST": "全ページ", + "PAGES_LIST_COLUMNS": { + "TITLE": "タイトル", + "EDITIONS": "Editions", + "CREATED": "作成", + "MODIFIED": "Modified", + "CREATOR": "作者", + "LAST_MODIFIER": "最後の変更者" + } + }, + "HINTS": { + "SECTION_NAME": "ヒント", + "LINK": "利用方法を知りたい場合はサポートページを訪れてください", + "LINK_TITLE": "サポートページへ行く", + "HINT1_TITLE": "Did you know you can import and export projects?", + "HINT1_TEXT": "ひとつのTaigaアカウントの全てのデータを抽出し、別のアカウントへ移すことができます。", + "HINT2_TITLE": "カスタムフィールドが作れるのはご存知ですか?", + "HINT2_TEXT": "Teams can now create custom fields as a flexible means to enter specific data useful for their particular workflow.", + "HINT3_TITLE": "Reorder your projects to feature those most relevant to you.", + "HINT3_TEXT": "最上部にあるダイレクトアクセスバーに10プロジェクトまで表示されます。", + "HINT4_TITLE": "Did you forget what were you working on?", + "HINT4_TEXT": "ご心配なさらないでください。ダッシュボードではあなたが取り組んだ順番にオープンなタスク、課題、ユーザーストーリーが表示されます。" + }, + "TIMELINE": { + "UPLOAD_ATTACHMENT": "{{username}} さんが新しい添付ファイル {{obj_name}} をアップロードしました", + "US_CREATED": "{{username}} さんが新しいユーザーストーリー {{obj_name}} を作成しました( {{project_name}} )", + "ISSUE_CREATED": "{{username}} さんが新しい課題 {{obj_name}} を作成しました( {{project_name}} )", + "TASK_CREATED": "{{username}} さんが新しいタスク {{obj_name}} を作成しました( {{project_name}} )", + "TASK_CREATED_WITH_US": "{{username}} さんが新しいタスク {{obj_name}} をユーザーストーリー {{us_name}} に作成しました( {{project_name}} )", + "WIKI_CREATED": "{{username}} さんが新しいwikiページ {{obj_name}} を作成しました( {{project_name}} )", + "MILESTONE_CREATED": "{{username}} さんがスプリント {{obj_name}} を作成しました( {{project_name}} )", + "EPIC_CREATED": "{{username}} さんが {{project_name}} で新しいエピック {{obj_name}} を作成しました", + "EPIC_RELATED_USERSTORY_CREATED": "{{username}} さんが {{project_name}} でユーザーストーリー {{related_us_name}} をエピック {{epic_name}} に関連付けました", + "NEW_PROJECT": "{{username}} がプロジェクト {{project_name}} を作成しました", + "MILESTONE_UPDATED": "{{username}} がスプリント {{obj_name}} を更新しました", + "US_UPDATED": "{{username}} さんがユーザーストーリー {{obj_name}} の属性 \"{{field_name}}\" を更新しました ", + "US_UPDATED_WITH_NEW_VALUE": "{{username}} さんがユーザーストーリー {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました", + "US_UPDATED_POINTS": "{{username}} さんがユーザーストーリー {{obj_name}} における役割 '{{role_name}}' のポイントを {{new_value}} に更新しました", + "ISSUE_UPDATED": "{{username}} さんが課題 {{obj_name}} の属性 \"{{field_name}}\" を更新しました", + "ISSUE_UPDATED_WITH_NEW_VALUE": "{{username}} さんが課題 {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました", + "TASK_UPDATED": "{{username}} が {{obj_name}} の {{field_name}} を {{new_value}} に更新しました", + "TASK_UPDATED_WITH_NEW_VALUE": "{{username}} が {{obj_name}} の {{field_name}} を {{new_value}} に更新しました", + "TASK_UPDATED_WITH_US": "{{username}} さんがユーザーストーリー {{us_name}} のタスク {{obj_name}} の属性 \"{{field_name}}\" を更新しました", + "TASK_UPDATED_WITH_US_NEW_VALUE": "{{username}} さんがユーザーストーリー {{us_name}} のタスク {{obj_name}} における属性 \"{{field_name}}\" を {{new_value}} に更新しました", + "WIKI_UPDATED": "{{username}} さんがWikiページ {{obj_name}} を更新しました", + "EPIC_UPDATED": "{{username}} さんがエピック {{obj_name}} の属性 \"{{field_name}}\" を更新しました", + "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}} さんがエピック {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました", + "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}} さんが エピック {{obj_name}} の \"{{field_name}}\" を に更新しました", + "NEW_COMMENT_US": "{{username}} さんがユーザーストーリー {{obj_name}} にコメントしました", + "NEW_COMMENT_ISSUE": "{{username}} さんが課題 {{obj_name}} にコメントしました", + "NEW_COMMENT_TASK": "{{username}} さんがタスク {{obj_name}} にコメントしました", + "NEW_COMMENT_EPIC": "{{username}} さんがエピック {{obj_name}} にコメントしました", + "NEW_MEMBER": "{{project_name}} に新規メンバーが追加されました", + "US_ADDED_MILESTONE": "{{username}} さんがユーザーストーリー {{obj_name}} に {{sprint_name}} を追加しました", + "US_MOVED": "{{username}} さんがユーザーストーリー {{obj_name}} を移動しました", + "US_REMOVED_FROM_MILESTONE": "{{username}} さんがユーザーストーリー {{obj_name}} をバックログに追加しました", + "BLOCKED": "{{username}} さんが {{obj_name}} をブロックしました", + "UNBLOCKED": "{{username}} さんが {{obj_name}} のブロックを解除しました", + "NEW_USER": "{{username}} さんが Taiga に参加しました" + }, + "LEGAL": { + "TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD": "When creating a new account, you agree to our
    terms of service and privacy policy." + }, + "EXTERNAL_APP": { + "PAGE_TITLE": "An external app requires authentication", + "PAGE_DESCRIPTION": "An external app requires authentication", + "AUTHORIZATION_REQUEST": "{{application}} にあなたのTaigaアカウントを使用することを許可しますか?", + "LOGIN_WITH_ANOTHER_USER": "別のユーザーでログイン", + "AUTHORIZE_APP": "Authorize app", + "CANCEL": "キャンセル" + }, + "JOYRIDE": { + "NAV": { + "NEXT": "次へ", + "BACK": "戻る", + "SKIP": "スキップ", + "DONE": "完了" + }, + "DASHBOARD": { + "STEP1": { + "TITLE": "あなたのプロジェクト", + "TEXT": "Welcome! Here you will find the projects you are involved on." + }, + "STEP2": { + "TITLE": "取り組んでいる作業", + "TEXT": "あなたが取り組んでいるユーザーストーリー、タスク、課題です。" + }, + "STEP3": { + "TITLE": "フォロー中", + "TEXT1": "And right here you will find the ones in your projects that you want to know about.", + "TEXT2": "You are already working with Taiga ;)" + }, + "STEP4": { + "TITLE": "さあ始めましょう", + "TEXT1": "You can start by creating your first Taiga project.", + "TEXT2": "グッドラック!" + } + }, + "BACKLOG": { + "STEP1": { + "TITLE": "プロジェクト概要", + "TEXT1": "Here you will see the state of your project.", + "TEXT2": "You can change every kind of project settings through the admin." + }, + "STEP2": { + "TITLE": "プロダクト バックログ", + "TEXT": "The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints." + }, + "STEP3": { + "TITLE": "スプリント", + "TEXT": "Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered." + }, + "STEP4": { + "TITLE": "User Stories", + "TEXT": "Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered." + } + }, + "KANBAN": { + "STEP1": { + "TITLE": "ワークフローのカスタマイズ", + "TEXT": "Set up the columns you need to map your workflow statuses through the admin." + }, + "STEP2": { + "TITLE": "ユーザーストーリー&タスク", + "TEXT": "User Stories are the requirements at high level. You can drag them to different columns." + }, + "STEP3": { + "TITLE": "Adding User Stories", + "TEXT1": "You may want to add a single User Story (add US icon) or a group of them (bulk icon)", + "TEXT2": "グッドラック!" + } + } + }, + "DISCOVER": { + "PAGE_TITLE": "プロジェクトを探す - Taiga", + "PAGE_DESCRIPTION": "Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.", + "DISCOVER_TITLE": "プロジェクトを探す", + "DISCOVER_SUBTITLE": "{projects, plural, one{One public project to discover} other{# 件のプロジェクトが見つかりました}}", + "MOST_ACTIVE": "最も活発なプロジェクト", + "MOST_ACTIVE_EMPTY": "アクティブなプロジェクトはまだありません。", + "MOST_LIKED": "最も好まれているプロジェクト", + "MOST_LIKED_EMPTY": "「いいね」されたプロジェクトはまだありません", + "VIEW_MORE": "もっと見る", + "RECRUITING": "プロジェクトはメンバーを探しています", + "FEATURED": "注目プロジェクト", + "EMPTY": "該当するプロジェクトがありませんでした。
    検索条件を変えて再度試してみてください!", + "FILTERS": { + "ALL": "すべて", + "KANBAN": "かんばん", + "SCRUM": "スクラム", + "PEOPLE": "人", + "WEEK": "先週", + "MONTH": "先月", + "YEAR": "昨年", + "ALL_TIME": "すべて", + "CLEAR": "フィルターをクリア" + }, + "SEARCH": { + "PAGE_TITLE": "検索結果 - プロジェクトを探す - Taiga", + "PAGE_DESCRIPTION": "Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.", + "INPUT_PLACEHOLDER": "入力してください", + "ACTION_TITLE": "検索", + "RESULTS": "検索結果" + } + } +} \ No newline at end of file diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json new file mode 100644 index 00000000..8070e95e --- /dev/null +++ b/app/locales/taiga/locale-zh-hans.json @@ -0,0 +1,1699 @@ +{ + "COMMON": { + "YES": "是", + "NO": "否", + "OR": "或", + "LOADING": "载入中...", + "LOADING_PROJECT": "正在载入项目...", + "DATE": "YYYY MMM DD", + "DATETIME": "YYYY MMM DD HH:mm", + "SAVE": "保存", + "CANCEL": "取消", + "ACCEPT": "接受", + "DELETE": "删除", + "UNLINK": "断开链接", + "CREATE": "创建", + "ADD": "新增", + "COPY_TO_CLIPBOARD": "复制到剪贴板:Ctrl+C", + "EDIT": "编辑", + "DRAG": "拖拽", + "TAG_LINE": "你的敏捷、免费和开源的项目管理工具", + "TAG_LINE_2": "爱你的项目", + "BLOCK": "冻结", + "BLOCK_TITLE": "冻结:例如它有一个依赖不能满足,那么请冻结此项", + "BLOCKED": "已冻结", + "UNBLOCK": "解除冻结", + "UNBLOCK_TITLE": "关闭此项", + "BLOCKED_NOTE": "为什么它被关闭了呢?", + "BLOCKED_REASON": "请解释此原因", + "CREATED_BY": "由 {{fullDisplayName}} 创建", + "FROM": "来自", + "TO": "发送给", + "CLOSE": "关闭", + "GO_HOME": "返回首页", + "PLUGINS": "插件", + "BETA": "我们正在测试", + "ONE_ITEM_LINE": "一行一项", + "NEW_BULK": "批量插入", + "RELATED_TASKS": "相关任务", + "PREVIOUS": "前一个", + "NEXT": "下一个", + "LOGOUT": "退出", + "EXTERNAL_USER": "外部用户", + "GENERIC_ERROR": "系统错误:{{error}}。", + "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", + "CLIENT_REQUIREMENT": "终端需求:是一个之前不存在的新的需求,并且该需求被要求成为项目的一部分", + "TEAM_REQUIREMENT": "团队需求:必须是项目中已经存在的需求,并且该需求不会对终端造成任何额外成本", + "OWNER": "项目所有者", + "CAPSLOCK_WARNING": "注意!你正在输入大写字母,该输入区域是区分大小写的。", + "CONFIRM_CLOSE_EDIT_MODE_TITLE": "你确定关闭编辑模式吗?", + "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "请记住,如果你在保存之前关闭了编辑模式,所有的更改都会丢失", + "RELATED_USERSTORIES": "相关用户故事", + "CARD": { + "ASSIGN_TO": "指派给", + "EDIT": "编辑卡片" + }, + "FORM_ERRORS": { + "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": "该数值应为一致", + "LINEWIDTH": "一行或者多行可能太长了。尝试保持在 %s 字节以内", + "PIKADAY": "无效的日期格式,请使用DD MMM YYYY (如 23 Mar 1984)" + }, + "PICKERDATE": { + "FORMAT": "DD MMM YYYY", + "IS_RTL": "错误", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "上个月", + "NEXT_MONTH": "下个月", + "MONTHS": { + "JAN": "一月", + "FEB": "二月", + "MAR": "三月", + "APR": "四月", + "MAY": "五月", + "JUN": "六月", + "JUL": "七月", + "AUG": "八月", + "SEP": "九月", + "OCT": "十月", + "NOV": "十一月", + "DEC": "十二月" + }, + "WEEK_DAYS": { + "SUN": "周日", + "MON": "周一", + "TUE": "周二", + "WED": "周三", + "THU": "周四", + "FRI": "周五", + "SAT": "周六" + }, + "WEEK_DAYS_SHORT": { + "SUN": "周日", + "MON": "周一", + "TUE": "周二", + "WED": "周三", + "THU": "周四", + "FRI": "周五", + "SAT": "周六" + } + }, + "SEE_USER_PROFILE": "查看 {{username }} 个人信息", + "USER_STORY": "用户故事", + "TASK": "任务", + "ISSUE": "问题", + "EPIC": "史诗", + "TAGS": { + "PLACEHOLDER": "输入标签", + "DELETE": "删除标签", + "ADD": "新增标签" + }, + "DESCRIPTION": { + "EMPTY": "留下空白显得很无趣,写下点描述吧", + "NO_DESCRIPTION": "未有任何描述" + }, + "FIELDS": { + "SUBJECT": "主题", + "NAME": "名称", + "URL": "网址", + "DESCRIPTION": "描述", + "VALUE": "值", + "SLUG": "代称", + "COLOR": "颜色", + "IS_CLOSED": "关闭中?", + "STATUS": "状态", + "TYPE": "类型", + "SEVERITY": "严重程度", + "PRIORITY": "优先级", + "ASSIGNED_TO": "指派给", + "POINTS": "点数", + "BLOCKED_NOTE": "冻结的笔记", + "IS_BLOCKED": "冻结", + "REF": "Ref", + "VOTES": "投票数", + "SPRINT": "冲刺任务" + }, + "ROLES": { + "ALL": "所有" + }, + "ASSIGNED_TO": { + "NOT_ASSIGNED": "未指派", + "ASSIGN": "指派", + "DELETE_ASSIGNMENT": "删除指派", + "REMOVE_ASSIGNED": "移除指派", + "TOO_MANY": "...太多用户,继续过滤中", + "CONFIRM_UNASSIGNED": "你确定要让它无任何指派吗?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "编辑指派", + "SELF": "指派给我" + }, + "STATUS": { + "CLOSED": "关闭", + "OPEN": "开启" + }, + "WATCHERS": { + "WATCHERS": "关注者列表", + "ADD": "添加关注者", + "TITLE_ADD": "添加项目成员到关注者列表", + "DELETE": "已删除关注者", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "删除关注者" + }, + "WATCH_BUTTON": { + "WATCH": "关注", + "WATCHING": "关注中", + "UNWATCH": "撤销关注", + "WATCHERS": "关注者列表", + "BUTTON_TITLE": "关注/撤销关注该项", + "COUNTER_TITLE": "{total, plural, one{一个关注者} other{# 个关注者}}" + }, + "VOTE_BUTTON": { + "UPVOTE": "赞", + "UPVOTED": "已赞", + "DOWNVOTE": "踩", + "VOTERS": "投票者", + "BUTTON_TITLE": "赞/踩该项", + "COUNTER_TITLE": "{total, plural, one{一票} other{# 票}}" + }, + "CUSTOM_ATTRIBUTES": { + "CUSTOM_FIELDS": "自定义字段", + "SAVE": "保存自定义字段", + "EDIT": "编辑自定义字段", + "DELETE": "删除自定义字段", + "CONFIRM_DELETE": "请记住,在这个自定义字段中的所有值都会被删除。你确定继续吗?" + }, + "FILTERS": { + "TITLE": "过滤器", + "INPUT_PLACEHOLDER": "标题或参考", + "TITLE_ACTION_FILTER_BUTTON": "搜索", + "INPUT_SEARCH_PLACEHOLDER": "主旨或参考", + "TITLE_ACTION_SEARCH": "搜索", + "ACTION_SAVE_CUSTOM_FILTER": "储存为定制过滤器", + "PLACEHOLDER_FILTER_NAME": "写入过滤器名称后按下enter", + "APPLIED_FILTERS_NUM": "已用过滤器", + "CATEGORIES": { + "TYPE": "类型", + "STATUS": "状态", + "SEVERITY": "严重程度", + "PRIORITIES": "优先级", + "TAGS": "标签", + "ASSIGNED_TO": "指派给", + "CREATED_BY": "由创建", + "CUSTOM_FILTERS": "定制过滤器", + "EPIC": "史诗" + }, + "CONFIRM_DELETE": { + "TITLE": "删除定制过滤器", + "MESSAGE": "预设过滤器 '{{customFilterName}}'" + } + }, + "WYSIWYG": { + "OUTDATED": "在你编辑期间其他人做过变更,保存前请先检查新版本", + "ATTACH_FILE_HELP": "拖拽到上面的文本区域来添加附件", + "ATTACH_FILE_HELP_SAVE_FIRST": "如果你希望通过拖拽到上面的文本区域来添加附件,在此之前请先保存。", + "MARKDOWN_HELP": "Markdown 语法帮助" + }, + "PERMISIONS_CATEGORIES": { + "EPICS": { + "NAME": "史诗", + "VIEW_EPICS": "查看史诗", + "ADD_EPICS": "添加史诗", + "MODIFY_EPICS": "修改史诗", + "COMMENT_EPICS": "评论史诗", + "DELETE_EPICS": "删除史诗" + }, + "SPRINTS": { + "NAME": "冲刺任务", + "VIEW_SPRINTS": "查看冲刺任务", + "ADD_SPRINTS": "增加冲刺任务", + "MODIFY_SPRINTS": "修改冲刺任务", + "DELETE_SPRINTS": "删除冲刺任务" + }, + "USER_STORIES": { + "NAME": "用户故事", + "VIEW_USER_STORIES": "查看用户故事", + "ADD_USER_STORIES": "新增用户故事", + "MODIFY_USER_STORIES": "修改用户故事", + "COMMENT_USER_STORIES": "评论用户故事", + "DELETE_USER_STORIES": "删除用户故事" + }, + "TASKS": { + "NAME": "任务", + "VIEW_TASKS": "查看任务", + "ADD_TASKS": "新增任务", + "MODIFY_TASKS": "修改任务", + "COMMENT_TASKS": "评论任务", + "DELETE_TASKS": "删除任务" + }, + "ISSUES": { + "NAME": "问题", + "VIEW_ISSUES": "查看问题", + "ADD_ISSUES": "新增问题", + "MODIFY_ISSUES": "修改议题", + "COMMENT_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": "删除维基链接" + } + }, + "META": { + "PAGE_TITLE": "Taiga", + "PAGE_DESCRIPTION": "Taiga是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。" + } + }, + "LOGIN": { + "PAGE_TITLE": "登入 - Taiga", + "PAGE_DESCRIPTION": "登录Taig,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。" + }, + "AUTH": { + "INVITED_YOU": "已邀请您加入此项目", + "NOT_REGISTERED_YET": "还没注册吗?", + "REGISTER": "注册", + "CREATE_ACCOUNT": "在此建立您的免费账户" + }, + "LOGIN_COMMON": { + "HEADER": "我已登录Taiga", + "PLACEHOLDER_AUTH_NAME": "用户名称或电子邮件(注意大小写)", + "LINK_FORGOT_PASSWORD": "忘记密码?", + "TITLE_LINK_FORGOT_PASSWORD": "您忘记密码了吗", + "ACTION_ENTER": "回车", + "ACTION_SIGN_IN": "登录", + "PLACEHOLDER_AUTH_PASSWORD": "密码(大小写有别)" + }, + "LOGIN_FORM": { + "ERROR_AUTH_INCORRECT": "根据我们的系统记录,你的账户名称/电子邮件或密码并不正确", + "SUCCESS": "欢迎你登录Taiga" + }, + "REGISTER": { + "PAGE_TITLE": "注册 - Taiga", + "PAGE_DESCRIPTION": "在Taiga创建一个账户,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。" + }, + "REGISTER_FORM": { + "TITLE": "注册一个新的Taiga账户(免费 )", + "PLACEHOLDER_NAME": "填写一个用户账号(注意大小写)", + "PLACEHOLDER_FULL_NAME": "填写你的全名", + "PLACEHOLDER_EMAIL": "填写你的电子邮件", + "PLACEHOLDER_PASSWORD": "设定密码(注意大小写不同)", + "ACTION_SIGN_UP": "注册", + "TITLE_LINK_LOGIN": "登录", + "LINK_LOGIN": "你是否已注册? 登录" + }, + "FORGOT_PASSWORD": { + "PAGE_TITLE": "忘记密码 - Taiga", + "PAGE_DESCRIPTION": "输入用户名或电子邮件以获取新密码,可以再重新登录Taiga" + }, + "FORGOT_PASSWORD_FORM": { + "TITLE": "你是否忘了密码?", + "SUBTITLE": "输入你的账户名称或电子邮件以进行注册", + "PLACEHOLDER_FIELD": "用户名称或电子邮件", + "ACTION_RESET_PASSWORD": "重设密码", + "LINK_CANCEL": "不,请带我回去,我记起来了", + "SUCCESS_TITLE": "检查你的收件箱!", + "SUCCESS_TEXT": "我们向你的邮箱发送了一封带有重置密码指令的邮件", + "ERROR": "根据我们的系统记录,你尚未注册" + }, + "CHANGE_PASSWORD": { + "PAGE_TITLE": "更新密码 - Taiga", + "PAGE_DESCRIPTION": "设定Taiga账户密码!你也许该吃点含铁丰富的食物,它对你的大脑有益处:p", + "SECTION_NAME": "更新密码", + "FIELD_CURRENT_PASSWORD": "当前密码", + "PLACEHOLDER_CURRENT_PASSWORD": "你当前的密码(如果你未有密码,此处请空白)", + "FIELD_NEW_PASSWORD": "新密码", + "PLACEHOLDER_NEW_PASSWORD": "输入新密码", + "FIELD_RETYPE_PASSWORD": "重新输入新密码", + "PLACEHOLDER_RETYPE_PASSWORD": "重新输入新密码", + "ERROR_PASSWORD_MATCH": "密码不符" + }, + "CHANGE_PASSWORD_RECOVERY_FORM": { + "TITLE": "创建新Taiga通过", + "SUBTITLE": "你也许该吃点含铁丰富的食物,它对你的大脑有益处:p", + "PLACEHOLDER_NEW_PASSWORD": "新密码", + "PLACEHOLDER_RE_TYPE_NEW_PASSWORD": "重新输入新密码", + "ACTION_RESET_PASSWORD": "重设密码", + "ERROR": "我们的Oompa Loompas找不到你的请求来覆盖你的密码。尝试再请求一次。", + "SUCCESS": "系统已储存你的新密码
    试试 用它登录" + }, + "INVITATION": { + "PAGE_TITLE": "接受邀请 - Taiga", + "PAGE_DESCRIPTION": "接受邀请加入Taiga上的项目,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。" + }, + "INVITATION_LOGIN_FORM": { + "NOT_FOUND": "我们的Oompa Loompas无法找到你邀请", + "SUCCESS": "你成功地加入此项目,欢迎来到 {{project_name}}", + "ERROR": "按我们的记录,你尚未注册或是未输入有效的密码" + }, + "HOME": { + "PAGE_TITLE": "首页 - Taiga", + "PAGE_DESCRIPTION": "Taiga 首页,你的主要项目以及任命,观看用户故事,任务与问题。", + "EMPTY_WORKING_ON": "看起来空荡荡的,是不是?开始使用Taiga,你将会在这里看到你正在处理的用户故事,任务以及问题。", + "EMPTY_WATCHING": "在你的项目中追踪用户故事、任务、问题并且收到更新的通知 :)", + "EMPTY_PROJECT_LIST": "你尚无任何项目", + "WORKING_ON_SECTION": "进行中", + "WATCHING_SECTION": "关注中", + "DASHBOARD": "项目仪表盘" + }, + "EPICS": { + "TITLE": "史诗", + "SECTION_NAME": "史诗", + "EPIC": "史诗", + "PAGE_TITLE": "史诗 - {{projectName}}", + "PAGE_DESCRIPTION": "项目的史诗列表{{projectName}}:{{projectDescription}}", + "DASHBOARD": { + "ADD": "添加史诗", + "UNASSIGNED": "未指派" + }, + "EMPTY": { + "TITLE": "您还未创建任何史诗", + "EXPLANATION": "史诗是一种包含用户故事的更上层的概念。\n史诗可用于组织用户故事并处于其层次结构的顶层。", + "HELP": "了解更多关于史诗的信息" + }, + "TABLE": { + "VOTES": "投票数", + "NAME": "名称", + "PROJECT": "项目", + "SPRINT": "冲刺任务", + "ASSIGNED_TO": "已指派", + "STATUS": "状态", + "PROGRESS": "进度", + "VIEW_OPTIONS": "浏览选项" + }, + "CREATE": { + "TITLE": "新建史诗", + "PLACEHOLDER_DESCRIPTION": "请添加一些描述文字来帮助其他人更好的了解这个史诗", + "TEAM_REQUIREMENT": "团队需求", + "CLIENT_REQUIREMENT": "客户需求", + "BLOCKED": "已封锁", + "BLOCKED_NOTE_PLACEHOLDER": "为什么这个史诗被冻结了?", + "CREATE_EPIC": "创建史诗" + } + }, + "PROJECTS": { + "PAGE_TITLE": "我的项目 - Taiga", + "PAGE_DESCRIPTION": "你的项目列表,你可以重新排序或者创建新项目。", + "MY_PROJECTS": "我的项目" + }, + "ATTACHMENT": { + "SECTION_NAME": "附件", + "TITLE": "{{ fileName }} 上传于 {{ date }}", + "LIST_VIEW_MODE": "列表视图模式", + "GALLERY_VIEW_MODE": "画廊视图模式", + "DESCRIPTION": "输入一段简短描述", + "DEPRECATED": "(已废弃)", + "DEPRECATED_FILE": "废弃?", + "ADD": "加入新附件 {{maxFileSizeMsg}}", + "DROP": "将附件拖到这里来!", + "SHOW_DEPRECATED": "+ 显示废弃的附件", + "HIDE_DEPRECATED": "+ 隐藏废弃的附件", + "COUNT_DEPRECATED": "({{ counter }} 遭废弃)", + "MAX_UPLOAD_SIZE": "上传文档最大体积限制 {{maxFileSize}}", + "DATE": "DD MMM YYYY [at] hh:mm", + "ERROR_UPLOAD_ATTACHMENT": "无法成功上传 '{{fileName}}'. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "删除附件....", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "附件 '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "无法删除: {{errorMessage}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})", + "FIELDS": { + "IS_DEPRECATED": "已废弃" + } + }, + "PAGINATION": { + "PREVIOUS": "上一个", + "NEXT": "下一个" + }, + "ADMIN": { + "COMMON": { + "TITLE_ACTION_EDIT_VALUE": "编辑值", + "TITLE_ACTION_DELETE_VALUE": "删除值", + "TITLE_ACTION_DELETE_TAG": "删除标签" + }, + "HELP": "需要帮助吗?看看我们的帮助页面吧!", + "PROJECT_DEFAULT_VALUES": { + "TITLE": "预设值", + "SUBTITLE": "将所有选项设为预设值" + }, + "MEMBERSHIPS": { + "TITLE": "管理成员", + "PAGE_TITLE": "成员资格 - {{projectName}}", + "ADD_BUTTON": "+ 新成员", + "ADD_BUTTON_TITLE": "增加新成员", + "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "对不起,本项目已经达到它所允许的最多成员上限 ({{members}})。", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "这个项目已经达到它的允许最多成员上限 ({{members}})。如果你希望增加这个上限,请联系管理员。" + }, + "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": "停用", + "EPICS": "史诗", + "EPICS_DESCRIPTION": "可视化和管理你项目的最为要害的部分", + "BACKLOG": "待办事项", + "BACKLOG_DESCRIPTION": "管理你的用户故事,让接下来的及优先的工作能被有条理地查看", + "NUMBER_SPRINTS": "期待的冲刺数量", + "NUMBER_SPRINTS_HELP": "待确定的数量(0)", + "NUMBER_US_POINTS": "估计总的故事点", + "NUMBER_US_POINTS_HELP": "待确定的数量(0)", + "KANBAN": "看板", + "KANBAN_DESCRIPTION": "在此看板上组织你的项目", + "ISSUES": "问题", + "ISSUES_DESCRIPTION": "追踪错误,问题以及增强你的项目,不要错过任何事", + "WIKI": "维基文档", + "WIKI_DESCRIPTION": "新增,修正或是删除与他人合作的文档内容。这里正是项目文件记录区", + "MEETUP": "视频会议", + "MEETUP_DESCRIPTION": "选择你的视频会议系统", + "SELECT_VIDEOCONFERENCE": "选择一个视频会议系统", + "SALT_CHAT_ROOM": "为聊天室名称添加一个前缀", + "JITSI_CHAT_ROOM": "Jitsi", + "APPEARIN_CHAT_ROOM": "AppearIn", + "TALKY_CHAT_ROOM": "Talky", + "CUSTOM_CHAT_ROOM": "自定", + "URL_CHAT_ROOM": "聊天室之网址" + }, + "PROJECT_PROFILE": { + "PAGE_TITLE": "{{sectionName}} - 项目档案 - {{projectName}}", + "PROJECT_DETAILS": "项目细节", + "PROJECT_NAME": "项目名称", + "PROJECT_SLUG": "项目代称", + "TAGS": "标签", + "DESCRIPTION": "描述", + "RECRUITING": "这个项目是否在招人?", + "RECRUITING_MESSAGE": "你在寻找什么人?", + "RECRUITING_PLACEHOLDER": "定义简介", + "PUBLIC_PROJECT": "公开项目", + "PRIVATE_PROJECT": "私有项目", + "PRIVATE_OR_PUBLIC": "公开项目与私有项目有什么区别?", + "DELETE": "删除此项目", + "LOGO_HELP": "这张图片将被缩放为80x80px", + "CHANGE_LOGO": "更换图标", + "ACTION_USE_DEFAULT_LOGO": "使用默认图片", + "MAX_PRIVATE_PROJECTS": "根据你当前计划,你已经达到了私有项目允许的最大成员限制", + "MAX_PRIVATE_PROJECTS_MEMBERS": "已超过私有项目的最大成员数目的限制", + "MAX_PUBLIC_PROJECTS": "对不起,根据你当前计划,你已经达到了公开项目允许的最大成员限制", + "MAX_PUBLIC_PROJECTS_MEMBERS": "作为公开项目,该项目已经超过了你的最大成员数目", + "PROJECT_OWNER": "项目所有者", + "REQUEST_OWNERSHIP": "请求项目所有权", + "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "你希望成为该项目的新所有者吗?", + "REQUEST_OWNERSHIP_DESC": "请求当前项目所有者 {{name}} 将项目所有权转给你。", + "REQUEST_OWNERSHIP_BUTTON": "要求", + "REQUEST_OWNERSHIP_SUCCESS": "我们将通知项目所有者", + "CHANGE_OWNER": "改变所有者", + "CHANGE_OWNER_SUCCESS_TITLE": "好,你的请求已经发出!", + "CHANGE_OWNER_SUCCESS_DESC": "如果项目所有者请求被接受或者被拒绝,我们将通过邮件通知你" + }, + "REPORTS": { + "TITLE": "报告", + "SUBTITLE": "以 CSV 格式导出你的项目资料,并制作你的专属报告", + "DESCRIPTION": "下载CSV档案格式是复制生成网址到常用的文字编辑软件/试算表,以保存你的项目资料报告。你可以轻易地视觉化和分析你的资料。", + "HELP": "如何使用我的表格软件?", + "REGENERATE_TITLE": "改变网址", + "REGENERATE_SUBTITLE": "你将要改变CSV资料的访问网址,之前的网址将失效。你确定要这样做吗?" + }, + "CSV": { + "SECTION_TITLE_EPIC": "史诗报告", + "SECTION_TITLE_US": "用户故事报告", + "SECTION_TITLE_TASK": "任务报告", + "SECTION_TITLE_ISSUE": "问题报告", + "DOWNLOAD": "下载CSV档案", + "URL_FIELD_PLACEHOLDER": "再次产生CSV 网址", + "TITLE_REGENERATE_URL": "再次产生CSV 网址", + "ACTION_GENERATE_URL": "产生网址", + "ACTION_REGENERATE": "再次产生" + }, + "CUSTOM_FIELDS": { + "TITLE": "自定义字段", + "SUBTITLE": "指定用户故事,任务与问题一些自定义字段", + "EPIC_DESCRIPTION": "史诗自定义字段", + "EPIC_ADD": "在史诗中加入自定义字段", + "US_DESCRIPTION": "用户自定义字段", + "US_ADD": "在用户故事中加入自定义字段", + "TASK_DESCRIPTION": "任务自定义字段", + "TASK_ADD": "在任务中加入自定义字段", + "ISSUE_DESCRIPTION": "问题自定义字段", + "ISSUE_ADD": "在问题中加入自定义字段", + "FIELD_TYPE_TEXT": "单行文字", + "FIELD_TYPE_MULTI": "多行文字", + "FIELD_TYPE_DATE": "日期", + "FIELD_TYPE_URL": "链接" + }, + "PROJECT_VALUES": { + "PAGE_TITLE": "{{sectionName}} - 项目数值 - {{projectName}}", + "REPLACEMENT": "所有此值的项将被改成", + "ERROR_DELETE_ALL": "你不能删除所有的值" + }, + "PROJECT_VALUES_POINTS": { + "TITLE": "点数", + "SUBTITLE": "指定你的用户故事的估计点数为", + "US_TITLE": "用户故事点数", + "ACTION_ADD": "增加点数" + }, + "PROJECT_VALUES_PRIORITIES": { + "TITLE": "优先级", + "SUBTITLE": "指明你将遇到的问题优先程度", + "ISSUE_TITLE": "问题优先级", + "ACTION_ADD": "新增优先级" + }, + "PROJECT_VALUES_SEVERITIES": { + "TITLE": "严重程度", + "SUBTITLE": "指明你将遇到问题的严重程度", + "ISSUE_TITLE": "问题严重程度", + "ACTION_ADD": "新增严重程度" + }, + "PROJECT_VALUES_STATUS": { + "TITLE": "状态", + "SUBTITLE": "指明你的用户故事,任务以及问题经历的状态", + "EPIC_TITLE": "史诗状态", + "US_TITLE": "用户故事状态", + "TASK_TITLE": "任务状态", + "ISSUE_TITLE": "问题状态" + }, + "PROJECT_VALUES_TYPES": { + "TITLE": "类型", + "SUBTITLE": "指定你的问题类型可能是", + "ISSUE_TITLE": "问题类型", + "ACTION_ADD": "新增{{objName}}" + }, + "PROJECT_VALUES_TAGS": { + "TITLE": "标签", + "SUBTITLE": "查看并编辑你的用户故事的颜色", + "EMPTY": "当前没有标签", + "EMPTY_SEARCH": "看起来没有符合你的搜索条件的结果", + "ACTION_ADD": "新增标签", + "NEW_TAG": "新建标签", + "MIXING_HELP_TEXT": "选择你想合并的标签", + "MIXING_MERGE": "合并标签", + "SELECTED": "已选择" + }, + "ROLES": { + "PAGE_TITLE": "角色- {{projectName}}", + "WARNING_NO_ROLE": "注意,你的项目中无角色可以评估用户故事的点数", + "HELP_ROLE_ENABLED": "当启动时,被指派此角色的成员将可以评估用户故事点数", + "DISABLE_COMPUTABLE_ALERT_TITLE": "你确定要禁用这个角色评估吗?", + "DISABLE_COMPUTABLE_ALERT_SUBTITLE": "如果该角色“{{roleName}}”被禁止估算用户故事的点数,那么该角色以前做的所有评估将被删除", + "COUNT_MEMBERS": "{{ role.members_count }} 这类角色的成员", + "TITLE_DELETE_ROLE": "删除角色", + "REPLACEMENT_ROLE": "和此角色有关的用户都将被移除", + "WARNING_DELETE_ROLE": "小心!所有角色估算都将被移除", + "ERROR_DELETE_ALL": "你不能删除所有值", + "EXTERNAL_USER": "外部用户" + }, + "THIRD_PARTIES": { + "SECRET_KEY": "密钥", + "PAYLOAD_URL": "有效负荷网址", + "VALID_IPS": "有效来源IP(请用逗点分开)" + }, + "BITBUCKET": { + "SECTION_NAME": "Bitbucket", + "PAGE_TITLE": "Bitbucket - {{projectName}}", + "INFO_VERIFYING_IP": "Bitbucket要求不指派,因此最佳确认方式为IP位置来源。如果此处空白,表示IP未有效校验。" + }, + "GITLAB": { + "SECTION_NAME": "Gitlab", + "PAGE_TITLE": "Gitlab - {{projectName}}", + "INFO_VERIFYING_IP": "GitLab要求不指派因此最佳确认方式为IP位置来源。如果此处空白,表示IP未有效校验。" + }, + "GITHUB": { + "SECTION_NAME": "Github", + "PAGE_TITLE": "Github - {{projectName}}" + }, + "GOGS": { + "SECTION_NAME": "Gogs", + "PAGE_TITLE": "Gogs - {{projectName}}" + }, + "WEBHOOKS": { + "PAGE_TITLE": "网页钩子- {{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": { + "PAGE_TITLE": "{{sectionName}} - 个性设置 - {{projectName}}", + "ADD": "加入自定义字段", + "EDIT": "编辑自定义字段", + "DELETE": "删除自定义字段", + "SAVE_TITLE": "储存自定义字段", + "CANCEL_TITLE": "取消创建", + "SET_FIELD_NAME": "设定你的自定义字段名称", + "SET_FIELD_DESCRIPTION": "设定你自定义字段的文字描述", + "FIELD_TYPE_DEFAULT": "-- 选择一个 --", + "ACTION_UPDATE": "更新自定义字段", + "ACTION_CANCEL_EDITION": "取消编辑" + }, + "MEMBERSHIP": { + "COLUMN_MEMBER": "成员", + "COLUMN_ADMIN": "管理者", + "COLUMN_ROLE": "角色", + "COLUMN_STATUS": "状态", + "STATUS_ACTIVE": "活跃", + "STATUS_PENDING": "待办中", + "DELETE_MEMBER": "删除成员", + "RESEND": "Resend", + "SUCCESS_SEND_INVITATION": "我们已再次发出邀请信给'{{email}}'.", + "ERROR_SEND_INVITATION": "我们未送出邀请", + "SUCCESS_DELETE": "已删除 {{message}}.", + "ERROR_DELETE": "我们无法删除 {{message}}.", + "DEFAULT_DELETE_MESSAGE": "邀请 {{email}}" + }, + "DEFAULT_VALUES": { + "LABEL_EPIC_STATUS": "史诗状态选择器的默认值", + "LABEL_US_STATUS": "用户故事状态选择器的默认值", + "LABEL_POINTS": "点数选择器预设值", + "LABEL_TASK_STATUS": "任务状态选择器预设值", + "LABEL_ISSUE_TYPE": "问题类型选择器预设值", + "LABEL_ISSUE_STATUS": "问题状态选择器预设值", + "LABEL_PRIORITY": "优先选择器预设值", + "LABEL_SEVERITY": "严重程度选择器预设值" + }, + "STATUS": { + "PLACEHOLDER_WRITE_STATUS_NAME": "为此新状态命名" + }, + "TYPES": { + "PLACEHOLDER_WRITE_NAME": "为此新元素命名" + }, + "US_STATUS": { + "ACTION_ADD_STATUS": "增加新状态", + "IS_ARCHIVED_COLUMN": "归档", + "IS_CLOSED_COLUMN": "关闭", + "WIP_LIMIT_COLUMN": "WIP限制", + "PLACEHOLDER_WRITE_NAME": "为此新状态命名" + }, + "MENU": { + "TITLE": "管理者", + "PROJECT": "项目", + "ATTRIBUTES": "属性", + "MEMBERS": "成员", + "PERMISSIONS": "权限", + "INTEGRATIONS": "整合", + "PLUGINS": "插件" + }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "属性" + }, + "SUBMENU_PROJECT_VALUES": { + "STATUS": "状态", + "POINTS": "点数", + "PRIORITIES": "优先级", + "SEVERITIES": "严重程度", + "TYPES": "类型", + "CUSTOM_FIELDS": "自定义字段", + "TAGS": "标签" + }, + "SUBMENU_PROJECT_PROFILE": { + "TITLE": "项目档案" + }, + "SUBMENU_ROLES": { + "TITLE": "角色", + "ACTION_NEW_ROLE": "+ 新角色", + "TITLE_ACTION_NEW_ROLE": "新增角色" + }, + "SUBMENU_THIDPARTIES": { + "TITLE": "服务" + }, + "PROJECT_TRANSFER": { + "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "你希望成为新的项目所有者吗?", + "PRIVATE": "私有的", + "ACCEPTED_PROJECT_OWNERNSHIP": "恭喜你!你现在是项目新的所有者了。", + "REJECTED_PROJECT_OWNERNSHIP": "好的。我们将联系当前项目的所有者", + "ACCEPT": "接受", + "REJECT": "拒绝", + "PROPOSE_OWNERSHIP": "{{owner}}, 当前项目 {{project}} 的所有者要求你成为项目的新的所有者。", + "ADD_COMMENT": "你愿意为项目所有者添加一条评论吗?", + "UNLIMITED_PROJECTS": "无线的", + "OWNER_MESSAGE": { + "PRIVATE": "请记住你可以拥有最多 {{maxProjects}} 个私有项目。你当前拥有 {{currentProjects}} 个私有项目", + "PUBLIC": "请记住你最多可以拥有 {{maxProjects}} 个公开项目。你当前拥有 {{currentProjects}} 个公开项目" + }, + "CANT_BE_OWNED": "目前你不能成为这类项目的所有者。如果你希望成为这个项目的所有者,请联系管理员,请其在你的账户设置中启用项目所有权。", + "CHANGE_MY_PLAN": "改变我的计划" + } + }, + "USER": { + "PROFILE": { + "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", + "EDIT": "编辑个人资料", + "FOLLOW": "追踪", + "CLOSED_US": "关闭用户故事", + "PROJECTS": "项目", + "PROJECTS_EMPTY": "{{username}} 尚无项目", + "CONTACTS": "联络人", + "CONTACTS_EMPTY": "{{username}} 尚无联络人", + "CURRENT_USER_CONTACTS_EMPTY": "您尚无任何联络人", + "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "你在Taiga一同工作的伙伴将自动成为你的联络人", + "REPORT": "回报滥用", + "TABS": { + "ACTIVITY_TAB": "时间表", + "ACTIVITY_TAB_TITLE": "显示该用户的所有活动", + "PROJECTS_TAB": "项目", + "PROJECTS_TAB_TITLE": "列出该用户参与的所有项目", + "LIKES_TAB": "Likes", + "LIKES_TAB_TITLE": "List all likes made by this user", + "VOTES_TAB": "投票数", + "VOTES_TAB_TITLE": "列出该用户的所有投票", + "WATCHED_TAB": "关注", + "WATCHED_TAB_TITLE": "列出该用户关注的所有事项", + "CONTACTS_TAB": "联络人", + "CONTACTS_TAB_TITLE": "列出这个用户的所有联系人" + } + }, + "PROFILE_SIDEBAR": { + "TITLE": "个人信息", + "DESCRIPTION": "其他人可以看到你做的所有事情以及正在做的事情。添加一个好的简历可以使得你的个人信息更为丰满。", + "ADD_INFO": "编辑个人简介" + }, + "PROFILE_FAVS": { + "FILTER_INPUT_PLACEHOLDER": "输入内容...", + "FILTER_TYPE_ALL": "所有", + "FILTER_TYPE_ALL_TITLE": "显示所有", + "FILTER_TYPE_PROJECTS": "项目", + "FILTER_TYPE_PROJECT_TITLES": "只显示项目", + "FILTER_TYPE_EPICS": "史诗", + "FILTER_TYPE_EPIC_TITLES": "仅显示史诗", + "FILTER_TYPE_USER_STORIES": "故事", + "FILTER_TYPE_USER_STORIES_TITLES": "只显示用户故事", + "FILTER_TYPE_TASKS": "任务", + "FILTER_TYPE_TASK_TITLES": "只显示任务", + "FILTER_TYPE_ISSUES": "问题", + "FILTER_TYPE_ISSUES_TITLE": "只显示问题", + "EMPTY_TITLE": "看来没有什么可以显示的." + } + }, + "PROJECT": { + "PAGE_TITLE": "{{projectName}}", + "WELCOME": "欢迎", + "SECTION_PROJECTS": "项目", + "HELP": "记录你的项目在上方常用栏位
    前十个项目将会显示在上方导览处。", + "PRIVATE": "私有项目", + "LOOKING_FOR_PEOPLE": "这个项目在寻找队友", + "FANS_COUNTER_TITLE": "{total, plural, one{一个粉丝} other{# 个粉丝}}", + "WATCHERS_COUNTER_TITLE": "{total, plural, one{一个关注者} other{# 个关注者}}", + "MEMBERS_COUNTER_TITLE": "{total, plural, one{一个成员} other{# 个成员}}", + "BLOCKED_PROJECT": { + "BLOCKED": "关闭项目", + "THIS_PROJECT_IS_BLOCKED": "这个项目暂时被关闭了", + "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "要解冻你的项目,请联系管理员。" + }, + "STATS": { + "PROJECT": "项目
    点数", + "DEFINED": "已定义
    点数", + "ASSIGNED": "已指派
    点数", + "CLOSED": "已关闭
    点数" + }, + "SECTION": { + "SEARCH": "搜索", + "TIMELINE": "时间表", + "BACKLOG": "待办任务", + "KANBAN": "看板", + "ISSUES": "问题", + "WIKI": "维基", + "TEAM": "团队", + "MEETUP": "视频会议", + "ADMIN": "管理者" + }, + "NAVIGATION": { + "SECTION_TITLE": "你的项目", + "PLACEHOLDER_SEARCH": "搜索", + "ACTION_CREATE_PROJECT": "创建项目", + "ACTION_IMPORT_PROJECT": "导入项目", + "MANAGE_PROJECTS": "管理项目", + "TITLE_CREATE_PROJECT": "创建项目", + "TITLE_IMPORT_PROJECT": "导入项目", + "TITLE_PRVIOUS_PROJECT": "显示过去项目", + "TITLE_NEXT_PROJECT": "显示下一个任务", + "HELP_TITLE": "Taiga支持页", + "HELP": "帮助", + "HOMEPAGE": "主页", + "FEEDBACK_TITLE": "发送反馈", + "FEEDBACK": "反馈", + "NOTIFICATIONS_TITLE": "编辑个人通知设定", + "NOTIFICATIONS": "通知", + "ORGANIZATIONS_TITLE": "编辑您的组织资料", + "ORGANIZATIONS": "编辑组织资料", + "SETTINGS_TITLE": "编辑个人设定", + "SETTINGS": "设定", + "VIEW_PROFILE_TITLE": "查看个人资料", + "VIEW_PROFILE": "查看个人资料", + "EDIT_PROFILE_TITLE": "编辑你的个人资料", + "EDIT_PROFILE": "编辑个人资料", + "CHANGE_PASSWORD_TITLE": "更换密码", + "CHANGE_PASSWORD": "更换密码", + "DASHBOARD_TITLE": "控制台", + "DISCOVER_TITLE": "发现流行项目", + "NEW_ITEM": "新建", + "DISCOVER": "发现", + "ACTION_REORDER": "通过拖动来改变显示顺序" + }, + "IMPORT": { + "TITLE": "导入项目中", + "UPLOADING_FILE": "上传倾倒档案", + "DESCRIPTION": "这个过桯要花点时间,请保持视窗开启", + "ASYNC_IN_PROGRESS_TITLE": "我们正在导入你的项目", + "ASYNC_IN_PROGRESS_MESSAGE": "这个过程要花上一点时间
    当弄好时我们会发给你一封邮件", + "UPLOAD_IN_PROGRESS_MESSAGE": "已上传 {{totalSize}}中的{{uploadedSize}}", + "ERROR": "系统在滙进你倒入的资料时遇上一些问题,请再试一次", + "ERROR_TOO_MANY_REQUEST": "抱歉系统繁忙中,请稍后再试试", + "ERROR_MESSAGE": "我们的系统无法导入你的资料", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统容量上限, 请重传小一点的档案 ({{maxFileSize}})", + "SYNC_SUCCESS": "你的项目已成功导入", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC": "你正在导入的项目有 {{members}} 位成员,不幸的是,根据你当前的计划,每个项目最多允许 {{max_memberships}} 位成员。如果你希望增加这个限制请联系管理员。", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "对不起,你当前的计划不允许额外的私有项目", + "DESC": "你尝试导入的项目是私有的。不幸的是,你当前的计划不允许额外的私有项目。" + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "对不起,你当前的计划不允许额外的公开项目", + "DESC": "你尝试导入的项目是公开的。不幸的是,你当前的计划不允许额外的公开项目。" + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "你当前的计划允许每个私有项目最多 {{max_memberships}} 位成员。" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "你当前的计划允许每个项目最多 {{max_memberships}} 位成员。" + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "对不起,你当前的计划不允许额外的私有项目或者每个私有项目多于 {{max_memberships}} 位成员", + "DESC": "你正在试图导入的项目是私有的并且有 {{members}} 位成员。" + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "对不起,你当前的计划不允许额外的公开项目或者每个公开项目多于 {{max_memberships}} 位成员", + "DESC": "你正在试图导入的项目是公开的并且有多于 {{members}} 位成员。" + } + } + }, + "LIKE_BUTTON": { + "LIKE": "点赞", + "LIKED": "已点赞", + "UNLIKE": "取消点赞", + "BUTTON_TITLE": "对这个项目点赞或者取消点赞", + "COUNTER_TITLE": "{total, plural, one{一个粉丝} other{# 个粉丝}}" + }, + "WATCH_BUTTON": { + "BUTTON_TITLE": "关注这个项目并设置通知规则", + "WATCH": "Watch", + "WATCHING": "关注中", + "COUNTER_TITLE": "{total, plural, one{一个关注者} other{# 个关注者}}", + "OPTIONS": { + "NOTIFY_ALL": "接收所有通知", + "NOTIFY_ALL_TITLE": "接收这个项目的所有通知", + "NOTIFY_INVOLVED": "只接收相关通知", + "NOTIFY_INVOLVED_TITLE": "只接收与你相关的通知", + "UNWATCH": "取消关注", + "UNWATCH_TITLE": "取消关注这个项目" + } + } + }, + "LIGHTBOX": { + "DELETE_ACCOUNT": { + "SECTION_NAME": "删除Taiga账户", + "CONFIRM": "你确定要删除Taiga账户吗?", + "NEWSLETTER_LABEL_TEXT": "不愿再收到电子月报", + "CANCEL": "返回设置", + "ACCEPT": "删除账号", + "BLOCK_PROJECT": "请注意,在你删除你的账户之后,所有属于你的项目都会被冻结。如果你确实希望一个项目被冻结,在你删除你的账户之前,请将所有权转移至该项目的其他成员名下。", + "SUBTITLE": "很抱歉看到你离开。如果你再次考虑我们的话,我们会在这儿! :(" + }, + "DELETE_PROJECT": { + "TITLE": "删除项目", + "QUESTION": "你确定要删除这个项目吗?", + "SUBTITLE": "所有项目资料 (用户故事/任务/问题/冲刺/维基页面) 将会丢失! :-(", + "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": "输入一个电邮地址", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "对不起,该项目不能超过 {{maxMembers}} 位成员。
    如果你希望增加当前限制,请联系管理员。", + "LIMIT_USERS_WARNING_MESSAGE": "对不起,本项目不能有超过 {{maxMembers}} 名成员。" + }, + "LEAVE_PROJECT_WARNING": { + "TITLE": "对不起,该项目不允许在没有所有者的情况下离开", + "CURRENT_USER_OWNER": { + "DESC": "你是本项目的当前所有者。在离开之前,请将所有权转移给其他成员。", + "BUTTON": "改变项目拥有者" + }, + "OTHER_USER_OWNER": { + "DESC": "对不起,你不能删除作为当前项目所有者的成员。首先,请指派一位新的项目所有者。", + "BUTTON": "请求项目所有者改变" + } + }, + "CHANGE_OWNER": { + "TITLE": "你希望谁作为项目的新的所有者?", + "ADD_COMMENT": "评论", + "BUTTON": "要求这位项目成员作为新的项目所有者" + } + }, + "EPIC": { + "PAGE_TITLE": "{{epicSubject}} - 史诗{{epicRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "状态:{{epicStatus}}。描述:{{epicDescription}}", + "SECTION_NAME": "史诗", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "断开相关用户故事链接", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "这将删除到相关用户故事的链接'{{subject}}'", + "ERROR_UNLINK_RELATED_USERSTORY": "无法断开链接:{{errorMessage}}", + "CREATE_RELATED_USERSTORIES": "创建关系", + "NEW_USERSTORY": "新建用户故事", + "EXISTING_USERSTORY": "退出用户故事", + "CHOOSE_PROJECT_FOR_CREATION": "项目是什么", + "SUBJECT": "主题", + "SUBJECT_BULK_MODE": "题目(批量插入)", + "CHOOSE_PROJECT_FROM": "项目是什么", + "CHOOSE_USERSTORY": "用户故事是什么", + "NO_USERSTORIES": "该项目无用户故事。请选择其他项目。", + "FILTER_USERSTORIES": "过滤用户故事", + "LIGHTBOX_TITLE_BLOKING_EPIC": "屏蔽史诗", + "ACTION_DELETE": "删除史诗" + }, + "US": { + "PAGE_TITLE": "{{userStorySubject}} - 用户故事 {{userStoryRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "状态: {{userStoryStatus }},已完成 {{userStoryProgressPercentage}}% (任务总数 {{userStoryTotalTasks}},已关闭{{userStoryClosedTasks}}),点数: {{userStoryPoints}},描述: {{userStoryDescription}}", + "SECTION_NAME": "用户故事", + "LINK_TASKBOARD": "任务板", + "TITLE_LINK_TASKBOARD": "到任务板去", + "TOTAL_POINTS": "总点数", + "ADD": "+新增用户故事", + "ADD_BULK": "批次加入新用户故事", + "PROMOTED": "此用户故事已提升成问题:", + "TITLE_LINK_GO_TO_ISSUE": "到问题", + "EXTERNAL_REFERENCE": "此用户故事创造者是", + "GO_TO_EXTERNAL_REFERENCE": "回到一开始", + "BLOCKED": "这个用户故事已被封锁", + "TITLE_DELETE_ACTION": "删除用户故事", + "LIGHTBOX_TITLE_BLOKING_US": "封锁中的用户故事", + "TASK_COMPLETED": "已完成任务的 {{totalClosedTasks}}/{{totalTasks}}", + "ASSIGN": "指派用户故事", + "NOT_ESTIMATED": "无预估", + "TOTAL_US_POINTS": "全部用户故事点数", + "TRIBE": { + "PUBLISH": "以Gig的形式在Taiga Tribe中发布", + "PUBLISH_INFO": "更多信息", + "PUBLISH_TITLE": "在Taiga Tribe中查找关于发布的更多信息", + "PUBLISHED_AS_GIG": "用户故事已经以Gig的形式在Taiga Tribe中发布", + "EDIT_LINK": "编辑链接", + "CLOSE": "关闭", + "SYNCHRONIZE_LINK": "与Taiga Tribe同步", + "PUBLISH_MORE_INFO_TITLE": "你是否需要其他人来做这个任务?", + "PUBLISH_MORE_INFO_TEXT": "

    如果你在工作中的某个特殊的地方需要帮助,你可以很容易地在 Taiga Tribe 创建gig并接受来自世界各地的帮助。你将能够控制并管理这个gig并享受一个渴望贡献的伟大社区。

    TaigaTribe 作为Taiga的姊妹存在。两个平台可以相互独立,但是我们相信联合使用他们会更为强大,所以我们确信集成工作将会非常成功

    " + }, + "FIELDS": { + "TEAM_REQUIREMENT": "团队要求", + "CLIENT_REQUIREMENT": "客户要求", + "FINISH_DATE": "完成日期" + } + }, + "COMMENTS": { + "DELETED_INFO": "评论被用户{{user}}删除", + "TITLE": "评论", + "COMMENTS_COUNT": "{{comments}}评论", + "ORDER": "排序", + "OLDER_FIRST": "上次第一名", + "RECENT_FIRST": "最近第一名", + "COMMENT": "评论", + "EDIT_COMMENT": "编辑评论", + "EDITED_COMMENT": "已编辑", + "SHOW_HISTORY": "查看历史", + "TYPE_NEW_COMMENT": "在此输入一个新的评论", + "SHOW_DELETED": "显示遭删除的评论", + "HIDE_DELETED": "隐藏已删除之评论", + "DELETE": "删除评论", + "RESTORE": "恢复原评论", + "HISTORY": { + "TITLE": "动态" + } + }, + "ACTIVITY": { + "SHOW_ACTIVITY": "显示动态", + "DATETIME": "DD MMM YYYY HH:mm", + "SHOW_MORE": "+ 显示过去条目 ({{showMore}} 更多)", + "TITLE": "动态", + "ACTIVITIES_COUNT": "{{activities}} 活动", + "REMOVED": "已移除", + "ADDED": "已加入", + "TAGS_ADDED": "已添加的标签", + "TAGS_REMOVED": "已移除的标签", + "US_POINTS": "{{role}} 得分", + "NEW_ATTACHMENT": "新附件", + "DELETED_ATTACHMENT": "删除附件:", + "UPDATED_ATTACHMENT": "更新附件 ({{filename}}):", + "CREATED_CUSTOM_ATTRIBUTE": "创建自定义属性", + "UPDATED_CUSTOM_ATTRIBUTE": "更新自定义属性", + "SIZE_CHANGE": "使 {size, plural, one{更改} other{变化}}", + "BECAME_DEPRECATED": "已置为废弃", + "BECAME_UNDEPRECATED": "已置为废弃", + "TEAM_REQUIREMENT": "团队要求", + "CLIENT_REQUIREMENT": "客户要求", + "BLOCKED": "已封锁", + "VALUES": { + "YES": "yes", + "NO": "no", + "EMPTY": "空白", + "UNASSIGNED": "未指派" + }, + "FIELDS": { + "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": "已废弃", + "IS_NOT_DEPRECATED": "未废弃", + "ORDER": "次序", + "BACKLOG_ORDER": "待办任务先后次序", + "SPRINT_ORDER": "冲刺任务次序", + "KANBAN_ORDER": "看板次序", + "TASKBOARD_ORDER": "任务板次序", + "US_ORDER": "用户故事次序", + "COLOR": "颜色" + } + }, + "BACKLOG": { + "PAGE_TITLE": "待办任务 - {{projectName}}", + "PAGE_DESCRIPTION": "待办任务面板 {{projectName}}(项目的用户故事与冲刺任务): {{projectDescription}}", + "SECTION_NAME": "待办任务", + "CUSTOMIZE_GRAPH": "自定义你的代办任务图表", + "CUSTOMIZE_GRAPH_TEXT": "一个好的图表可以帮助你更好地跟随项目进展,这就要求你设置好点数和冲刺", + "CUSTOMIZE_GRAPH_ADMIN": "管理者", + "CUSTOMIZE_GRAPH_TITLE": "通过管理员来设置点数和冲刺", + "MOVE_US_TO_CURRENT_SPRINT": "移到目前的冲刺", + "MOVE_US_TO_LATEST_SPRINT": "切换到最近的冲刺", + "SHOW_FILTERS": "显示过滤器", + "SHOW_TAGS": "显示标签", + "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": "当过滤器开启时,无法放入待办任务", + "DOOMLINE": "项目规模 [Doomline]", + "CHART": { + "XAXIS_LABEL": "冲刺任务", + "YAXIS_LABEL": "点数", + "OPTIMAL": "最适化的冲刺任务\"{{sprintName}}\"待定点数应为 {{value}}", + "REAL": "真实的冲刺任务\"{{sprintName}}\"待定点数为 {{value}}", + "INCREMENT_TEAM": "团队要求的冲刺任务\"{{sprintName}}\"渐增点数为 {{value}}", + "INCREMENT_CLIENT": "客户要求的冲刺任务\"{{sprintName}}\"渐增点数为 {{value}}" + }, + "TAGS": { + "TOGGLE": "切换标签可见度", + "SHOW": "显示标签", + "HIDE": "隐藏标签" + }, + "FORECASTING": { + "TITLE": "速度预测", + "BACKLOG": "显示待办任务", + "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", + "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + }, + "TABLE": { + "COLUMN_US": "用户故事", + "TITLE_COLUMN_POINTS": "选择检示每个角色" + }, + "SPRINT_SUMMARY": { + "TOTAL_POINTS": "全部
    点数", + "COMPLETED_POINTS": "已完成
    点数", + "OPEN_TASKS": "开启
    任务", + "CLOSED_TASKS": "已关闭
    任务", + "IOCAINE_DOSES": "毒物(全新任务挑战)
    剂量", + "SHOW_STATISTICS_TITLE": "显示统计", + "TOGGLE_BAKLOG_GRAPH": "显示/隐藏 剩余工作量图", + "POINTS_PER_ROLE": "每角色的点数" + }, + "SUMMARY": { + "PROJECT_POINTS": "项目
    点数", + "DEFINED_POINTS": "已定义
    点数", + "CLOSED_POINTS": "已关闭
    点数", + "POINTS_PER_SPRINT": "点数 /
    冲刺任务" + }, + "FILTERS": { + "TOGGLE": "切换过滤器可见度", + "TITLE": "过滤器", + "REMOVE": "移除过滤器", + "HIDE": "隐藏过滤器", + "SHOW": "显示过滤器" + }, + "SPRINTS": { + "TITLE": "冲刺任务", + "DATE": "DD MMM YYYY", + "LINK_TASKBOARD": "冲刺任务板", + "TITLE_LINK_TASKBOARD": "到任务板 {{spring.name}}", + "NUMBER_SPRINTS": "
    冲刺任务", + "EMPTY": "还没有冲刺", + "WARNING_EMPTY_SPRINT_ANONYMOUS": "这个冲刺没有用户故事", + "WARNING_EMPTY_SPRINT": "从你的待办事项中拖拽一个用户故事到这里来开启一个新的冲刺", + "TITLE_ACTION_NEW_SPRINT": "添加一个新的冲刺", + "TEXT_ACTION_NEW_SPRINT": "你可能希望在你的项目中创建一个新的冲刺", + "ACTION_SHOW_CLOSED_SPRINTS": "显示关闭冲刺任务", + "ACTION_HIDE_CLOSED_SPRINTS": "隐藏冲刺任务" + } + }, + "ERROR": { + "TEXT1": "系统出了一点问题,工程师正在抢修中", + "NOT_FOUND": "找不到", + "NOT_FOUND_TEXT": "Error 404,你要找的网页不存在,你可以稍后再回来Taiga首页,看看是否能再次找到要找的东西。", + "PERMISSION_DENIED": "无此权限", + "PERMISSION_DENIED_TEXT": "你无权访问这个页面", + "VERSION_ERROR": "Taiga某人之前更改了这个,而我们的工程师无法再做改变。请重新载入页面来使用你的更新(之前设定将消失)" + }, + "TASKBOARD": { + "PAGE_TITLE": "{{sprintName}} - 冲刺任务看板 - {{projectName}}", + "PAGE_DESCRIPTION": "冲刺任务 {{sprintName}} (项目 {{projectName}} 从 {{startDate}} 到 {{endDate}})。完成比例{{completedPercentage}}% (总点数 {{totalPoints}} 点,完成 {{completedPoints}} 点)。总任务数 {{totalTasks}},开启任务数 {{openTasks}}。", + "SECTION_NAME": "任务板", + "TITLE_ACTION_ADD": "增加新任务", + "TITLE_ACTION_ADD_BULK": "批次加入新任务", + "TITLE_ACTION_ASSIGN": "指派任务", + "TITLE_ACTION_EDIT": "结束任务", + "PLACEHOLDER_CARD_TITLE": "这可能是一个任务", + "PLACEHOLDER_CARD_TEXT": "将用户故事拆分为多个任务以便单独跟踪", + "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": "天数", + "YAXIS_LABEL": "点数", + "OPTIMAL": "一天最适待办点数 {formattedDate},应为 {{roundedValue}}", + "REAL": "一天真实的待办点数 {{formattedDate}},应为 {{roundedValue}}", + "DATE": "DD MMM YYYY" + } + }, + "TASK": { + "PAGE_TITLE": "{{taskSubject}} - 任务 {{taskRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "状态:{{taskStatus }}。描述:{{taskDescription}}", + "SECTION_NAME": "任务", + "LINK_TASKBOARD": "任务板", + "TITLE_LINK_TASKBOARD": "到任务板去", + "PLACEHOLDER_SUBJECT": "键入新任务主旨", + "TITLE_SELECT_STATUS": "状态名称", + "OWNER_US": "这任务属于", + "TITLE_LINK_GO_OWNER": "到用户故事", + "ORIGIN_US": "此任务创造者是", + "TITLE_LINK_GO_ORIGIN": "到用户故事", + "BLOCKED": "这任务已被封锁", + "TITLE_DELETE_ACTION": "删除任务", + "LIGHTBOX_TITLE_BLOKING_TASK": "封锁中的任务", + "FIELDS": { + "MILESTONE": "冲刺任务", + "USER_STORY": "用户故事", + "IS_IOCAINE": "负予全新任务" + }, + "ACTION_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": "我们系统已更新你的电子邮件地址" + }, + "ISSUES": { + "PAGE_TITLE": "问题 - {{projectName}}", + "PAGE_DESCRIPTION": "{{projectName}}的问题清单看版:{{projectDescription}}", + "LIST_SECTION_NAME": "问题", + "SECTION_NAME": "问题", + "ACTION_NEW_ISSUE": "+ 新问题", + "ACTION_PROMOTE_TO_US": "提升到用户故事", + "PROMOTED": "此问题已提升为用户故事", + "EXTERNAL_REFERENCE": "此问题的提出者是", + "GO_TO_EXTERNAL_REFERENCE": "回到开头", + "BLOCKED": "这个议题已被冻结", + "ACTION_DELETE": "删除议题", + "LIGHTBOX_TITLE_BLOKING_ISSUE": "冻结中的问题", + "FIELDS": { + "PRIORITY": "优先级", + "SEVERITY": "严重程度", + "TYPE": "类型" + }, + "CONFIRM_PROMOTE": { + "TITLE": "将此问题提为用户故事", + "MESSAGE": "你确定要用此问题创建一个新的用户故事?" + }, + "TABLE": { + "COLUMNS": { + "TYPE": "类型", + "SEVERITY": "严重程度", + "PRIORITY": "优先级", + "SUBJECT": "主旨", + "VOTES": "投票数", + "STATUS": "状态", + "CREATED": "已创建", + "ASSIGNED_TO": "指派给" + }, + "TITLE_ACTION_CHANGE_STATUS": "改变状态", + "TITLE_ACTION_ASSIGNED_TO": "指派给", + "BLOCKED": "已冻结", + "EMPTY": { + "TITLE": "没有问题回报:-)", + "SUBTITLE": "你有发现任何问题吗?" + } + } + }, + "ISSUE": { + "PAGE_TITLE": "{{issueSubject}} - 问题 {{issueRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "状态:{{issueStatus }},类型:{{issueType}},优先级:{{issuePriority}},严重程度:{{issueSeverity}},描述:{{issueDescription}}" + }, + "KANBAN": { + "PAGE_TITLE": "看板 - {{projectName}}", + "PAGE_DESCRIPTION": "看板面板上有项目的用户故事 {{projectName}}:{{projectDescription}}", + "SECTION_NAME": "看板", + "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": "撤销归档", + "PLACEHOLDER_CARD_TITLE": "这是您的用户故事", + "PLACEHOLDER_CARD_TEXT": "用户故事可有子任务以便分离需求" + }, + "SEARCH": { + "PAGE_TITLE": "搜索 - {{projectName}}", + "PAGE_DESCRIPTION": "项目搜索(用户故事, 问题, 任务或维基页等信息) {{projectName}}: {{projectDescription}}", + "FILTER_EPICS": "史诗", + "FILTER_USER_STORIES": "用户故事", + "FILTER_ISSUES": "问题", + "FILTER_TASKS": "任务", + "FILTER_WIKI": "维基页", + "PLACEHOLDER_SEARCH": "搜索", + "TITLE_ACTION_SEARCH": "搜索", + "EMPTY_TITLE": "依你搜索标准并未找到任何东西", + "EMPTY_DESCRIPTION": "请试试上方某一个分页或再搜索一次" + }, + "TEAM": { + "PAGE_TITLE": "团队- {{projectName}}", + "PAGE_DESCRIPTION": "团队面版可显示项目中所有成员{{projectName}}:{{projectDescription}}", + "SECTION_NAME": "团队", + "APP_TITLE": "团队- {{projectName}}", + "PLACEHOLDER_INPUT_SEARCH": "以全名搜索", + "COLUMN_MR_WOLF": "问题解决高手", + "EXPLANATION_COLUMN_MR_WOLF": "已关闭议题", + "COLUMN_IOCAINE": "新任务挑战者", + "EXPLANATION_COLUMN_IOCAINE": "毒物(新任务)剂量摄取", + "COLUMN_CERVANTES": "大文豪", + "EXPLANATION_COLUMN_CERVANTES": "已编辑的维基页", + "COLUMN_BUG_HUNTER": "Bug猎手", + "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": "退出此项目" + }, + "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": "只接收相关通知", + "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": "简历(最多210字)", + "PLACEHOLDER_BIO": "请自我介绍", + "LANGUAGE": "语言", + "LANGUAGE_DEFAULT": "-- 使用默认语言 --", + "THEME": "主题", + "THEME_DEFAULT": "-- 使用默认主题--" + } + }, + "WIZARD": { + "SECTION_TITLE_CREATE_PROJECT": "创建项目", + "CREATE_PROJECT_TEXT": "清新与整洁,让人兴奋的项目", + "CHOOSE_TEMPLATE": "哪个模板最适合你的项目?", + "CHOOSE_TEMPLATE_TITLE": "了解关于项目模板的更多知识", + "CHOOSE_TEMPLATE_INFO": "更多信息", + "PROJECT_DETAILS": "项目细节", + "PUBLIC_PROJECT": "公开项目", + "PRIVATE_PROJECT": "私有项目", + "CREATE_PROJECT": "创建项目", + "MAX_PRIVATE_PROJECTS": "你已经达到了私有项目的最大成员数目", + "MAX_PUBLIC_PROJECTS": "对不起,你已经达了公开项目的最大成员上限", + "CHANGE_PLANS": "改变计划" + }, + "WIKI": { + "PAGE_TITLE": "{{wikiPageName}} - 维基 - {{projectName}}", + "PAGE_DESCRIPTION": "最近编辑{{lastModifiedDate}} (总共编辑了{{totalEditions}}次),内容:{{ wikiPageContent }}", + "DATETIME": "DD MMM YYYY HH:mm", + "PLACEHOLDER_PAGE": "编写你的维基页", + "REMOVE": "移除此维基页", + "DELETE_LIGHTBOX_TITLE": "删除维基页", + "DELETE_LINK_TITLE": "删除维基链接", + "NAVIGATION": { + "HOME": "主页", + "SECTION_NAME": "连结", + "ACTION_ADD_LINK": "新增连结", + "ALL_PAGES": "所有页面" + }, + "SUMMARY": { + "TIMES_EDITED": "次数
    编辑", + "LAST_EDIT": "上次
    编辑", + "LAST_MODIFICATION": "上回修改" + }, + "SECTION_PAGES_LIST": "所有页面", + "PAGES_LIST_COLUMNS": { + "TITLE": "标题", + "EDITIONS": "版本", + "CREATED": "已创建", + "MODIFIED": "已修改", + "CREATOR": "创建者", + "LAST_MODIFIER": "最新修改者" + } + }, + "HINTS": { + "SECTION_NAME": "提示", + "LINK": "如果想知道如何使用,可以到我们的支援页面了解详情。", + "LINK_TITLE": "造访我们的支援页面", + "HINT1_TITLE": "你知道可以导入与滙出项目吗?", + "HINT1_TEXT": "可以从 Taiga提取所有个人资料记录,移入其它地方。", + "HINT2_TITLE": "你知道可以创建个人化栏位吗", + "HINT2_TEXT": "作为一个灵活手段,团队现在可以创建自定义字段,这意味着需要为特殊的工作流指定有用的数据。", + "HINT3_TITLE": "根据特性来重新排序与你最为相关的项目。", + "HINT3_TEXT": "在顶端的直接访问条中,列出了十个项目。", + "HINT4_TITLE": "你忘记了你正在做什么了吗?", + "HINT4_TEXT": "别担心,在控制台可以找到你的公开任务、问题以及用户故事的工作次序。" + }, + "TIMELINE": { + "UPLOAD_ATTACHMENT": "{{username}} 上传新附件 {{obj_name}}", + "US_CREATED": "{{username}} 为项目 {{project_name}} 创建新的用户故事 {{obj_name}}", + "ISSUE_CREATED": "{{username}} 为项目 {{project_name}} 创建新问题 {{obj_name}}", + "TASK_CREATED": "{{username}} 为项目 {{project_name}} 创建新任务 {{obj_name}}", + "TASK_CREATED_WITH_US": "{{username}} 为项目 {{project_name}} 创建新任务 {{obj_name}},该任务隶属于用户故事 {{us_name}}", + "WIKI_CREATED": "{{username}} 为项目 {{project_name}} 创建新维基页 {{obj_name}}", + "MILESTONE_CREATED": "{{username}} 为项目 {{project_name}} 创建新冲刺任务 {{obj_name}}", + "EPIC_CREATED": "{{username}} 已经在{{project_name}}中创建了一个新史诗{{obj_name}}", + "EPIC_RELATED_USERSTORY_CREATED": "在{{project_name}}中{{username}}已经关联到史诗{{epic_name}}的用户故事{{related_us_name}}", + "NEW_PROJECT": "{{username}} 创建项目 {{project_name}}", + "MILESTONE_UPDATED": "{{username}} 已更新冲刺任务 {{obj_name}}", + "US_UPDATED": "{{username}} 已更新用户故事 {{obj_name}} 的 \"{{field_name}}\" 属性", + "US_UPDATED_WITH_NEW_VALUE": "{{username}} 更新了用户故事 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}", + "US_UPDATED_POINTS": "{{username}} 更新了用户故事 {{obj_name}} 的 \"{{field_name}}\" 点数为 {{new_value}}", + "ISSUE_UPDATED": "{{username}} 更新了问题 {{obj_name}} 的 \"{{field_name}}\" 属性", + "ISSUE_UPDATED_WITH_NEW_VALUE": "{{username}} 更新了问题 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}", + "TASK_UPDATED": "{{username}} 更新了任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}", + "TASK_UPDATED_WITH_NEW_VALUE": "{{username}} 更新了任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}", + "TASK_UPDATED_WITH_US": "{{username}} 更新了用户故事 {{us_name}} 的任务 {{obj_name}} 的 \"{{field_name}}\" 属性", + "TASK_UPDATED_WITH_US_NEW_VALUE": "{{username}} 已更新了用户故事 {{us_name}} 的任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}", + "WIKI_UPDATED": "{{username}} 更新了维基页 {{obj_name}}", + "EPIC_UPDATED": "{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性", + "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性为{{new_value}}", + "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性为", + "NEW_COMMENT_US": "{{username}} 评论了用户故事 {{obj_name}}", + "NEW_COMMENT_ISSUE": "{{username}} 评论了问题 {{obj_name}}", + "NEW_COMMENT_TASK": "{{username}} 评论了任务 {{obj_name}}", + "NEW_COMMENT_EPIC": "{{username}}在史诗{{obj_name}}做了评论", + "NEW_MEMBER": "{{project_name}} 有新成员", + "US_ADDED_MILESTONE": "{{username}} 为冲刺 {{sprint_name}} 添加用户故事 {{obj_name}}", + "US_MOVED": "{{username}} 已经移动了用户故事 {{obj_name}}", + "US_REMOVED_FROM_MILESTONE": "{{username}} 新增用户故事 {{obj_name}} 到待办任务", + "BLOCKED": "{{username}} 冻结了 {{obj_name}}", + "UNBLOCKED": "{{username}} 解除对 {{obj_name}} 的冻结", + "NEW_USER": "{{username}} 已加入 Taiga" + }, + "LEGAL": { + "TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD": "当创建一个新账户时,说明你已经同意我们的
    服务条款隐私策略." + }, + "EXTERNAL_APP": { + "PAGE_TITLE": "一个外部应用需要验证", + "PAGE_DESCRIPTION": "一个外部应用需要验证", + "AUTHORIZATION_REQUEST": "向你的Taiga账户验证{{application}}?", + "LOGIN_WITH_ANOTHER_USER": "以其他用户登录", + "AUTHORIZE_APP": "授权应用", + "CANCEL": "取消" + }, + "JOYRIDE": { + "NAV": { + "NEXT": "下一个", + "BACK": "后退", + "SKIP": "跳过", + "DONE": "完成" + }, + "DASHBOARD": { + "STEP1": { + "TITLE": "你的项目", + "TEXT": "欢迎!你将找到你所涉及的项目。" + }, + "STEP2": { + "TITLE": "进行中", + "TEXT": "在这里你将发现一些你正在处理的用户故事,任务,问题。" + }, + "STEP3": { + "TITLE": "观看中", + "TEXT1": "在这里你将会找到那些你希望了解的你的项目成员。", + "TEXT2": "你已经开始使用Taiga ;)" + }, + "STEP4": { + "TITLE": "现在开始!", + "TEXT1": "你可以以创建你的第一个Taiga项目开始。", + "TEXT2": "祝你好运!" + } + }, + "BACKLOG": { + "STEP1": { + "TITLE": "项目简介", + "TEXT1": "在这里你将看到你的项目状态。", + "TEXT2": "通过管理员,你可以改变项目的各种设置。" + }, + "STEP2": { + "TITLE": "产品待办事项", + "TEXT": "待办事项是产品的需求(用户故事)列表这里也就是你做冲刺计划的地方。" + }, + "STEP3": { + "TITLE": "冲刺任务", + "TEXT": "冲刺是一段时间(一般为两周),在这期间你需要完成指定工作并交付。" + }, + "STEP4": { + "TITLE": "用户故事", + "TEXT": "这些是更高层次的需求。你可以将它们添加到待办事项中,然后将其拖拽到冲刺,它们应该在冲刺中进行交付。" + } + }, + "KANBAN": { + "STEP1": { + "TITLE": "自定义你的工作流", + "TEXT": "通过管理员,根据你的需要设置这些列来映射你的工作流" + }, + "STEP2": { + "TITLE": "用户故事和任务", + "TEXT": "用户故事是更高层次的需求。你可以将其拖拽到不同列中" + }, + "STEP3": { + "TITLE": "添加你的用户故事", + "TEXT1": "你可能希望添加一个用户故事(添加用户故事图标)或者一组用户故事(批量图标)", + "TEXT2": "祝你好运!" + } + } + }, + "DISCOVER": { + "PAGE_TITLE": "探索更多项目", + "PAGE_DESCRIPTION": "Taiga中的公共项目的可搜索的目录。探索积压,时间线,问题,以及团队。检索出最喜欢的或者最活跃的项目。通过看板或者敏捷开发进行过滤。", + "DISCOVER_TITLE": "探索项目", + "DISCOVER_SUBTITLE": "{projects, plural, one{一个要发现的公开项目} other{# 个要发现的公开项目}}", + "MOST_ACTIVE": "最活跃的", + "MOST_ACTIVE_EMPTY": "还没有活动的项目", + "MOST_LIKED": "最受欢迎的", + "MOST_LIKED_EMPTY": "还没有喜欢的项目", + "VIEW_MORE": "查看更多", + "RECRUITING": "这个项目在寻找队友", + "FEATURED": "特色项目", + "EMPTY": "没有满足当前搜索条件的项目。
    再试一次!", + "FILTERS": { + "ALL": "所有", + "KANBAN": "看板", + "SCRUM": "冲刺", + "PEOPLE": "查找队友", + "WEEK": "上周", + "MONTH": "上月", + "YEAR": "去年", + "ALL_TIME": "长期", + "CLEAR": "清除过滤" + }, + "SEARCH": { + "PAGE_TITLE": "搜索 - 发现项目 - Taiga", + "PAGE_DESCRIPTION": "Taiga中的公共项目的可搜索的目录。探索积压,时间线,问题,以及团队。检索出最喜欢的或者最活跃的项目。通过看板或者敏捷开发进行过滤。", + "INPUT_PLACEHOLDER": "输入内容...", + "ACTION_TITLE": "搜索", + "RESULTS": "搜索结果" + } + } +} \ No newline at end of file From ad9d24e2a7931e8c091605c41e47b839766adb5d Mon Sep 17 00:00:00 2001 From: Xaviju Date: Fri, 9 Dec 2016 14:16:41 +0100 Subject: [PATCH 080/175] Fix small logo glitch --- .../navigation-bar/navigation-bar.scss | 50 +++++-------------- 1 file changed, 13 insertions(+), 37 deletions(-) diff --git a/app/modules/navigation-bar/navigation-bar.scss b/app/modules/navigation-bar/navigation-bar.scss index a04122cc..887bb87b 100644 --- a/app/modules/navigation-bar/navigation-bar.scss +++ b/app/modules/navigation-bar/navigation-bar.scss @@ -23,22 +23,16 @@ $dropdown-width: 350px; display: flex; } .nav-left { - >a { + a { color: $white; padding: .5rem 1.5rem; - &.logo { - background: rgba($black, .2); - padding: .4rem .75rem; - } - svg { - height: 1.6rem; - max-height: 1.6rem; - max-width: 2rem; - width: 1.6rem; - } - path { - fill: $white; - } + } + .logo { + background: rgba($black, .2); + padding: .3rem .75rem; + } + svg { + @include svg-size(1.6rem); } } .nav-right { @@ -47,15 +41,16 @@ $dropdown-width: 350px; color: $white; padding: .5rem 2rem; } + svg { + @include svg-size(1.2rem); + fill: rgba($primary-dark, .8); + transition: all .2s linear; + } } a { color: $white; display: inline-block; transition: all .2s linear; - svg { - fill: rgba($primary-dark, .8); - transition: all .2s linear; - } &:hover { background: rgba($black, .2); color: $primary-light; @@ -80,12 +75,6 @@ $dropdown-width: 350px; margin-left: .5rem; vertical-align: middle; } - svg { - height: 1.2rem; - max-height: 1.2rem; - max-width: 1.2rem; - width: 1.2rem; - } .topnav-dropdown-wrapper { position: relative; &:hover { @@ -163,9 +152,6 @@ $dropdown-width: 350px; &.see-more-projects-btn { margin-bottom: .3rem; } - &.import-project-button { - padding: .8rem 1rem; - } &.create-project-btn { flex: 1; } @@ -178,16 +164,6 @@ $dropdown-width: 350px; } } } - .import-project-button { - &:hover { - svg { - fill: $primary-light; - } - } - svg { - fill: $white; - } - } .create-options { display: flex; flex-direction: row; From b5e91d19f5b337fe0a3988018fd0dc16139bd7d9 Mon Sep 17 00:00:00 2001 From: Xaviju Date: Fri, 9 Dec 2016 15:00:28 +0100 Subject: [PATCH 081/175] Fix high contrast issue in dashboard --- app/themes/high-contrast/custom.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/themes/high-contrast/custom.scss b/app/themes/high-contrast/custom.scss index f460705b..cf395204 100644 --- a/app/themes/high-contrast/custom.scss +++ b/app/themes/high-contrast/custom.scss @@ -443,6 +443,6 @@ tg-project-menu { // DASHBOARD .home-wrapper { .title-bar { - color: $white; + color: $black; } } From d3533a56493cc57b6c169534b9c15bfd20678201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 3 Jan 2017 14:24:06 +0100 Subject: [PATCH 082/175] Fix #4853: Set correctly the wiki link delete lightbox title --- app/coffee/modules/wiki/nav.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/wiki/nav.coffee b/app/coffee/modules/wiki/nav.coffee index 5b6bb01b..671995dd 100644 --- a/app/coffee/modules/wiki/nav.coffee +++ b/app/coffee/modules/wiki/nav.coffee @@ -105,7 +105,7 @@ WikiNavDirective = ($tgrepo, $log, $location, $confirm, $analytics, $loading, $t target = angular.element(event.currentTarget) linkId = target.parents('.wiki-link').data('id') - title = $translate.instant("WIKI.DELETE_LIGHTBOX_TITLE") + title = $translate.instant("WIKI.DELETE_LINK_TITLE") message = $scope.wikiLinks[linkId].title $confirm.askOnDelete(title, message).then (askResponse) => From 99d635775f03d4465dd11f6620bc5c84c401aab6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 3 Jan 2017 17:00:36 +0100 Subject: [PATCH 083/175] Fix #4847: Now on autocompletion items are ordered from by reference --- app/modules/components/wysiwyg/wysiwyg-mention.service.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee b/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee index 43d6d163..3e14aea0 100644 --- a/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee @@ -101,6 +101,8 @@ class WysiwygMentionService result = result.concat(items) + result = _.sortBy result, ["ref"] + resolve(result.slice(0, 10)) From 87de9f66b8d961c7ce263452f2b3729847b04494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 3 Jan 2017 19:37:21 +0100 Subject: [PATCH 084/175] Fix #4841: Use the plugins login for invitations --- app/coffee/modules/auth.coffee | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index e4f4dcf0..d05023c2 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -205,9 +205,6 @@ class AuthService extends taiga.Service acceptInvitiationWithNewUser: (data) -> return @.register(data, "private", false) - acceptInvitiationWithExistingUser: (data) -> - return @.register(data, "private", true) - forgotPassword: (data) -> url = @urls.resolve("users-password-recovery") data = _.clone(data, false) @@ -478,7 +475,7 @@ module.directive("tgChangePasswordFromRecovery", ["$tgAuth", "$tgConfirm", "$tgL ## Invitation ############################################################################# -InvitationDirective = ($auth, $confirm, $location, $params, $navUrls, $analytics, $translate, config) -> +InvitationDirective = ($auth, $confirm, $location, $config, $params, $navUrls, $analytics, $translate, config) -> link = ($scope, $el, $attrs) -> token = $params.token @@ -515,7 +512,14 @@ InvitationDirective = ($auth, $confirm, $location, $params, $navUrls, $analytics if not loginForm.validate() return - promise = $auth.acceptInvitiationWithExistingUser($scope.dataLogin) + loginFormType = $config.get("loginFormType", "normal") + data = $scope.dataLogin + + promise = $auth.login({ + username: data.username, + password: data.password, + invitation_token: data.token + }, loginFormType) promise.then(onSuccessSubmitLogin, onErrorSubmitLogin) $el.on "submit", "form.login-form", submitLogin @@ -555,7 +559,7 @@ InvitationDirective = ($auth, $confirm, $location, $params, $navUrls, $analytics return {link:link} -module.directive("tgInvitation", ["$tgAuth", "$tgConfirm", "$tgLocation", "$routeParams", +module.directive("tgInvitation", ["$tgAuth", "$tgConfirm", "$tgLocation", "$tgConfig", "$routeParams", "$tgNavUrls", "$tgAnalytics", "$translate", "$tgConfig", InvitationDirective]) From e5cc571467647218bff8089623ba44e8898a12c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 10 Jan 2017 10:44:13 +0100 Subject: [PATCH 085/175] Fix #4863: Now can delete tags on new issue lightbox --- app/coffee/modules/issues/lightboxes.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/issues/lightboxes.coffee b/app/coffee/modules/issues/lightboxes.coffee index e94f485e..312c3add 100644 --- a/app/coffee/modules/issues/lightboxes.coffee +++ b/app/coffee/modules/issues/lightboxes.coffee @@ -106,11 +106,11 @@ CreateIssueDirective = ($repo, $confirm, $rootscope, lightboxService, $loading, value = trim(tag[0].toLowerCase()) tags = $scope.project.tags - itemtags = _.clone($scope.us.tags) + itemtags = _.clone($scope.issue.tags) _.remove itemtags, (tag) -> tag[0] == value - $scope.us.tags = itemtags + $scope.issue.tags = itemtags _.pull($scope.issue.tags, value) From 340ce143e4fdefb1ae05e0bf326f9e198539afdd Mon Sep 17 00:00:00 2001 From: Xaviju Date: Tue, 10 Jan 2017 12:23:50 +0100 Subject: [PATCH 086/175] Add nvmrc --- .nvmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..b26a34e4 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +7.2.1 From 62cd19cb955bb7e9bfb1765e546a668783613748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Tue, 10 Jan 2017 12:43:11 +0100 Subject: [PATCH 087/175] [i18n] Update locales --- app/locales/taiga/locale-ca.json | 14 ++++- app/locales/taiga/locale-de.json | 46 +++++++++------ app/locales/taiga/locale-es.json | 14 ++++- app/locales/taiga/locale-fi.json | 14 ++++- app/locales/taiga/locale-fr.json | 14 ++++- app/locales/taiga/locale-it.json | 14 ++++- app/locales/taiga/locale-ja.json | 84 +++++++++++++++------------ app/locales/taiga/locale-nb.json | 14 ++++- app/locales/taiga/locale-nl.json | 14 ++++- app/locales/taiga/locale-pl.json | 14 ++++- app/locales/taiga/locale-pt-br.json | 14 ++++- app/locales/taiga/locale-ru.json | 14 ++++- app/locales/taiga/locale-sv.json | 14 ++++- app/locales/taiga/locale-tr.json | 14 ++++- app/locales/taiga/locale-zh-hans.json | 46 +++++++++------ app/locales/taiga/locale-zh-hant.json | 14 ++++- scripts/manage_translations.py | 0 17 files changed, 275 insertions(+), 83 deletions(-) mode change 100644 => 100755 scripts/manage_translations.py diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index 868eacd6..b690d2bc 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -518,6 +518,7 @@ "RECRUITING": "Este projecte busca col·laboracions?", "RECRUITING_MESSAGE": "A qui estàs buscant?", "RECRUITING_PLACEHOLDER": "Defineix els perfils que estàs buscant", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Projecte públic", "PRIVATE_PROJECT": "Projecte privat", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Camps personalitzats d'incidències", "ISSUE_ADD": "Afegix camps personalitzats en incidències", "FIELD_TYPE_TEXT": "Text", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Múltiples línies", "FIELD_TYPE_DATE": "Data", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Unwatch", "UNWATCH_TITLE": "Unwatch this project" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Who do you want to be the new project owner?", "ADD_COMMENT": "Add comment", "BUTTON": "Ask this project member to become the new project owner" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Close", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Requeriment d'equip", diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index 40be3b31..73f925ae 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -308,7 +308,7 @@ "PLACEHOLDER_AUTH_PASSWORD": "Passwort" }, "LOGIN_FORM": { - "ERROR_AUTH_INCORRECT": "Laut unseren Helferlein ist Dein Benutzername/Deine E-Mail-Adresse oder Dein Passwort nicht korrekt. (Bitte achte auf die Groß- und Kleinschreibung.)", + "ERROR_AUTH_INCORRECT": "Laut unserem Helferlein ist Dein Benutzername/Deine E-Mail-Adresse oder Dein Passwort nicht korrekt. (Bitte achte auf die Groß- und Kleinschreibung.)", "SUCCESS": "Herzlich willkommen bei Taiga, unsere Helferlein freuen sich." }, "REGISTER": { @@ -358,7 +358,7 @@ "PLACEHOLDER_RE_TYPE_NEW_PASSWORD": "Wiederholen Sie die Eingabe des neuen Passworts", "ACTION_RESET_PASSWORD": "Passwort zurücksetzen", "ERROR": "Unsere Helferelein haben Probleme deine Anfrage zum Zurücksetzen des Passworts zu finden. Probiere es einfach nochmal.", - "SUCCESS": "Unsere Oompa Loompas haben das neue Passwort gespeichert.
    Hier gehts zum login." + "SUCCESS": "Unsere Helferlein haben das neue Passwort gespeichert.
    Hier gehts zum login." }, "INVITATION": { "PAGE_TITLE": "Einladung Annahme - Taiga", @@ -440,7 +440,7 @@ "ERROR_DELETE_ATTACHMENT": "Es war uns nicht möglich, zu löschen: {{errorMessage}}", "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})", "FIELDS": { - "IS_DEPRECATED": "ist verworfen" + "IS_DEPRECATED": "ist veraltet" } }, "PAGINATION": { @@ -486,7 +486,7 @@ "DISABLE": "Deaktivieren", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualisieren und verwalten Sie den strategischsten Teil Ihres Projektes", - "BACKLOG": "Auftragsliste", + "BACKLOG": "Backlog", "BACKLOG_DESCRIPTION": "Verwalten Sie Ihre User-Stories, um einen organisierten Überblick der anstehenden und priorisierten Aufgaben zu erhalten.", "NUMBER_SPRINTS": "Erwartete Anzahl an Sprints", "NUMBER_SPRINTS_HELP": "0 für eine unbestimmte Anzahl", @@ -516,8 +516,9 @@ "TAGS": "Schlagwörter", "DESCRIPTION": "Beschreibung", "RECRUITING": "Is this project looking for people?", - "RECRUITING_MESSAGE": "Who are you looking for?", + "RECRUITING_MESSAGE": "Wen suchst du denn?", "RECRUITING_PLACEHOLDER": "Define the profiles you are looking for", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Öffentliches Projekt", "PRIVATE_PROJECT": "Privates Projekt", "PRIVATE_OR_PUBLIC": "Was ist der Unterschied zwischen öffentlichen und privaten Projekten?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Tickets benutzerdefinierte Felder", "ISSUE_ADD": "Fügen Sie den Tickets ein benutzerdefiniertes Feld hinzu", "FIELD_TYPE_TEXT": "Text", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Mehrzeilig", "FIELD_TYPE_DATE": "Datum", "FIELD_TYPE_URL": "Url" @@ -859,7 +861,7 @@ "SECTION": { "SEARCH": "Suche", "TIMELINE": "Zeitlinie", - "BACKLOG": "Auftragsliste", + "BACKLOG": "Backlog", "KANBAN": "Kanban", "ISSUES": "Tickets", "WIKI": "Wiki", @@ -958,6 +960,10 @@ "UNWATCH": "Nicht beobachten", "UNWATCH_TITLE": "Nicht beobachten" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Wen möchtest du zum neuen Projektleiter ernennen?", "ADD_COMMENT": "Kommentar hinzufügen", "BUTTON": "Fragen Sie dieses Projektmitglied, um Projektleiter zu werden" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Schließen", "SYNCHRONIZE_LINK": "mit Taiga Tribe synchronisieren", "PUBLISH_MORE_INFO_TITLE": "Brauchen Sie jemanden für diese Aufgabe?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Team Anforderung", @@ -1186,15 +1198,15 @@ } }, "BACKLOG": { - "PAGE_TITLE": "Auftragsliste - {{projectName}}", - "PAGE_DESCRIPTION": "Das Auftragslisten-Panel mit User-Stories und Sprints des Projekts. {{projectName}}: {{projectDescription}}", - "SECTION_NAME": "Auftragsliste", + "PAGE_TITLE": "Backlog - {{projectName}}", + "PAGE_DESCRIPTION": "Das Backlog-Panel mit User-Stories und Sprints des Projekts. {{projectName}}: {{projectDescription}}", + "SECTION_NAME": "Backlog", "CUSTOMIZE_GRAPH": "Personalisiere deinen Backloggraph", "CUSTOMIZE_GRAPH_TEXT": "Um schöne Graphen, die Dir bei der Entwicklung Deines Projekts helfen, zu sehen, musst du Estimatepoints und Sprints einstellen", "CUSTOMIZE_GRAPH_ADMIN": "Administrator", "CUSTOMIZE_GRAPH_TITLE": "Stelle Points und Sprints über das Adminpanel ein", "MOVE_US_TO_CURRENT_SPRINT": "Zum aktuellen Sprint wechseln", - "MOVE_US_TO_LATEST_SPRINT": "Move to latest Sprint", + "MOVE_US_TO_LATEST_SPRINT": "Zum aktuellen Sprint wechseln.", "SHOW_FILTERS": "Filter zeigen", "SHOW_TAGS": "Tags anzeigen", "EMPTY": "Das Backlog ist leer!", @@ -1225,7 +1237,7 @@ }, "FORECASTING": { "TITLE": "Velocity forecasting", - "BACKLOG": "Display backlog", + "BACKLOG": "Backlog anzeigen", "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." }, @@ -1264,7 +1276,7 @@ "NUMBER_SPRINTS": "
    Sprints", "EMPTY": "Derzeit sind keine Sprints vorhanden", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Dieser Sprint enthält keiner User Stories", - "WARNING_EMPTY_SPRINT": "Ziehe Stories aus deiner Auftragsliste her, um einen neuen Sprint zu starten", + "WARNING_EMPTY_SPRINT": "Ziehe Stories aus deinem Backlog hierher, um einen neuen Sprint zu starten", "TITLE_ACTION_NEW_SPRINT": "Neuen Sprint hinzufügen", "TEXT_ACTION_NEW_SPRINT": "Du möchtest einen neuen Sprint in Deinem Projekt erstellen", "ACTION_SHOW_CLOSED_SPRINTS": "Geschlossene Sprints anzeigen", @@ -1582,11 +1594,11 @@ "NEW_COMMENT_US": "{{username}} schrieb einen Kommentar in der User-Story {{obj_name}}", "NEW_COMMENT_ISSUE": "{{username}} schrieb einen Kommentar im Ticket {{obj_name}}", "NEW_COMMENT_TASK": "{{username}} schrieb einen Kommentar in der Aufgabe {{obj_name}}", - "NEW_COMMENT_EPIC": "{{username}} has commented in the epic {{obj_name}}", + "NEW_COMMENT_EPIC": "{{username}} hat das Epic {{obj_name}} kommentiert", "NEW_MEMBER": "{{project_name}} hat ein neues Mitglied", "US_ADDED_MILESTONE": "{{username}} fügte dem Sprint {{sprint_name}} die User-Story {{obj_name}} hinzu", "US_MOVED": "{{username}} wurde in die Story {{obj_name}} verschoben", - "US_REMOVED_FROM_MILESTONE": "{{username}} fügte der Auftragsliste die User-Story {{obj_name}} hinzu", + "US_REMOVED_FROM_MILESTONE": "{{username}} fügte dem Backlog die User-Story {{obj_name}} hinzu", "BLOCKED": "{{username}} vermerkte die Blockierung von {{obj_name}}", "UNBLOCKED": "{{username}} hob die Blockierung von {{obj_name}} auf", "NEW_USER": "{{username}} ist Taiga beigetreten" @@ -1637,7 +1649,7 @@ }, "STEP2": { "TITLE": "Produkt Backlog", - "TEXT": "Die Auftragsliste zeigt dir alle Anforderungen (User Stories) für das Projekt an. Hier kannst du auch deine Sprints planen." + "TEXT": "Das Backlog zeigt dir alle Anforderungen (User Stories) für das Projekt an. Hier kannst du auch deine Sprints planen." }, "STEP3": { "TITLE": "Sprints", @@ -1645,7 +1657,7 @@ }, "STEP4": { "TITLE": "User-Stories", - "TEXT": "Dies sind die Anforderungen. Du kannst sie der Auftragsliste hinzufügen und sie zu einem Sprint hinzufügen." + "TEXT": "Dies sind die Anforderungen. Du kannst sie dem Backlog hinzufügen und sie zu einem Sprint hinzufügen." } }, "KANBAN": { diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 462796e1..fa0e6d04 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -518,6 +518,7 @@ "RECRUITING": "¿Este proyecto está buscando a gente?", "RECRUITING_MESSAGE": "¿Qué estás buscando?", "RECRUITING_PLACEHOLDER": "Define el perfil de lo que estás buscando", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Proyecto público", "PRIVATE_PROJECT": "Proyecto privado", "PRIVATE_OR_PUBLIC": "¿Cuál es la diferencia entre proyecto público y privado?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Atributos personalizados de peticiones", "ISSUE_ADD": "Añadir un atributo personalizado en las peticiones", "FIELD_TYPE_TEXT": "Texto", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Multilínea", "FIELD_TYPE_DATE": "Fecha", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "No observar", "UNWATCH_TITLE": "Dejar de observar este proyecto" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "¿A quién quiere ser el nuevo dueño del proyecto?", "ADD_COMMENT": "Añadir comentario", "BUTTON": "Pregunte a este usuario para convertirlo en el nuero dueño del proyecto" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Cerrar", "SYNCHRONIZE_LINK": "sincronizar con la Tribu Taiga", "PUBLISH_MORE_INFO_TITLE": "Necesita a alguien para esta tarea?", - "PUBLISH_MORE_INFO_TEXT": "

    SI necesita ayuda con una parte especifica del trabajo puede crear facilmente gigs en la Tribu Taiga y recibir ayuda de todo el mundo. Tendra la habilidad de manejar y controlar su gig disfrutando de una comunidad dispuesta a colaborar.

    la Tribu Taiga nacio como una rama de Taiga. Ambas plataformas viven separadas Pero creemos que hay mucho poder al usarlas combinadamente y asi aseguramos que la integracion funciona muy bien.

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Requerido por el Equipo", diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 7861696c..d4405f2d 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -518,6 +518,7 @@ "RECRUITING": "Is this project looking for people?", "RECRUITING_MESSAGE": "Who are you looking for?", "RECRUITING_PLACEHOLDER": "Define the profiles you are looking for", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Julkinen projekti", "PRIVATE_PROJECT": "Yksityinen projekti", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Pyyntöjen omat kentät", "ISSUE_ADD": "Lisää oma kenttä pyynnöille", "FIELD_TYPE_TEXT": "Text", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Multi-line", "FIELD_TYPE_DATE": "Date", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Unwatch", "UNWATCH_TITLE": "Unwatch this project" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Who do you want to be the new project owner?", "ADD_COMMENT": "Add comment", "BUTTON": "Ask this project member to become the new project owner" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Close", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Tiimin vaatimus", diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 9f795344..27ccc753 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -518,6 +518,7 @@ "RECRUITING": "Est-ce que ce projet recherche des membres ?", "RECRUITING_MESSAGE": "Qui cherchez-vous ?", "RECRUITING_PLACEHOLDER": "Définissez le profil que vous recherchez", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Projet public", "PRIVATE_PROJECT": "Projet privé", "PRIVATE_OR_PUBLIC": "Quelle est la différence entre les projets publics et privés ?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Champs personnalisés des tickets", "ISSUE_ADD": "Ajouter un champ personnalisé dans les tickets", "FIELD_TYPE_TEXT": "Texte", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Multiligne", "FIELD_TYPE_DATE": "Date", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Ne plus suivre", "UNWATCH_TITLE": "Ne plus suivre ce projet" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Qui voulez-vous désigner comme le nouveau propriétaire du projet ?", "ADD_COMMENT": "Ajouter un commentaire", "BUTTON": "Demander à ce membre du projet de devenir le nouveau propriétaire" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Fermer", "SYNCHRONIZE_LINK": "se synchroniser avec Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Avez-vous besoin de quelqu'un pour cette tâche ?", - "PUBLISH_MORE_INFO_TEXT": "

    Si vous avez besoin d'aide pour un travail particulier, vous pouvez facilement créer des annonces sur Taiga Tribe et recevoir de l'aide de tout le monde. Vous serez en mesure de contrôler et de gérer l'annonce tout en bénéficiant d'une grande communauté désireuse d'aider. \n

    TaigaTribe est né en tant que frère de Taiga. Les deux plates-formes peuvent vivre séparément, mais comme nous croyons qu'il est très puissant de les utiliser ensemble, nous faisons en sorte que l'intégration fonctionne comme un charme. " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Exigence équipe", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 20e84ecb..d94560f8 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -518,6 +518,7 @@ "RECRUITING": "Il progetto cerca persone?", "RECRUITING_MESSAGE": "Chi stai cercando?", "RECRUITING_PLACEHOLDER": "Definisci il profilo che stai cercando", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Progetto pubblico", "PRIVATE_PROJECT": "Progetto privato", "PRIVATE_OR_PUBLIC": "Quale è la differenza tra progetto privato e pubblico?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Campi personalizzati", "ISSUE_ADD": "Aggiungi un campo personalizzato alla criticitá", "FIELD_TYPE_TEXT": "Testo", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Multilinea", "FIELD_TYPE_DATE": "Data", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Non osservare", "UNWATCH_TITLE": "Non osservare il progetto" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Chi vuoi che sia il nuovo proprietario del progetto?", "ADD_COMMENT": "Aggiungi commento", "BUTTON": "Chiedi a questo membro di diventare il nuovo proprietario del progetto" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Chiudi", "SYNCHRONIZE_LINK": "sincronizza con Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Hai bisogno di qualcuno per questo task?", - "PUBLISH_MORE_INFO_TEXT": "

    Se hai bisogno di aiuto per un particolare lavoro puoi creare facilmente annunci on Taiga Tribe e ricevere aiuto da tutto il mondo. Sarai in grado di controllare e gestire l'annuncio godendo di una fantastica comunità vogliosa di contribuire.

    Taiga Tribe è nato come fratello di Taiga. Entrambe le piattaforme posso vivere separatamente, ma noi crediamo sia molto potente usarle insieme e vogliamo essere certi che l'integrazione funziona senza problemi.

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Requisito del team", diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index 61e690b1..8a6f521f 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -47,7 +47,7 @@ "OWNER": "プロジェクトオーナー", "CAPSLOCK_WARNING": "Be careful! You are using capital letters in an input field that is case sensitive.", "CONFIRM_CLOSE_EDIT_MODE_TITLE": "本当にこの編集画面を閉じてもよろしいですか?", - "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "Remember that if you close the edit mode without saving all the changes will be lost", + "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "保存せずに編集画面を閉じた場合、すべての変更が失われます。", "RELATED_USERSTORIES": "関連するユーザーストーリー", "CARD": { "ASSIGN_TO": "アサイン", @@ -77,7 +77,7 @@ "MAX_CHECK": "選択できるのは %s までです", "RANGE_CHECK": "選択できるのは %s から %s までです", "EQUAL_TO": "この値は同じでなければいけません", - "LINEWIDTH": "One or more lines is perhaps too long. Try to keep under %s characters.", + "LINEWIDTH": "行がおそらく長すぎます。%s文字以内におさえてください。", "PIKADAY": "無効なデータフォーマットです。DD MMM YYYYの形式で入力してください。(例:23 Mar 1984)" }, "PICKERDATE": { @@ -208,7 +208,7 @@ "INPUT_SEARCH_PLACEHOLDER": "Subject or ref", "TITLE_ACTION_SEARCH": "検索", "ACTION_SAVE_CUSTOM_FILTER": "カスタムフィルターとして保存する", - "PLACEHOLDER_FILTER_NAME": "Write the filter name and press enter", + "PLACEHOLDER_FILTER_NAME": "フィルター名を入力しエンターキーを押してください。", "APPLIED_FILTERS_NUM": "フィルター適用中", "CATEGORIES": { "TYPE": "タイプ", @@ -227,16 +227,16 @@ } }, "WYSIWYG": { - "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", + "OUTDATED": "あなたが編集中に別のユーザーが変更を加えました。あなたの変更点を保存する前に、アクティビティタブで新しいバージョンを確認してください。", "ATTACH_FILE_HELP": "テキストエリアへドラッグ&ドロップでファイルを添付", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "上部テキストエリアへ添付ファイルをドラッグ&ドロップしたい場合、先に保存してください。", "MARKDOWN_HELP": "Markdown記法のヘルプ" }, "PERMISIONS_CATEGORIES": { "EPICS": { "NAME": "エピック", "VIEW_EPICS": "エピックの表示", - "ADD_EPICS": "エピックの追加", + "ADD_EPICS": "エピックを追加", "MODIFY_EPICS": "エピックの変更", "COMMENT_EPICS": "複数のエピックにコメントする", "DELETE_EPICS": "エピックの削除" @@ -244,14 +244,14 @@ "SPRINTS": { "NAME": "スプリント", "VIEW_SPRINTS": "スプリントの表示", - "ADD_SPRINTS": "スプリントの追加", + "ADD_SPRINTS": "スプリントを追加", "MODIFY_SPRINTS": "スプリントの変更", "DELETE_SPRINTS": "スプリントの削除" }, "USER_STORIES": { "NAME": "ユーザーストーリー", "VIEW_USER_STORIES": "ユーザーストーリーの表示", - "ADD_USER_STORIES": "ユーザーストーリーの追加", + "ADD_USER_STORIES": "ユーザーストーリーを追加", "MODIFY_USER_STORIES": "ユーザーストーリーの変更", "COMMENT_USER_STORIES": "複数のユーザーストーリーにコメントする", "DELETE_USER_STORIES": "ユーザーストーリーの削除" @@ -259,7 +259,7 @@ "TASKS": { "NAME": "タスク", "VIEW_TASKS": "タスクの表示", - "ADD_TASKS": "タスクの追加", + "ADD_TASKS": "タスクを追加", "MODIFY_TASKS": "タスクの変更", "COMMENT_TASKS": "複数のタスクにコメントする", "DELETE_TASKS": "タスクの削除" @@ -267,7 +267,7 @@ "ISSUES": { "NAME": "課題", "VIEW_ISSUES": "課題の表示", - "ADD_ISSUES": "課題の追加", + "ADD_ISSUES": "課題を追加", "MODIFY_ISSUES": "課題の変更", "COMMENT_ISSUES": "複数の課題にコメントする", "DELETE_ISSUES": "課題の削除" @@ -275,11 +275,11 @@ "WIKI": { "NAME": "Wiki", "VIEW_WIKI_PAGES": "Wikiページの表示", - "ADD_WIKI_PAGES": "Wikiページの追加", + "ADD_WIKI_PAGES": "Wikiページを追加", "MODIFY_WIKI_PAGES": "Wikiページの変更", "DELETE_WIKI_PAGES": "Wikiページの削除", "VIEW_WIKI_LINKS": "Wikiリンクの表示", - "ADD_WIKI_LINKS": "Wikiリンクの追加", + "ADD_WIKI_LINKS": "Wikiリンクを追加", "DELETE_WIKI_LINKS": "Wikiリンクの削除" } }, @@ -485,7 +485,7 @@ "ENABLE": "有効", "DISABLE": "無効", "EPICS": "エピック", - "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", + "EPICS_DESCRIPTION": "あなたのプロジェクトの最も戦略的な部分を視覚化し、管理する", "BACKLOG": "バックログ", "BACKLOG_DESCRIPTION": "ユーザーストーリーが適切にメンテナンスされるよう管理し、優先順位に基づく作業を行うためのビュー", "NUMBER_SPRINTS": "予測されるスプリント数", @@ -501,7 +501,7 @@ "MEETUP": "会議", "MEETUP_DESCRIPTION": "あなたが利用しているビデオ会議システムを選択してください。", "SELECT_VIDEOCONFERENCE": "ビデオ会議システムを選択", - "SALT_CHAT_ROOM": "Add a prefix to the chatroom name", + "SALT_CHAT_ROOM": "チャットルーム名に接頭辞を追加", "JITSI_CHAT_ROOM": "Jitsi", "APPEARIN_CHAT_ROOM": "AppearIn", "TALKY_CHAT_ROOM": "Talky", @@ -518,6 +518,7 @@ "RECRUITING": "プロジェクトメンバーを探していますか?", "RECRUITING_MESSAGE": "どんな人を探していますか?", "RECRUITING_PLACEHOLDER": "探している人のプロフィールを記載してください", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "パブリック プロジェクト", "PRIVATE_PROJECT": "非公開プロジェクト", "PRIVATE_OR_PUBLIC": "パブリックプロジェクトとプライベートプロジェクトの違いは何ですか?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "課題のカスタムフィールド", "ISSUE_ADD": "課題にカスタムフィールドを追加", "FIELD_TYPE_TEXT": "テキスト", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "マルチライン", "FIELD_TYPE_DATE": "日時", "FIELD_TYPE_URL": "Url" @@ -619,7 +621,7 @@ "ACTION_ADD": "タグを追加", "NEW_TAG": "新規タグ", "MIXING_HELP_TEXT": "マージしたいタグを選択してください。", - "MIXING_MERGE": "Merge Tags", + "MIXING_MERGE": "タグを結合", "SELECTED": "Selected" }, "ROLES": { @@ -686,7 +688,7 @@ }, "CUSTOM_ATTRIBUTES": { "PAGE_TITLE": "{{sectionName}} - カスタム属性 - {{projectName}}", - "ADD": "カスタムフィールド追加", + "ADD": "カスタムフィールドを追加", "EDIT": "カスタムフィールドを編集", "DELETE": "カスタムフィールドを削除", "SAVE_TITLE": "カスタムフィールドを保存", @@ -776,7 +778,7 @@ "REJECT": "却下", "PROPOSE_OWNERSHIP": "プロジェクト {{project}} の現在のプロジェクトオーナー {{owner}} が、あなたに新しいプロジェクトオーナーになるようリクエストしています。", "ADD_COMMENT": "プロジェクトオーナーにコメントしますか?", - "UNLIMITED_PROJECTS": "Unlimited", + "UNLIMITED_PROJECTS": "無制限", "OWNER_MESSAGE": { "PRIVATE": "あなたが持てる非公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。", "PUBLIC": "あなたが持てる公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。" @@ -790,7 +792,7 @@ "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "プロフィールを編集", "FOLLOW": "フォロー", - "CLOSED_US": "終了した
    ストーリー", + "CLOSED_US": "完了したユーザーストーリー", "PROJECTS": "プロジェクト", "PROJECTS_EMPTY": "{{username}} はまだプロジェクトに参加していません", "CONTACTS": "連絡先", @@ -958,6 +960,10 @@ "UNWATCH": "フォローをやめる", "UNWATCH_TITLE": "プロジェクトのフォローをやめる" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1023,7 +1029,7 @@ "TITLE": "スプリントを削除" }, "CREATE_MEMBER": { - "PLACEHOLDER_INVITATION_TEXT": "(オプション)招待する際のメッセージを追加できます。新メンバーに素敵なメッセージを伝えましょう!", + "PLACEHOLDER_INVITATION_TEXT": "(任意) 招待する際のメッセージを追加できます。新メンバーに素敵な言葉を贈りましょう ;-)", "PLACEHOLDER_TYPE_EMAIL": "メールアドレスを入力", "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "このプロジェクトで許可されている最大メンバー数{{maxMembers}}名に達しようとしています。上限を増やしたい場合は管理者にお問い合わせください。", "LIMIT_USERS_WARNING_MESSAGE": "このプロジェクトで許可されている最大メンバー数{{maxMembers}}名に達しようとしています。" @@ -1043,6 +1049,12 @@ "TITLE": "誰を新しいプロジェクトオーナーにしたいですか?", "ADD_COMMENT": "コメントを追加", "BUTTON": "このメンバーを新しいプロジェクトオーナーにする。" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1074,7 +1086,7 @@ "TOTAL_POINTS": "合計ポイント", "ADD": "+ 新規ユーザーストーリーを追加する", "ADD_BULK": "新規ユーザーストーリーを一括で追加する", - "PROMOTED": "This US has been promoted from Issue:", + "PROMOTED": "このユーザーストーリーはこちらの課題から発展:", "TITLE_LINK_GO_TO_ISSUE": "課題へ移動", "EXTERNAL_REFERENCE": "This US has been created from", "GO_TO_EXTERNAL_REFERENCE": "originへ移動", @@ -1094,7 +1106,7 @@ "CLOSE": "Close", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "このタスクに誰か必要ですか?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "チームからの要求", @@ -1106,7 +1118,7 @@ "DELETED_INFO": "{{user}}によってコメントは削除されました。", "TITLE": "コメント", "COMMENTS_COUNT": "{{comments}}コメント", - "ORDER": "Order", + "ORDER": "順番", "OLDER_FIRST": "古い順", "RECENT_FIRST": "新しい順", "COMMENT": "コメント", @@ -1201,7 +1213,7 @@ "CREATE_NEW_US": "新規US作成", "CREATE_NEW_US_EMPTY_HELP": "新しくユーザーストーリーを作成してください。", "EXCESS_OF_POINTS": "Excess of points", - "PENDING_POINTS": "Pending Points", + "PENDING_POINTS": "保留ポイント", "CLOSED_POINTS": "closed", "COMPACT_SPRINT": "Compact Sprint", "GO_TO_TASKBOARD": "タスクボード {{::name}} へ移動", @@ -1214,7 +1226,7 @@ "XAXIS_LABEL": "スプリント", "YAXIS_LABEL": "ポイント", "OPTIMAL": "Optimal pending points for sprint \"{{sprintName}}\" should be {{value}}", - "REAL": "Real pending points for sprint \"{{sprintName}}\" is {{value}}", + "REAL": "スプリント \"{{sprintName}}\" の実際の保留ポイントは {{value}} です", "INCREMENT_TEAM": "Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}", "INCREMENT_CLIENT": "Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}" }, @@ -1227,7 +1239,7 @@ "TITLE": "Velocity forecasting", "BACKLOG": "バックログを表示", "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", - "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + "CURRENT_SPRINT": "あなたの作業速度をもとにしたスプリント向けのユーザーストーリー候補。現在のスプリントに追加するにはクリックしてください。" }, "TABLE": { "COLUMN_US": "User Stories", @@ -1239,7 +1251,7 @@ "OPEN_TASKS": "オープン
    タスク", "CLOSED_TASKS": "完了済み
    タスク", "IOCAINE_DOSES": "iocaine
    doses", - "SHOW_STATISTICS_TITLE": "Show statistics", + "SHOW_STATISTICS_TITLE": "統計を表示", "TOGGLE_BAKLOG_GRAPH": "バーンダウングラフ 表示/非表示", "POINTS_PER_ROLE": "役割ごとのポイント" }, @@ -1281,7 +1293,7 @@ }, "TASKBOARD": { "PAGE_TITLE": "{{sprintName}} - スプリントタスクボード - {{projectName}}", - "PAGE_DESCRIPTION": "Sprint {{sprintName}} (from {{startDate}} to {{endDate}}) of {{projectName}}. Completed {{completedPercentage}}% ({{completedPoints}} of {{totalPoints}} points). {{openTasks}} opened tasks of {{totalTasks}}.", + "PAGE_DESCRIPTION": "スプリント {{sprintName}} ({{startDate}}から{{endDate}}まで) / {{projectName}}。{{completedPercentage}}% ({{totalPoints}}中{{completedPoints}}ポイント) 完了。{{totalTasks}}タスク中{{openTasks}}タスクが未完了。", "SECTION_NAME": "タスクボード", "TITLE_ACTION_ADD": "新規タスクを追加", "TITLE_ACTION_ADD_BULK": "新規タスクを一括で追加する", @@ -1302,7 +1314,7 @@ "XAXIS_LABEL": "Days", "YAXIS_LABEL": "ポイント", "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", - "REAL": "Real pending points for day {{formattedDate}} is {{roundedValue}}", + "REAL": "{{formattedDate}} の実際の保留ポイントは {{roundedValue}} です", "DATE": "YYYY年MM月DD日" } }, @@ -1347,10 +1359,10 @@ }, "CHANGE_EMAIL_FORM": { "TITLE": "メール変更", - "SUBTITLE": "One click more and your email will be updated!", + "SUBTITLE": "あとはクリックだけであなたのメールアドレスが更新されます!", "PLACEHOLDER_INPUT_TOKEN": "メールトークンを変更", "ACTION_CHANGE_EMAIL": "メール変更", - "SUCCESS": "Our Oompa Loompas updated your email" + "SUCCESS": "ウンパルンパたちがあなたのメールアドレスを更新しました" }, "ISSUES": { "PAGE_TITLE": "課題 - {{projectName}}", @@ -1359,8 +1371,8 @@ "SECTION_NAME": "課題", "ACTION_NEW_ISSUE": "+ 新規 ISSUE", "ACTION_PROMOTE_TO_US": "ユーザーストーリーに変更する", - "PROMOTED": "This issue has been promoted to US:", - "EXTERNAL_REFERENCE": "This issue has been created from", + "PROMOTED": "この課題はこちらのユーザーストーリーへ発展:", + "EXTERNAL_REFERENCE": "課題の作成元: ", "GO_TO_EXTERNAL_REFERENCE": "originへ移動", "BLOCKED": "この課題はブロックされています", "ACTION_DELETE": "Issue を削除", @@ -1406,8 +1418,8 @@ "TITLE_ACTION_UNFOLD": "列をひろげる", "TITLE_ACTION_FOLD_CARDS": "カードをたたむ", "TITLE_ACTION_UNFOLD_CARDS": "カードをひろげる", - "TITLE_ACTION_ADD_US": "新規ユーザーストーリーを追加する", - "TITLE_ACTION_ADD_BULK": "新規ユーザーストーリーを一括で追加する", + "TITLE_ACTION_ADD_US": "新規ユーザーストーリーを追加", + "TITLE_ACTION_ADD_BULK": "新規ユーザーストーリーを一括追加", "ACTION_SHOW_ARCHIVED": "アーカイブ済を表示", "ACTION_HIDE_ARCHIVED": "アーカイブ済を隠す", "HIDDEN_USER_STORIES": "The user stories in this status are hidden by default", @@ -1436,7 +1448,7 @@ "APP_TITLE": "チーム - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "フルネームで検索する", "COLUMN_MR_WOLF": "Mr. Wolf", - "EXPLANATION_COLUMN_MR_WOLF": "課題を閉じる", + "EXPLANATION_COLUMN_MR_WOLF": "完了した課題", "COLUMN_IOCAINE": "Iocaine Drinker", "EXPLANATION_COLUMN_IOCAINE": "Iocaine doses ingested", "COLUMN_CERVANTES": "Cervantes", @@ -1658,7 +1670,7 @@ "TEXT": "User Stories are the requirements at high level. You can drag them to different columns." }, "STEP3": { - "TITLE": "Adding User Stories", + "TITLE": "ユーザーストーリーを追加中", "TEXT1": "You may want to add a single User Story (add US icon) or a group of them (bulk icon)", "TEXT2": "グッドラック!" } diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 26db9830..b3ea1d3e 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -518,6 +518,7 @@ "RECRUITING": "Leter dette prosjektet etter folk?", "RECRUITING_MESSAGE": "Hva leter du etter?", "RECRUITING_PLACEHOLDER": "Definer profilene du leter etter", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Offentlig prosjekt", "PRIVATE_PROJECT": "Privat prosjekt", "PRIVATE_OR_PUBLIC": "Hva er forskjellen mellom offentlige og private prosjekt?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Hendelser egendefinerte felter", "ISSUE_ADD": "Legg til et egendefinert felt i Hendelser", "FIELD_TYPE_TEXT": "Tekst", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Flere linjer", "FIELD_TYPE_DATE": "Dato", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Ikke overvåk", "UNWATCH_TITLE": "Ikke overvåk dette prosjektet" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Hvem vil du at skal være den nye eieren av prosjektet?", "ADD_COMMENT": "Legg til kommentar", "BUTTON": "Spør dette prosjektetmedlemet om å bli den nye prosjekteieren" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Close", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Team behov", diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index ddf329cf..ea90fe32 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -518,6 +518,7 @@ "RECRUITING": "Is this project looking for people?", "RECRUITING_MESSAGE": "Who are you looking for?", "RECRUITING_PLACEHOLDER": "Define the profiles you are looking for", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Open project", "PRIVATE_PROJECT": "Gesloten project", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Issues aangepaste velden", "ISSUE_ADD": "Voeg een aangepast veld toe in issues", "FIELD_TYPE_TEXT": "Tekst", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Over meerdere regels", "FIELD_TYPE_DATE": "Date", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Unwatch", "UNWATCH_TITLE": "Unwatch this project" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Who do you want to be the new project owner?", "ADD_COMMENT": "Add comment", "BUTTON": "Ask this project member to become the new project owner" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Close", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Eisen team", diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index fec6575c..0bcec240 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -518,6 +518,7 @@ "RECRUITING": "Czy ten pojekt szuka uczestników?", "RECRUITING_MESSAGE": "Kogo szukasz?", "RECRUITING_PLACEHOLDER": "Define the profiles you are looking for", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Projekt publiczny", "PRIVATE_PROJECT": "Projekt prywatny", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Własne pola dla zgłoszeń", "ISSUE_ADD": "Dodaj własne pole dla zgłoszeń", "FIELD_TYPE_TEXT": "Tekst", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Pole wielowierszowe", "FIELD_TYPE_DATE": "Date", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Unwatch", "UNWATCH_TITLE": "Unwatch this project" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Kto ma być nowym właścicielem projektu?", "ADD_COMMENT": "Add comment", "BUTTON": "Ask this project member to become the new project owner" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Zamknij", "SYNCHRONIZE_LINK": "synchronizuj z Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Potrzebujesz kogoś do tego zadania?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Wymaganie zespołu", diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index e06b22eb..182166ad 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -518,6 +518,7 @@ "RECRUITING": "Este projeto esta a procura de colaboradores?", "RECRUITING_MESSAGE": "O que você está procurando?", "RECRUITING_PLACEHOLDER": "Defina o perfil que você procura?", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Projeto Publico", "PRIVATE_PROJECT": "Projeto Privado", "PRIVATE_OR_PUBLIC": "Qual a diferença entre projeto público e privado?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Campos personalizados dos problemas", "ISSUE_ADD": "Adicionar um campo personalizado em problemas ", "FIELD_TYPE_TEXT": "Texto", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Multi-linha", "FIELD_TYPE_DATE": "Data", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Deixar de Observar", "UNWATCH_TITLE": "Deixar de observar este projeto" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Quem você quer que seja o novo dono do projeto?", "ADD_COMMENT": "Adicionar comentário", "BUTTON": "Pedir a este membro do projeto para se tornar o novo dono do projeto" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Fechar", "SYNCHRONIZE_LINK": "sincronizar com a Tribo Taiga", "PUBLISH_MORE_INFO_TITLE": "Você precisa de alguém para esta tarefa?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Requisitos da Equipe", diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index 415a3923..f64d1d1e 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -518,6 +518,7 @@ "RECRUITING": "Этот проект ищет людей?", "RECRUITING_MESSAGE": "Кого вы ищете?", "RECRUITING_PLACEHOLDER": "Уточните, какие профили вы ищете", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Публичный проект", "PRIVATE_PROJECT": "Закрытый проект", "PRIVATE_OR_PUBLIC": "В чём разница между публичными и приватными проектами?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Специальные поля запросов", "ISSUE_ADD": "Добавить специальное поле для запросов", "FIELD_TYPE_TEXT": "Текст", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Многостроковое", "FIELD_TYPE_DATE": "Дата", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Прекратить отслеживание", "UNWATCH_TITLE": "Прекратить отслеживание этого проекта" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Кого вы хотите назначить новым владельцем проекта?", "ADD_COMMENT": "Добавить комментарий", "BUTTON": "Предложить участнику проекта стать его новым владельцем" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Закрыть", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Требование от Команды", diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 5e33219b..514cd751 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -518,6 +518,7 @@ "RECRUITING": "Letar detta projekt efter personer? ", "RECRUITING_MESSAGE": "Vem letar du efter?", "RECRUITING_PLACEHOLDER": "Definiera profilerna du letar efter", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Publika projekt", "PRIVATE_PROJECT": "Privata projekt", "PRIVATE_OR_PUBLIC": "Vad är skillnaden mellan publika och privata projekt?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Anpassade fält för ärenden", "ISSUE_ADD": "Anpassade fält för ärenden", "FIELD_TYPE_TEXT": "Text", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Flerradig", "FIELD_TYPE_DATE": "Datum", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "Frånkoppla visning", "UNWATCH_TITLE": "Visa inte projektet" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Who do you want to be the new project owner?", "ADD_COMMENT": "Lägg till kommentar", "BUTTON": "Ask this project member to become the new project owner" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Stäng", "SYNCHRONIZE_LINK": "synkronisera med Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Behöver du någon för den här uppgiften?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Teamets behov", diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 7fbdd3f4..ed2b0353 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -518,6 +518,7 @@ "RECRUITING": "Bu proje insan arıyor mu?", "RECRUITING_MESSAGE": "Ne aramıştınız?", "RECRUITING_PLACEHOLDER": "Aradığınız özellikleri yazın", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "Açık Proje", "PRIVATE_PROJECT": "Gizli proje", "PRIVATE_OR_PUBLIC": "Açık ve özel projeler arasındaki fark nedir?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "Sorunlar için özel alanlar", "ISSUE_ADD": "Sorunlara yeni bir özel alan ekle", "FIELD_TYPE_TEXT": "Metin", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "Çoklu-satır", "FIELD_TYPE_DATE": "Tarih", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "İzleme", "UNWATCH_TITLE": "Bu projeyi izleme" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Who do you want to be the new project owner?", "ADD_COMMENT": "Add comment", "BUTTON": "Ask this project member to become the new project owner" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Close", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Takım Gereksinimi", diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index 8070e95e..1fc252f5 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -18,8 +18,8 @@ "EDIT": "编辑", "DRAG": "拖拽", "TAG_LINE": "你的敏捷、免费和开源的项目管理工具", - "TAG_LINE_2": "爱你的项目", - "BLOCK": "冻结", + "TAG_LINE_2": "你喜欢的项目", + "BLOCK": "锁定", "BLOCK_TITLE": "冻结:例如它有一个依赖不能满足,那么请冻结此项", "BLOCKED": "已冻结", "UNBLOCK": "解除冻结", @@ -305,7 +305,7 @@ "TITLE_LINK_FORGOT_PASSWORD": "您忘记密码了吗", "ACTION_ENTER": "回车", "ACTION_SIGN_IN": "登录", - "PLACEHOLDER_AUTH_PASSWORD": "密码(大小写有别)" + "PLACEHOLDER_AUTH_PASSWORD": "密码(大小写敏感)" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "根据我们的系统记录,你的账户名称/电子邮件或密码并不正确", @@ -320,18 +320,18 @@ "PLACEHOLDER_NAME": "填写一个用户账号(注意大小写)", "PLACEHOLDER_FULL_NAME": "填写你的全名", "PLACEHOLDER_EMAIL": "填写你的电子邮件", - "PLACEHOLDER_PASSWORD": "设定密码(注意大小写不同)", + "PLACEHOLDER_PASSWORD": "设置密码(大小写敏感)", "ACTION_SIGN_UP": "注册", "TITLE_LINK_LOGIN": "登录", "LINK_LOGIN": "你是否已注册? 登录" }, "FORGOT_PASSWORD": { "PAGE_TITLE": "忘记密码 - Taiga", - "PAGE_DESCRIPTION": "输入用户名或电子邮件以获取新密码,可以再重新登录Taiga" + "PAGE_DESCRIPTION": "请输入你的用户名或电子邮件地址获取新密码重新登录Taiga" }, "FORGOT_PASSWORD_FORM": { "TITLE": "你是否忘了密码?", - "SUBTITLE": "输入你的账户名称或电子邮件以进行注册", + "SUBTITLE": "输入你的用户名称或电子邮件进行注册", "PLACEHOLDER_FIELD": "用户名称或电子邮件", "ACTION_RESET_PASSWORD": "重设密码", "LINK_CANCEL": "不,请带我回去,我记起来了", @@ -340,7 +340,7 @@ "ERROR": "根据我们的系统记录,你尚未注册" }, "CHANGE_PASSWORD": { - "PAGE_TITLE": "更新密码 - Taiga", + "PAGE_TITLE": "修改密码 - Taiga", "PAGE_DESCRIPTION": "设定Taiga账户密码!你也许该吃点含铁丰富的食物,它对你的大脑有益处:p", "SECTION_NAME": "更新密码", "FIELD_CURRENT_PASSWORD": "当前密码", @@ -349,7 +349,7 @@ "PLACEHOLDER_NEW_PASSWORD": "输入新密码", "FIELD_RETYPE_PASSWORD": "重新输入新密码", "PLACEHOLDER_RETYPE_PASSWORD": "重新输入新密码", - "ERROR_PASSWORD_MATCH": "密码不符" + "ERROR_PASSWORD_MATCH": "密码不匹配" }, "CHANGE_PASSWORD_RECOVERY_FORM": { "TITLE": "创建新Taiga通过", @@ -357,7 +357,7 @@ "PLACEHOLDER_NEW_PASSWORD": "新密码", "PLACEHOLDER_RE_TYPE_NEW_PASSWORD": "重新输入新密码", "ACTION_RESET_PASSWORD": "重设密码", - "ERROR": "我们的Oompa Loompas找不到你的请求来覆盖你的密码。尝试再请求一次。", + "ERROR": "我们的系统无法响应恢复密码的请求。请再尝试一次。", "SUCCESS": "系统已储存你的新密码
    试试 用它登录" }, "INVITATION": { @@ -381,7 +381,7 @@ }, "EPICS": { "TITLE": "史诗", - "SECTION_NAME": "史诗", + "SECTION_NAME": "用户故事", "EPIC": "史诗", "PAGE_TITLE": "史诗 - {{projectName}}", "PAGE_DESCRIPTION": "项目的史诗列表{{projectName}}:{{projectDescription}}", @@ -409,7 +409,7 @@ "PLACEHOLDER_DESCRIPTION": "请添加一些描述文字来帮助其他人更好的了解这个史诗", "TEAM_REQUIREMENT": "团队需求", "CLIENT_REQUIREMENT": "客户需求", - "BLOCKED": "已封锁", + "BLOCKED": "已锁定", "BLOCKED_NOTE_PLACEHOLDER": "为什么这个史诗被冻结了?", "CREATE_EPIC": "创建史诗" } @@ -423,7 +423,7 @@ "SECTION_NAME": "附件", "TITLE": "{{ fileName }} 上传于 {{ date }}", "LIST_VIEW_MODE": "列表视图模式", - "GALLERY_VIEW_MODE": "画廊视图模式", + "GALLERY_VIEW_MODE": "缩略图模式", "DESCRIPTION": "输入一段简短描述", "DEPRECATED": "(已废弃)", "DEPRECATED_FILE": "废弃?", @@ -518,6 +518,7 @@ "RECRUITING": "这个项目是否在招人?", "RECRUITING_MESSAGE": "你在寻找什么人?", "RECRUITING_PLACEHOLDER": "定义简介", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "公开项目", "PRIVATE_PROJECT": "私有项目", "PRIVATE_OR_PUBLIC": "公开项目与私有项目有什么区别?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "问题自定义字段", "ISSUE_ADD": "在问题中加入自定义字段", "FIELD_TYPE_TEXT": "单行文字", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "多行文字", "FIELD_TYPE_DATE": "日期", "FIELD_TYPE_URL": "链接" @@ -789,7 +791,7 @@ "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "编辑个人资料", - "FOLLOW": "追踪", + "FOLLOW": "关注", "CLOSED_US": "关闭用户故事", "PROJECTS": "项目", "PROJECTS_EMPTY": "{{username}} 尚无项目", @@ -958,13 +960,17 @@ "UNWATCH": "取消关注", "UNWATCH_TITLE": "取消关注这个项目" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { "DELETE_ACCOUNT": { "SECTION_NAME": "删除Taiga账户", "CONFIRM": "你确定要删除Taiga账户吗?", - "NEWSLETTER_LABEL_TEXT": "不愿再收到电子月报", + "NEWSLETTER_LABEL_TEXT": "不愿再收到任何信息", "CANCEL": "返回设置", "ACCEPT": "删除账号", "BLOCK_PROJECT": "请注意,在你删除你的账户之后,所有属于你的项目都会被冻结。如果你确实希望一个项目被冻结,在你删除你的账户之前,请将所有权转移至该项目的其他成员名下。", @@ -1043,6 +1049,12 @@ "TITLE": "你希望谁作为项目的新的所有者?", "ADD_COMMENT": "评论", "BUTTON": "要求这位项目成员作为新的项目所有者" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "关闭", "SYNCHRONIZE_LINK": "与Taiga Tribe同步", "PUBLISH_MORE_INFO_TITLE": "你是否需要其他人来做这个任务?", - "PUBLISH_MORE_INFO_TEXT": "

    如果你在工作中的某个特殊的地方需要帮助,你可以很容易地在 Taiga Tribe 创建gig并接受来自世界各地的帮助。你将能够控制并管理这个gig并享受一个渴望贡献的伟大社区。

    TaigaTribe 作为Taiga的姊妹存在。两个平台可以相互独立,但是我们相信联合使用他们会更为强大,所以我们确信集成工作将会非常成功

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "团队要求", @@ -1226,8 +1238,8 @@ "FORECASTING": { "TITLE": "速度预测", "BACKLOG": "显示待办任务", - "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", - "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + "NEW_SPRINT": "根据进度确定下一个冲刺目标的候选用户故事。点击创建新的冲刺目标。", + "CURRENT_SPRINT": "根据进度确定当前冲刺目标的候选用户故事。点击创建当前的冲刺目标。" }, "TABLE": { "COLUMN_US": "用户故事", diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index e755e06d..6b625d17 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -518,6 +518,7 @@ "RECRUITING": "這個專案是否在徵人", "RECRUITING_MESSAGE": "你在找誰?", "RECRUITING_PLACEHOLDER": "定義你要找的資訊", + "FEEDBACK": "Receive feedback from Taiga users?", "PUBLIC_PROJECT": "公開專案", "PRIVATE_PROJECT": "不公開專案", "PRIVATE_OR_PUBLIC": "公開專案和私密專案有何差異?", @@ -570,6 +571,7 @@ "ISSUE_DESCRIPTION": "問題客製化欄位", "ISSUE_ADD": "在問題中加入客制欄位", "FIELD_TYPE_TEXT": "單行文字", + "FIELD_TYPE_RICHTEXT": "Rich text", "FIELD_TYPE_MULTI": "多行", "FIELD_TYPE_DATE": "日期", "FIELD_TYPE_URL": "Url" @@ -958,6 +960,10 @@ "UNWATCH": "不觀注", "UNWATCH_TITLE": "不再觀注此專案" } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "Contact the project team", + "CONTACT_BUTTON": "Contact the project" } }, "LIGHTBOX": { @@ -1043,6 +1049,12 @@ "TITLE": "Who do you want to be the new project owner?", "ADD_COMMENT": "Add comment", "BUTTON": "Ask this project member to become the new project owner" + }, + "CONTACT_PROJECT": { + "TITLE": "Send an email to", + "WARNING": "The email will be received by the project admins", + "PLACEHOLDER": "Write your message", + "SEND": "Send" } }, "EPIC": { @@ -1094,7 +1106,7 @@ "CLOSE": "Close", "SYNCHRONIZE_LINK": "synchronize with Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Do you need somebody for this task?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

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

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

    " }, "FIELDS": { "TEAM_REQUIREMENT": "團隊要求", diff --git a/scripts/manage_translations.py b/scripts/manage_translations.py old mode 100644 new mode 100755 From 066009b96260a0486d536872024d0c222be48410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 10 Jan 2017 11:00:31 +0100 Subject: [PATCH 088/175] Fix #4868: Now can edit external user perms on private projects --- app/coffee/modules/admin/roles.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index 9d4348cb..01c972dd 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -47,6 +47,7 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil "$q", "$tgLocation", "$tgNavUrls", + "$tgModel", "tgAppMetaService", "$translate", "tgErrorHandlingService", @@ -54,7 +55,7 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil ] constructor: (@scope, @rootscope, @repo, @confirm, @rs, @params, @q, @location, @navUrls, - @appMetaService, @translate, @errorHandlingService, @projectService) -> + @model, @appMetaService, @translate, @errorHandlingService, @projectService) -> bindMethods(@) @scope.sectionName = "ADMIN.MENU.PERMISSIONS" @@ -72,6 +73,7 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil loadProject: -> project = @projectService.project.toJS() + project = @model.make_model("projects", project) if not project.i_am_admin @errorHandlingService.permissionDenied() From de4ab50e6d024718378fc544ba0ea2c663161597 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 14 Dec 2016 09:49:23 +0100 Subject: [PATCH 089/175] Issue 4827; ordering of tags --- app/coffee/modules/common/tags.coffee | 48 +++++++------------ .../includes/components/backlog-row.jade | 2 +- 2 files changed, 18 insertions(+), 32 deletions(-) diff --git a/app/coffee/modules/common/tags.coffee b/app/coffee/modules/common/tags.coffee index cb38eee9..377b795e 100644 --- a/app/coffee/modules/common/tags.coffee +++ b/app/coffee/modules/common/tags.coffee @@ -58,47 +58,33 @@ TagsDirective = -> module.directive("tgTags", TagsDirective) -ColorizeTagsDirective = -> - templates = { - backlog: _.template(""" +ColorizeTagsBacklogDirective = -> + template = _.template(""" <% _.each(tags, function(tag) { %> + <% if (tag[1] !== null) { %> - style="border-left: 5px solid <%- tag[1] %>" - <% } %> - title="<%- tag[0] %>"><%- tag[0] %> + style="border-left: 5px solid <%- tag[1] %>" + title="<%- tag[0] %>"> + <%- tag[0] %> + + <% } %> <% }) %> - """) - kanban: _.template(""" <% _.each(tags, function(tag) { %> - - style="border-color: <%- tag[1] %>" - <% } %> - title="<%- tag[0] %>" /> + <% if (tag[1] === null) { %> + + <%- tag[0] %> + + <% } %> <% }) %> - """) - taskboard: _.template(""" - <% _.each(tags, function(tag) { %> - - style="border-color: <%- tag[1] %>" - <% } %> - title="<%- tag[0] %>" /> - <% }) %> - """) - } + """) link = ($scope, $el, $attrs, $ctrl) -> render = (tags) -> - template = templates[$attrs.tgColorizeTagsType] - html = template({tags: tags}) $el.html(html) - $scope.$watch $attrs.tgColorizeTags, (tags) -> + $scope.$watch $attrs.tgColorizeBacklogTags, (tags) -> render(tags) if tags? $scope.$on "$destroy", -> @@ -106,7 +92,7 @@ ColorizeTagsDirective = -> return {link: link} -module.directive("tgColorizeTags", ColorizeTagsDirective) +module.directive("tgColorizeBacklogTags", ColorizeTagsBacklogDirective) ############################################################################# diff --git a/app/partials/includes/components/backlog-row.jade b/app/partials/includes/components/backlog-row.jade index 08524602..e3fafd2d 100644 --- a/app/partials/includes/components/backlog-row.jade +++ b/app/partials/includes/components/backlog-row.jade @@ -17,7 +17,7 @@ tg-svg(svg-icon="icon-upvote") span {{ ::us.total_voters }} .user-stories - .tags-block(tg-colorize-tags="us.tags", tg-colorize-tags-type="backlog") + .tags-block(tg-colorize-backlog-tags="us.tags") .user-story-name a.clickable( href="" From 58f20263bbb0d032b5bdd56d620c5b32e68c42fa Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 12 Jan 2017 12:34:31 +0100 Subject: [PATCH 090/175] fix firefox hightlighter break lines --- .../wysiwyg-code-hightlighter.service.coffee | 22 +++++++++++++++++-- .../wysiwyg/wysiwyg.directive.coffee | 13 ++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee index b9854a96..06c35b5a 100644 --- a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee @@ -59,17 +59,29 @@ class WysiwygCodeHightlighterService if lan tab.innerText = lan @.updatePositionCodeTab(code.parentElement, tab) + + languageClass = _.find code.classList, (className) -> + return className && className.indexOf('language-') != -1 + + code.classList.remove(languageClass.replace('language-', '')) + code.classList.remove(languageClass) + code.classList.add('language-' + lan) code.classList.add(lan) document.body.appendChild(tab) - code.classList.add(id) code.dataset.tab = tab + + if !code.dataset.tabId + code.dataset.tabId = id + code.classList.add(id) + + tab.dataset.tabId = code.dataset.tabId + tab.classList.add('code-language-selector') # styles tab.classList.add('medium-' + mediumInstance.id) # used to delete - tab.dataset.tabId = id @.updatePositionCodeTab(code.parentElement, tab) @@ -158,10 +170,16 @@ class WysiwygCodeHightlighterService codes.each (index, code) -> code.innerHTML = code.innerText + # firefox adds br instead of new lines inside + replaceCodeBrToNl: (code) -> + $(code).find('br').replaceWith('\n') + addHightlighter: (element) -> codes = $(element).find('code') codes.each (index, code) => + @.replaceCodeBrToNl(code) + lan = @.getLanguageInClassList(code.classList) if lan diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 25048c00..5568ead1 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -30,6 +30,9 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad isCodeBlockSelected = (range, elm) -> return !!$(range.endContainer).parentsUntil('.editor', 'code').length + refreshCodeBlockHightlight = (elm) -> + wysiwygCodeHightlighterService.refreshCodeLanguageSelectors(elm) + removeCodeBlockAndHightlight = (range, elm) -> code = $(range.endContainer).closest('code')[0] pre = code.parentNode @@ -237,8 +240,16 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.cancel() askResponse.finish() + # firefox adds br instead of new lines inside , taiga must replace the br by \n before sending to the server + replaceCodeBrToNl = () -> + html = $('
    ').html(editorMedium.html()) + html.find('code br').replaceWith('\n') + + return html.html() + updateMarkdownWithCurrentHtml = () -> - $scope.markdown = wysiwygService.getMarkdown(editorMedium.html()) + html = replaceCodeBrToNl() + $scope.markdown = wysiwygService.getMarkdown(html) localSave = (markdown) -> if $scope.storageKey From 6409614b39341db47055f6a4b2809a8c16afd0cd Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 12 Jan 2017 13:05:43 +0100 Subject: [PATCH 091/175] improve replace emoji regex --- app/modules/components/wysiwyg/wysiwyg.service.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/modules/components/wysiwyg/wysiwyg.service.coffee b/app/modules/components/wysiwyg/wysiwyg.service.coffee index caf2aefb..1786417c 100644 --- a/app/modules/components/wysiwyg/wysiwyg.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.service.coffee @@ -54,7 +54,7 @@ class WysiwygService return html replaceEmojiNameByImgs: (text) -> - emojiIds = taiga.getMatches(text, /:([^: ]*):/g) + emojiIds = taiga.getMatches(text, /:([\w ]*):/g) for emojiId in emojiIds regexImgs = new RegExp(':' + emojiId + ':', 'g') From d35dcf867321ab5a46235cb7bb4e6843b560864f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 16 Jan 2017 18:06:12 +0100 Subject: [PATCH 092/175] [i18n] Add korean locale and upgrade the rest --- CHANGELOG.md | 1 + app/locales/taiga/locale-es.json | 8 +- app/locales/taiga/locale-fr.json | 28 +- app/locales/taiga/locale-ko.json | 1711 ++++++++++++++++++++++++++++++ 4 files changed, 1730 insertions(+), 18 deletions(-) create mode 100644 app/locales/taiga/locale-ko.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 34614d89..b4327b03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Add rich text custom fields (with a wysiwyg editor like descreption or comments). - i18n: - Add japanese (ja) translation. + - Add korean (ko) translation. - Add chinese simplified (zh-Hans) translation. ### Misc diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index fa0e6d04..5f020760 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -962,7 +962,7 @@ } }, "CONTACT_BUTTON": { - "CONTACT_TITLE": "Contact the project team", + "CONTACT_TITLE": "Contacta con el equipo de proyecto", "CONTACT_BUTTON": "Contact the project" } }, @@ -1051,10 +1051,10 @@ "BUTTON": "Pregunte a este usuario para convertirlo en el nuero dueño del proyecto" }, "CONTACT_PROJECT": { - "TITLE": "Send an email to", - "WARNING": "The email will be received by the project admins", + "TITLE": "Enviar email a", + "WARNING": "Los administradores del proyecto recibirán el email", "PLACEHOLDER": "Write your message", - "SEND": "Send" + "SEND": "Enviar" } }, "EPIC": { diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 27ccc753..f745ea48 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -41,7 +41,7 @@ "LOGOUT": "Déconnexion", "EXTERNAL_USER": "un utilisateur externe", "GENERIC_ERROR": "L'un de nos Oompa Loompas dit {{error}}.", - "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", + "IOCAINE_TEXT": "Ce membre se sent un peu dépassé par cette tâche. Deviendra immunisé contre le poison iocane au fil du temps avec votre aide. Pour l'instant, il peut avoir besoin d'une étreinte.", "CLIENT_REQUIREMENT": "Une exigence client est une nouvelle exigence exprimée par le client, qui n'était pas prévue dans le projet initial, et qu'il est nécessaire d'intégrer", "TEAM_REQUIREMENT": "Une exigence équipe est une exigence exprimée par l'équipe qui doit être rajoutée au projet, sans que cela n'ait d'impact pour le client", "OWNER": "Propriétaire du Projet", @@ -227,7 +227,7 @@ } }, "WYSIWYG": { - "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", + "OUTDATED": "Une autre personne a apportée des modifications lors de l'édition. Vérifiez la nouvelle version dans l'onglet Activité avant d'enregistrer vos modifications.", "ATTACH_FILE_HELP": "Joindre des fichiers en glissant et déposant ceux-ci sur la zone de texte ci-dessus.", "ATTACH_FILE_HELP_SAVE_FIRST": "Enregistrez d'abord si vous voulez joindre des fichiers en glissant et déposant ceux-ci sur la zone de texte ci-dessus.", "MARKDOWN_HELP": "Aide sur la syntaxe Markdown" @@ -518,7 +518,7 @@ "RECRUITING": "Est-ce que ce projet recherche des membres ?", "RECRUITING_MESSAGE": "Qui cherchez-vous ?", "RECRUITING_PLACEHOLDER": "Définissez le profil que vous recherchez", - "FEEDBACK": "Receive feedback from Taiga users?", + "FEEDBACK": "Recevoir les commentaires des utilisateurs de Taiga?", "PUBLIC_PROJECT": "Projet public", "PRIVATE_PROJECT": "Projet privé", "PRIVATE_OR_PUBLIC": "Quelle est la différence entre les projets publics et privés ?", @@ -571,7 +571,7 @@ "ISSUE_DESCRIPTION": "Champs personnalisés des tickets", "ISSUE_ADD": "Ajouter un champ personnalisé dans les tickets", "FIELD_TYPE_TEXT": "Texte", - "FIELD_TYPE_RICHTEXT": "Rich text", + "FIELD_TYPE_RICHTEXT": "Texte riche", "FIELD_TYPE_MULTI": "Multiligne", "FIELD_TYPE_DATE": "Date", "FIELD_TYPE_URL": "Url" @@ -962,8 +962,8 @@ } }, "CONTACT_BUTTON": { - "CONTACT_TITLE": "Contact the project team", - "CONTACT_BUTTON": "Contact the project" + "CONTACT_TITLE": "Contactez l'équipe du projet", + "CONTACT_BUTTON": "Contactez le projet" } }, "LIGHTBOX": { @@ -1051,10 +1051,10 @@ "BUTTON": "Demander à ce membre du projet de devenir le nouveau propriétaire" }, "CONTACT_PROJECT": { - "TITLE": "Send an email to", - "WARNING": "The email will be received by the project admins", - "PLACEHOLDER": "Write your message", - "SEND": "Send" + "TITLE": "Envoyer un email à", + "WARNING": "L'email sera reçu par les administrateurs du projet", + "PLACEHOLDER": "Ecrire votre message", + "SEND": "Envoyer" } }, "EPIC": { @@ -1236,10 +1236,10 @@ "HIDE": "Cacher les mots-clés" }, "FORECASTING": { - "TITLE": "Velocity forecasting", - "BACKLOG": "Display backlog", - "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", - "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + "TITLE": "Prévision de la vitesse", + "BACKLOG": "Afficher le carnet de commandes", + "NEW_SPRINT": "Histoires d'utilisateurs pour votre prochain sprint en fonction de votre vitesse. Cliquez ici pour créer un nouveau sprint.", + "CURRENT_SPRINT": "Histoires d'utilisateur candidat pour votre sprint basé sur votre vitesse. Cliquez ici pour ajouter au sprint actuel." }, "TABLE": { "COLUMN_US": "Récits utilisateur", diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json new file mode 100644 index 00000000..8bc110bd --- /dev/null +++ b/app/locales/taiga/locale-ko.json @@ -0,0 +1,1711 @@ +{ + "COMMON": { + "YES": "예", + "NO": "아니오", + "OR": "또는", + "LOADING": "불러오는 중...", + "LOADING_PROJECT": "프로젝트 불러오는 중...", + "DATE": "YYYY MMM DD", + "DATETIME": "YYYY MMM DD HH:mm", + "SAVE": "저장", + "CANCEL": "취소", + "ACCEPT": "확인", + "DELETE": "삭제하기", + "UNLINK": "연결끊기", + "CREATE": "생성하기", + "ADD": "추가하기", + "COPY_TO_CLIPBOARD": "클립보드에 복사하기: Ctrl+C", + "EDIT": "수정하기", + "DRAG": "드래그", + "TAG_LINE": "당신의 프로젝트 관리를 위한 민첩하고 무료인 오픈소스 도구", + "TAG_LINE_2": "프로젝트에 사랑을 담아", + "BLOCK": "차단", + "BLOCK_TITLE": "조건을 만족하지 않는 경우 이 아이템을 차단하세요.", + "BLOCKED": "차단됨", + "UNBLOCK": "차단 해제", + "UNBLOCK_TITLE": "차단 취소", + "BLOCKED_NOTE": "왜 차단되었나요?", + "BLOCKED_REASON": "이유를 적어주시겠어요?", + "CREATED_BY": "{{fullDisplayName}} 님이 생성", + "FROM": "이전 상태", + "TO": "현재 상태", + "CLOSE": "완료", + "GO_HOME": "첫 화면으로 가기", + "PLUGINS": "플러그인", + "BETA": "아직 베타 버전입니다!", + "ONE_ITEM_LINE": "한 줄마다 하나씩...", + "NEW_BULK": "여러개 생성하기", + "RELATED_TASKS": "연관된 태스크", + "PREVIOUS": "이전", + "NEXT": "다음", + "LOGOUT": "로그아웃", + "EXTERNAL_USER": "외부 사용자", + "GENERIC_ERROR": "움파룸파가 {{error}} 라고 합니다.", + "IOCAINE_TEXT": "이 회원은 이 일에 조금 압박감을 ​​느낍니다. 당신의 도움이 필요한 시간이 지나면 아이오케인 독에 면역될 것 입니다. 지금 당장 포옹이 필요할 수도 있어요.", + "CLIENT_REQUIREMENT": "고객 요구 사항은 이전에 예상하지 않았던 새로운 요구 사항이며 프로젝트의 일부가 되어야만 합니다.", + "TEAM_REQUIREMENT": "팀 요구 사항은 프로젝트에 반드시 있어야하지만 클라이언트에게는 비용이 없어야합니다.", + "OWNER": "프로젝트 소유자", + "CAPSLOCK_WARNING": "조심하세요! 대/소문자를 구분하는 입력란에 대문자를 사용하고 있습니다.", + "CONFIRM_CLOSE_EDIT_MODE_TITLE": "정말로 수정 모드를 닫겠습니까?", + "CONFIRM_CLOSE_EDIT_MODE_MESSAGE": "저장하지 않고 편집 모드를 닫으면 모든 변경 사항이 손실됩니다.", + "RELATED_USERSTORIES": "연결된 유저 스토리", + "CARD": { + "ASSIGN_TO": "다음으로 할당", + "EDIT": "카드 수정" + }, + "FORM_ERRORS": { + "DEFAULT_MESSAGE": "값이 유효하지 않습니다", + "TYPE_EMAIL": "정확한 이메일이어야 합니다.", + "TYPE_URL": "정확한 URL이어야 합니다.", + "TYPE_URLSTRICT": "정확한 URL이어야 합니다.", + "TYPE_NUMBER": "정확한 숫자만 적어 주세요", + "TYPE_DIGITS": "숫자만 입력해 주세요", + "TYPE_DATEISO": "유효한 날짜(YYYY-MM-DD)여야 합니다.", + "TYPE_ALPHANUM": "알파벳과 숫자만 써 주세요.", + "TYPE_PHONE": "전화번호를 정확히 적어 주세요.", + "NOTNULL": "이 값은 비워 둘 수 없습니다.", + "NOT_BLANK": "이 값은 비워 둘 수 없습니다.", + "REQUIRED": "필수 항목입니다.", + "REGEXP": "값이 유효하지 않습니다", + "MIN": "이 값은 %s 와 같거나 커야 합니다.", + "MAX": "이 값은 %s 와 같거나 작아야 합니다.", + "RANGE": "이 값은 %와 %s 사이여야 합니다.", + "MIN_LENGTH": "너무 짧습니다. %s 글자 이상 입력해주세요.", + "MAX_LENGTH": "너무 깁니다. %s 글자 이하로 입력해주세요.", + "RANGE_LENGTH": "글자수가 잘못되었습니다. %s와 %s의 사이 글자수여야 합니다.", + "MIN_CHECK": "%s 개 이상 선택해주세요.", + "MAX_CHECK": "%s 개 이하로 선택해주세요.", + "RANGE_CHECK": "%s 값과 %s 값 중에 선택해주세요.", + "EQUAL_TO": "이 값이 일치해야 합니다.", + "LINEWIDTH": "하나 또는 그 이상의 줄들이 너무 깁니다. %s 이하의 문자로 다시 시도해주세요.", + "PIKADAY": "날짜 형식이 올바르지 않습니다. DD MMM YYYY 형식을 사용해주세요. (예, 23 Mar 1984)" + }, + "PICKERDATE": { + "FORMAT": "YYYY MMM DD", + "IS_RTL": "false", + "FIRST_DAY_OF_WEEK": "1", + "PREV_MONTH": "이전 달", + "NEXT_MONTH": "다음 달", + "MONTHS": { + "JAN": "1월", + "FEB": "2월", + "MAR": "3월", + "APR": "4월", + "MAY": "5월", + "JUN": "6월", + "JUL": "7월", + "AUG": "8월", + "SEP": "9월", + "OCT": "10월", + "NOV": "11월", + "DEC": "12월" + }, + "WEEK_DAYS": { + "SUN": "일요일", + "MON": "월요일", + "TUE": "화요일", + "WED": "수요일", + "THU": "목요일", + "FRI": "금요일", + "SAT": "토요일" + }, + "WEEK_DAYS_SHORT": { + "SUN": "일", + "MON": "월", + "TUE": "화", + "WED": "수", + "THU": "목", + "FRI": "금", + "SAT": "토" + } + }, + "SEE_USER_PROFILE": "{{username }}의 프로필 보기", + "USER_STORY": "유저 스토리", + "TASK": "태스크", + "ISSUE": "이슈", + "EPIC": "에픽", + "TAGS": { + "PLACEHOLDER": "태그 입력", + "DELETE": "태그 삭제하기", + "ADD": "태그 추가하기" + }, + "DESCRIPTION": { + "EMPTY": "공백으로 남기지 마세요. 재미없어요. 뭐라도 좀 적어보세요...", + "NO_DESCRIPTION": "아직 설명이 없습니다" + }, + "FIELDS": { + "SUBJECT": "주제", + "NAME": "이름", + "URL": "URL", + "DESCRIPTION": "설명", + "VALUE": "값", + "SLUG": "슬러그", + "COLOR": "색", + "IS_CLOSED": "완료했나요?", + "STATUS": "상태", + "TYPE": "타입", + "SEVERITY": "심각도", + "PRIORITY": "우선순위", + "ASSIGNED_TO": "할당됨", + "POINTS": "포인트", + "BLOCKED_NOTE": "차단된 노트", + "IS_BLOCKED": "차단됨", + "REF": "참조", + "VOTES": "투표", + "SPRINT": "스프린트" + }, + "ROLES": { + "ALL": "전체" + }, + "ASSIGNED_TO": { + "NOT_ASSIGNED": "할당 되지 않음", + "ASSIGN": "할당", + "DELETE_ASSIGNMENT": "할당 삭제하기", + "REMOVE_ASSIGNED": "할당 삭제", + "TOO_MANY": "사용자가 너무 많아요. 필터링 좀....", + "CONFIRM_UNASSIGNED": "어사인 하지 않은 상태로 둘 건가요?", + "TITLE_ACTION_EDIT_ASSIGNMENT": "할당 수정하기", + "SELF": "나에게 할당하기" + }, + "STATUS": { + "CLOSED": "완료함", + "OPEN": "열림" + }, + "WATCHERS": { + "WATCHERS": "구독중인 사람들", + "ADD": "구독자 추가", + "TITLE_ADD": "프로젝트 회원을 구독자 목록에 추가", + "DELETE": "구독자 삭제하기", + "TITLE_LIGHTBOX_DELETE_WARTCHER": "구독자 삭제..." + }, + "WATCH_BUTTON": { + "WATCH": "구독", + "WATCHING": "구독중", + "UNWATCH": "구독 취소", + "WATCHERS": "구독중인 사람들", + "BUTTON_TITLE": "구독/구독 취소", + "COUNTER_TITLE": "{total, plural, one{one watcher} other{# 명이 구독중}}" + }, + "VOTE_BUTTON": { + "UPVOTE": "공감하기", + "UPVOTED": "공감했음", + "DOWNVOTE": "비공감하기", + "VOTERS": "투표자", + "BUTTON_TITLE": "이 아이템 공감/비공감", + "COUNTER_TITLE": "{total, plural, one{one vote} other{# 명의 찬성}}" + }, + "CUSTOM_ATTRIBUTES": { + "CUSTOM_FIELDS": "사용자 정의 필드", + "SAVE": "사용자 정의 필드 저장하기", + "EDIT": "사용자 정의 필드 수정하기", + "DELETE": "사용자 정의 속성 삭제하기", + "CONFIRM_DELETE": "이 사용자 정의 필드의 모든 값이 삭제된다는 점을 기억하십시오.\n계속 하시겠습니까?" + }, + "FILTERS": { + "TITLE": "필터", + "INPUT_PLACEHOLDER": "제목 또는 참조", + "TITLE_ACTION_FILTER_BUTTON": "검색하기", + "INPUT_SEARCH_PLACEHOLDER": "제목 또는 참조", + "TITLE_ACTION_SEARCH": "검색", + "ACTION_SAVE_CUSTOM_FILTER": "커스컴 필터 저장하기", + "PLACEHOLDER_FILTER_NAME": "필터 이름을 쓰고 엔터키를 누르세요", + "APPLIED_FILTERS_NUM": "적용된 필터", + "CATEGORIES": { + "TYPE": "타입", + "STATUS": "상태", + "SEVERITY": "심각도", + "PRIORITIES": "우선순위", + "TAGS": "태그", + "ASSIGNED_TO": "할당됨", + "CREATED_BY": "생성함", + "CUSTOM_FILTERS": "사용자 정의 필터", + "EPIC": "에픽" + }, + "CONFIRM_DELETE": { + "TITLE": "사용자 정의 필터 삭제하기", + "MESSAGE": "'{{customFilterName}}' 사용자 정의 필터" + } + }, + "WYSIWYG": { + "OUTDATED": "편집하는 동안 다른 사람이 변경했습니다. 변경 사항을 저장하기 전에 활성 탭에서 새 버전을 확인하십시오.", + "ATTACH_FILE_HELP": "위의 텍스트 영역에 파일을 드래그 & 드랍하여 첨부하십시오.", + "ATTACH_FILE_HELP_SAVE_FIRST": "저장하기 전에 파일을 업로드하고 싶다면 텍스트 입련란에 파일을 드래그 & 드랍해주세요.", + "MARKDOWN_HELP": "마크다운 문법 도움말" + }, + "PERMISIONS_CATEGORIES": { + "EPICS": { + "NAME": "에픽", + "VIEW_EPICS": "에픽 보기", + "ADD_EPICS": "에픽 추가", + "MODIFY_EPICS": "에픽 수정하기", + "COMMENT_EPICS": "에픽 댓글", + "DELETE_EPICS": "에픽 삭제하기" + }, + "SPRINTS": { + "NAME": "스프린트", + "VIEW_SPRINTS": "스프린트 보기", + "ADD_SPRINTS": "스프린트 추가하기", + "MODIFY_SPRINTS": "스프린트 수정하기", + "DELETE_SPRINTS": "스프린트 삭제하기" + }, + "USER_STORIES": { + "NAME": "유저 스토리", + "VIEW_USER_STORIES": "유저 스토리 보기", + "ADD_USER_STORIES": "유저 스토리 추가하기", + "MODIFY_USER_STORIES": "유저 스토리 수정하기", + "COMMENT_USER_STORIES": "유저 스토리 댓글", + "DELETE_USER_STORIES": "유저 스토리 삭제하기" + }, + "TASKS": { + "NAME": "태스크", + "VIEW_TASKS": "태스크 보기", + "ADD_TASKS": "태스크 추가하기", + "MODIFY_TASKS": "태스크 수정하기", + "COMMENT_TASKS": "태스크 댓글", + "DELETE_TASKS": "태스크 삭제하기" + }, + "ISSUES": { + "NAME": "이슈", + "VIEW_ISSUES": "이슈 보기", + "ADD_ISSUES": "이슈 추가하기", + "MODIFY_ISSUES": "이슈 수정하기", + "COMMENT_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": "위키 링크 삭제하기" + } + }, + "META": { + "PAGE_TITLE": "타이가", + "PAGE_DESCRIPTION": "타이가는 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요." + } + }, + "LOGIN": { + "PAGE_TITLE": "로그인 - 타이가", + "PAGE_DESCRIPTION": "타이가에 로그인하세요. 타이가는 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요." + }, + "AUTH": { + "INVITED_YOU": "이 프로젝트에 참여하도록 초대받았습니다", + "NOT_REGISTERED_YET": "아직 가입을 안 했나요?", + "REGISTER": "회원 가입", + "CREATE_ACCOUNT": "무료 계정을 생성하세요" + }, + "LOGIN_COMMON": { + "HEADER": "타이가 계정을 이미 등록했습니다", + "PLACEHOLDER_AUTH_NAME": "아이디나 이메일 (대소문자 구분)", + "LINK_FORGOT_PASSWORD": "비밀번호를 잊었나요?", + "TITLE_LINK_FORGOT_PASSWORD": "비밀번호를 잊었나요?", + "ACTION_ENTER": "들어가기", + "ACTION_SIGN_IN": "로그인", + "PLACEHOLDER_AUTH_PASSWORD": "비밀번호 (대소문자 구분)" + }, + "LOGIN_FORM": { + "ERROR_AUTH_INCORRECT": "움파룸파가 말하길, 아이디나 이메일, 비밀번호 중 하나가 틀렸다고 하네요.", + "SUCCESS": "움파룸파가 즐거워 합니다. 타이가에 어서 오세요." + }, + "REGISTER": { + "PAGE_TITLE": "등록 - 타이가", + "PAGE_DESCRIPTION": "타이가에 계정을 만드세요. 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요." + }, + "REGISTER_FORM": { + "TITLE": "타이가 계정을 등록하기(무료)", + "PLACEHOLDER_NAME": "아이디를 입력하세요 (대소문자 구분)", + "PLACEHOLDER_FULL_NAME": "전체 이름을 넣으세요", + "PLACEHOLDER_EMAIL": "이메일", + "PLACEHOLDER_PASSWORD": "비밀번호 설정하기 (대소문자 구분)", + "ACTION_SIGN_UP": "등록하기", + "TITLE_LINK_LOGIN": "로그인", + "LINK_LOGIN": "이미 등록하셨나요? 로그인" + }, + "FORGOT_PASSWORD": { + "PAGE_TITLE": "비밀번호 찾기 - 타이가", + "PAGE_DESCRIPTION": "새 비밀번호를 발급받을 아이디나 이메일을 입력하세요." + }, + "FORGOT_PASSWORD_FORM": { + "TITLE": "혹시 비밀번호를 잊었나요?", + "SUBTITLE": "새로운 암호를 설정하기 위해서, 아이디나 이메일을 입력하세요.", + "PLACEHOLDER_FIELD": "아이디나 이메일", + "ACTION_RESET_PASSWORD": "비밀번호 재설정하기", + "LINK_CANCEL": "아니요 되돌아갈래요. 기억이 났어요.", + "SUCCESS_TITLE": "메일함을 확인해보세요!", + "SUCCESS_TEXT": "이메일 보관함을 확인하세요!
    새 비밀번호를 설정할 수 있는 방법을 이메일로 알려드렸습니다.", + "ERROR": "움파룸파가 말하길, 아직 등록되지 않은 사용자라고 하네요." + }, + "CHANGE_PASSWORD": { + "PAGE_TITLE": "비밀번호 변경하기 - 타이가", + "PAGE_DESCRIPTION": "새 비밀번호를 설정하세요. 그리고, 참! 철분이 많은 음식을 먹으면 기억력에 좋다네요. ^^", + "SECTION_NAME": "비밀번호 변경하기", + "FIELD_CURRENT_PASSWORD": "현재 비밀번호", + "PLACEHOLDER_CURRENT_PASSWORD": "현재 비밀번호 (아직 설정한 적이 없다면 비워두세요)", + "FIELD_NEW_PASSWORD": "새 비밀번호", + "PLACEHOLDER_NEW_PASSWORD": "새 비밀번호를 입력하세요", + "FIELD_RETYPE_PASSWORD": "새 비밀번호를 한 번 더 입력하세요", + "PLACEHOLDER_RETYPE_PASSWORD": "새 비밀번호를 한 번 더 입력하세요", + "ERROR_PASSWORD_MATCH": "비밀번호가 일치하지 않습니다" + }, + "CHANGE_PASSWORD_RECOVERY_FORM": { + "TITLE": "타이가 패쓰 생성하기", + "SUBTITLE": "아참, 철분이 많은 음식을 먹으면 기억력에 좋다네요. ^^", + "PLACEHOLDER_NEW_PASSWORD": "새 비밀번호", + "PLACEHOLDER_RE_TYPE_NEW_PASSWORD": "새 비밀번호를 한 번 더 입력하세요", + "ACTION_RESET_PASSWORD": "비밀번호 재설정하기", + "ERROR": "움파룸파가 암호를 복구하지 못했습니다. 다시 한 번 시도해 주세요.", + "SUCCESS": "움파룸파가 새 비밀번호를 저장했습니다.
    로그인해보세요." + }, + "INVITATION": { + "PAGE_TITLE": "초대 수락 - 타이가", + "PAGE_DESCRIPTION": "타이가에서 온 프로젝트 초대를 수락하세요. 타이가는 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요" + }, + "INVITATION_LOGIN_FORM": { + "NOT_FOUND": "움파룸파가, 당신의 초대장을 못 찾았습니다.", + "SUCCESS": "{{project_name}} 프로젝트에 오신 것을 환영합니다.", + "ERROR": "움파룸파가 말하길, 등록되지 않은 사용자이거나 비밀번호를 틀렸다고 합니다." + }, + "HOME": { + "PAGE_TITLE": "홈페이지 - 타이가", + "PAGE_DESCRIPTION": "타이가 홈페이지에서는 여러분의 프로젝트 뿐만 아니라 여러분이 관련된 유저 스토리, 태스크, 이슈를 확인할 수 있습니다.", + "EMPTY_WORKING_ON": "비어있는 것 같아요. 아닌가요? 타이가로 일을 시작하고 당신이 일하게 될 스토리, 태스크, 이슈들을 확인해보세요.", + "EMPTY_WATCHING": "프로젝트의 유저 스토리, 태스크 그리고 이슈들을 팔로우하여 변경사항이 있을 때마다 알림을 받으세요 :)", + "EMPTY_PROJECT_LIST": "아직 프로젝트가 없습니다.", + "WORKING_ON_SECTION": "일 하는 중", + "WATCHING_SECTION": "구독중", + "DASHBOARD": "프로젝트 대시보드" + }, + "EPICS": { + "TITLE": "에픽", + "SECTION_NAME": "에픽", + "EPIC": "에픽", + "PAGE_TITLE": "에픽 - {{projectName}}", + "PAGE_DESCRIPTION": "프로젝트의 에픽 목록 {{projectName}}: {{projectDescription}}", + "DASHBOARD": { + "ADD": "+ 에픽 추가", + "UNASSIGNED": "할당되지 않음" + }, + "EMPTY": { + "TITLE": "아직 에픽이 없는 것 같네요.", + "EXPLANATION": "에픽은 유저 스토리를 포함하는 상위 레벨 항목입니다.
    에픽은 계층 구조의 최상위에 있으며 유저 스토리를 그룹화하는데 사용할 수 있습니다.", + "HELP": "에픽에 대하여 더 배우기" + }, + "TABLE": { + "VOTES": "투표", + "NAME": "이름", + "PROJECT": "프로젝트", + "SPRINT": "스프린트", + "ASSIGNED_TO": "할당됨", + "STATUS": "상태", + "PROGRESS": "진행", + "VIEW_OPTIONS": "옵션 보기" + }, + "CREATE": { + "TITLE": "새로운 에픽 만들기", + "PLACEHOLDER_DESCRIPTION": "다른 사람들이 이 에픽에 대해 좀 더 쉽게 이해할 수 있도록 설명을 추가해주세요.", + "TEAM_REQUIREMENT": "팀 요구 사항", + "CLIENT_REQUIREMENT": "고객 요구 사항", + "BLOCKED": "차단됨", + "BLOCKED_NOTE_PLACEHOLDER": "왜 이 에픽이 차단되었나요?", + "CREATE_EPIC": "에픽 만들기" + } + }, + "PROJECTS": { + "PAGE_TITLE": "내 프로젝트 - 타이가", + "PAGE_DESCRIPTION": "프로젝트 목록입니다. 새 프로젝트를 만들거나 순서를 바꿀 수 있습니다.", + "MY_PROJECTS": "내 프로젝트" + }, + "ATTACHMENT": { + "SECTION_NAME": "첨부", + "TITLE": "{{ fileName }} 파일은 {{ date }}에 업로드되었습니다.", + "LIST_VIEW_MODE": "목록으로 보기", + "GALLERY_VIEW_MODE": "갤러리로 보기", + "DESCRIPTION": "간단한 설명을 입력하세요", + "DEPRECATED": "(지원 안함)", + "DEPRECATED_FILE": "더 이상 지원하지 않도록 할까요?", + "ADD": "첨부 파일 추가. {{maxFileSizeMsg}}", + "DROP": "여기에 첨부파일을 끌어 놓으세요!", + "SHOW_DEPRECATED": "+ 더 이상 필요 없는 첨부파일 보기", + "HIDE_DEPRECATED": "- 더 이상 필요 없는 첨부파일 숨기기", + "COUNT_DEPRECATED": "({{ counter }} 지원 안함)", + "MAX_UPLOAD_SIZE": "업로드 가능한 최대 용량은 {{maxFileSize}}", + "DATE": "YYYY MMM DD [at] hh:mm", + "ERROR_UPLOAD_ATTACHMENT": "'{{fileName}}'를 업로드할 수 없었습니다. {{errorMessage}}", + "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "첨부파일 삭제하기", + "MSG_LIGHTBOX_DELETE_ATTACHMENT": "첨부 파일 '{{fileName}}'", + "ERROR_DELETE_ATTACHMENT": "삭제할 수 없었습니다: {{errorMessage}}", + "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", + "FIELDS": { + "IS_DEPRECATED": "지원안함" + } + }, + "PAGINATION": { + "PREVIOUS": "이전", + "NEXT": "다음" + }, + "ADMIN": { + "COMMON": { + "TITLE_ACTION_EDIT_VALUE": "값 수정하기", + "TITLE_ACTION_DELETE_VALUE": "값 삭제하기", + "TITLE_ACTION_DELETE_TAG": "태그 삭제하기" + }, + "HELP": "도움이 필요하다면 고객 지원 페이지를 확인하세요", + "PROJECT_DEFAULT_VALUES": { + "TITLE": "기본 값", + "SUBTITLE": "선택된 모든 항목을 모두 초기값으로 설정" + }, + "MEMBERSHIPS": { + "TITLE": "회원 관리", + "PAGE_TITLE": "팀원 - {{projectName}}", + "ADD_BUTTON": "회원 추가하기", + "ADD_BUTTON_TITLE": "회원 추가하기", + "LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN": "안타깝게도, 프로젝트의 ({{members}}) 허용된 회원 수 제한에 도달했습니다. ", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "이 프로젝트는 허용된 최대 회원 수 ({{members}}) 명에 도달하였습니다. 더 많은 최대 회원 수를 할당받고 싶다면 관리자에게 문의하세요." + }, + "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": "비활성화", + "EPICS": "에픽", + "EPICS_DESCRIPTION": "프로젝트의 가장 전략적인 부분을 시각화하고 관리합니다.", + "BACKLOG": "백로그", + "BACKLOG_DESCRIPTION": "유저 스토리를 관리하여 다가오는 작업과 우선 순위가 지정된 작업을 체계적으로 볼 수 있습니다.", + "NUMBER_SPRINTS": "예상되는 스프린트 의 갯수", + "NUMBER_SPRINTS_HELP": "정하지 않으려면 0을 입력합니다.", + "NUMBER_US_POINTS": "예상되는 총 스토리 포인트", + "NUMBER_US_POINTS_HELP": "정하지 않으려면 0을 입력합니다.", + "KANBAN": "칸반", + "KANBAN_DESCRIPTION": "이 칸반을 이용해 프로젝트를 효율적으로 만듭시다.", + "ISSUES": "이슈", + "ISSUES_DESCRIPTION": "프로젝트와 관련된 버그와 질문 및 개선 사항을 추적하십시오. 그 무엇도 놓치지 마세요!", + "WIKI": "위키", + "WIKI_DESCRIPTION": "다른 사람들과 공동으로 콘텐츠를 추가, 수정 또는 삭제합니다. 프로젝트 문서화에 적합합니다.", + "MEETUP": "미팅", + "MEETUP_DESCRIPTION": "당신의 화상회의 시스템을 선택하세요.", + "SELECT_VIDEOCONFERENCE": "화상 회의 시스템 선택", + "SALT_CHAT_ROOM": "채팅방 이름에 머릿말 추가", + "JITSI_CHAT_ROOM": "Jitsi", + "APPEARIN_CHAT_ROOM": "AppearIn", + "TALKY_CHAT_ROOM": "Talky", + "CUSTOM_CHAT_ROOM": "사용자 정의 ", + "URL_CHAT_ROOM": "채팅방 URL" + }, + "PROJECT_PROFILE": { + "PAGE_TITLE": "{{sectionName}} - 프로젝트 프로필 - {{projectName}}", + "PROJECT_DETAILS": "프로젝트 세부사항", + "PROJECT_NAME": "프로젝트 이름", + "PROJECT_SLUG": "프로젝트 슬러그", + "TAGS": "태그", + "DESCRIPTION": "설명", + "RECRUITING": "이 프로젝트에 다른 사람이 필요합니까?", + "RECRUITING_MESSAGE": "누구를 찾고 계십니까?", + "RECRUITING_PLACEHOLDER": "찾고 있는 프로파일을 정의하십시오.", + "FEEDBACK": "타이가사용자들로부터 피드백을 받으시겠습니까?", + "PUBLIC_PROJECT": "공개된 프로젝트", + "PRIVATE_PROJECT": "비공개 프로젝트", + "PRIVATE_OR_PUBLIC": "공공 프로젝트와 비공개 프로젝트의 차이점은 무엇입니까?", + "DELETE": "프로젝트 삭제하기", + "LOGO_HELP": "이미지는 80x80px 크기로 보여집니다.", + "CHANGE_LOGO": "로고 변경하기", + "ACTION_USE_DEFAULT_LOGO": "기본 이미지 사용", + "MAX_PRIVATE_PROJECTS": "당신에게 적용된 설정에서 허용하는 최대 비공개 프로젝트 수에 도달했습니다.", + "MAX_PRIVATE_PROJECTS_MEMBERS": "비공개 프로젝트의 최대 회원수를 초과하였습니다.", + "MAX_PUBLIC_PROJECTS": "안타깝게도 당신에게 설정된 최대 공공 프로젝트 갯수에 도달하였습니다.", + "MAX_PUBLIC_PROJECTS_MEMBERS": "프로젝트가 공개 프로젝트의 최대 회원 수를 초과했습니다.", + "PROJECT_OWNER": "프로젝트 소유자", + "REQUEST_OWNERSHIP": "소유권 요청", + "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "새 프로젝트의 소유자가 되고 싶습니까?", + "REQUEST_OWNERSHIP_DESC": "현재 프로젝트 소유자 {{name}}에게 이 프로젝트의 소유권을 당신에게 양도하도록 요청합니다.", + "REQUEST_OWNERSHIP_BUTTON": "요청하기", + "REQUEST_OWNERSHIP_SUCCESS": "프로젝트 소유자에게 알립니다.", + "CHANGE_OWNER": "소유자 변경하기", + "CHANGE_OWNER_SUCCESS_TITLE": "당신의 요청이 전송되었습니다!", + "CHANGE_OWNER_SUCCESS_DESC": "프로젝트 소유권 요청이 수락되거나 거부되면 이메일로 알려드립니다." + }, + "REPORTS": { + "TITLE": "보고서", + "SUBTITLE": "프로젝트 데이터를 CSV 형태로 내보낸 다음 여러분만의 보고서를 만들어 보세요.", + "DESCRIPTION": "CSV 파일을 다운로드하거나 생성 된 URL을 복사하여 원하는 텍스트 편집기 또는 스프레드 시트에서 프로젝트 데이터 보고서를 만듭니다. 모든 데이터를 쉽게 시각화하고 분석 할 수 있습니다.", + "HELP": "이걸 스프레드 시트에서 사용하는 방법이 무엇인가요?", + "REGENERATE_TITLE": "URL 변경하기", + "REGENERATE_SUBTITLE": "CSV 데이터 접근 URL을 변경하려고 합니다. 이전 URL은 비활성화 될 것입니다. 변경하시겠습니까?" + }, + "CSV": { + "SECTION_TITLE_EPIC": "에픽 보고서", + "SECTION_TITLE_US": "유저 스토리 보고서", + "SECTION_TITLE_TASK": "태스크 보고서", + "SECTION_TITLE_ISSUE": "이슈 보고서", + "DOWNLOAD": "CSV 다운로드", + "URL_FIELD_PLACEHOLDER": "CSV url을 다시 생성하세요", + "TITLE_REGENERATE_URL": "CSV url 재생성하기", + "ACTION_GENERATE_URL": "URL 생성하기", + "ACTION_REGENERATE": "재생성" + }, + "CUSTOM_FIELDS": { + "TITLE": "사용자 정의 필드", + "SUBTITLE": "유저 스토리, 태스크 그리고 이슈를 위한 사용자 정의 필드를 지정하세요.", + "EPIC_DESCRIPTION": "에픽 사용자 정의 필드", + "EPIC_ADD": "에픽에 사용자 정의 필드 추가", + "US_DESCRIPTION": "유저 스토리의 사용자 정의 필드", + "US_ADD": "유저 스토리에 사용자 정의 필드 추가하기", + "TASK_DESCRIPTION": "태스크의 사용자 정의 필드", + "TASK_ADD": "태스크에 사용자 정의 필드 추가하기", + "ISSUE_DESCRIPTION": "이슈의 사용자 정의 필드", + "ISSUE_ADD": "이슈에 사용자 정의 필드 추가하기", + "FIELD_TYPE_TEXT": "텍스트", + "FIELD_TYPE_RICHTEXT": "서식있는 텍스트", + "FIELD_TYPE_MULTI": "여러 줄", + "FIELD_TYPE_DATE": "날짜", + "FIELD_TYPE_URL": "Url" + }, + "PROJECT_VALUES": { + "PAGE_TITLE": "{{sectionName}} - 프로젝트 값들 - {{projectName}}", + "REPLACEMENT": "이 값을 가진 모든 아이템들의 값을 다음으로 변경합니다.", + "ERROR_DELETE_ALL": "최소한 한 개의 값은 남겨두어야 합니다." + }, + "PROJECT_VALUES_POINTS": { + "TITLE": "포인트", + "SUBTITLE": "유저 스토리의 포인트를 추산하세요.", + "US_TITLE": "유저 스토리 포인트", + "ACTION_ADD": "새 포인트 추가하기" + }, + "PROJECT_VALUES_PRIORITIES": { + "TITLE": "우선순위", + "SUBTITLE": "이슈의 우선순위를 지정하세요.", + "ISSUE_TITLE": "이슈 우선순위", + "ACTION_ADD": "우선순위 추가하기" + }, + "PROJECT_VALUES_SEVERITIES": { + "TITLE": "심각도", + "SUBTITLE": "이슈에 대한 심각도를 지정하세요.", + "ISSUE_TITLE": "이슈 심각도", + "ACTION_ADD": "심각도 추가하기" + }, + "PROJECT_VALUES_STATUS": { + "TITLE": "상태", + "SUBTITLE": "유저 스토리, 태스크 그리고 이슈의 상태를 지정하세요.", + "EPIC_TITLE": "에픽 상태", + "US_TITLE": "유저 스토리 상태", + "TASK_TITLE": "태스크 상태", + "ISSUE_TITLE": "이슈 상태" + }, + "PROJECT_VALUES_TYPES": { + "TITLE": "타입", + "SUBTITLE": "이슈의 종류를 지정하세요.", + "ISSUE_TITLE": "이슈 타입", + "ACTION_ADD": "{{objName}} 새로 추가하기" + }, + "PROJECT_VALUES_TAGS": { + "TITLE": "태그", + "SUBTITLE": "태그를 보고 색을 변경하세요.", + "EMPTY": "태그가 없습니다.", + "EMPTY_SEARCH": "검색 기준에 아무 것도 발견되지 않았습니다.", + "ACTION_ADD": "태그 추가하기", + "NEW_TAG": "새로운 태그", + "MIXING_HELP_TEXT": "병합하기 원하는 태그를 선택하세요.", + "MIXING_MERGE": "태그 병합", + "SELECTED": "선택됨" + }, + "ROLES": { + "PAGE_TITLE": "역할 - {{projectName}}", + "WARNING_NO_ROLE": "주의하세요, 현재 프로젝트에 유저 스토리의 포인트를 산정할 수 있는 역할이 없습니다.", + "HELP_ROLE_ENABLED": "사용하도록 설정하면, 회원들에게 이 역할이 할당되었을 때 유저 스토리의 포인트 값을 예측할 수 있습니다.", + "DISABLE_COMPUTABLE_ALERT_TITLE": "이 역할의 예측 기능을 비활성화 하시겠습니까?", + "DISABLE_COMPUTABLE_ALERT_SUBTITLE": "만약 {{roleName}} 역할에 대한 평가 권한을 비활성화 했다면, 이 역할로 수행한 모든 평가는 삭제될 것입니다.", + "COUNT_MEMBERS": "{{ role.members_count }} 명의 회원이 이 역할을 가지고 있습니다.", + "TITLE_DELETE_ROLE": "역할 삭제하기", + "REPLACEMENT_ROLE": "이 역할의 모든 사용자들은 다음의 역할로 변경됨", + "WARNING_DELETE_ROLE": "조심하세요! 모든 역할 예측이 삭제됩니다.", + "ERROR_DELETE_ALL": "최소한 한 개의 값은 남겨두어야 합니다.", + "EXTERNAL_USER": "외부 사용자" + }, + "THIRD_PARTIES": { + "SECRET_KEY": "비밀 키", + "PAYLOAD_URL": "Payload URL", + "VALID_IPS": "유효한 원본 IP (콤마','로 구분)" + }, + "BITBUCKET": { + "SECTION_NAME": "Bitbucket", + "PAGE_TITLE": "Bitbucket - {{projectName}}", + "INFO_VERIFYING_IP": "Bitbucket 요청은 IP를 이용해서 출처를 확인하는 방법으로 서명되지 않았습니다. 필드가 비어있을 경우, IP 유효성 검증이 되지 않습니다." + }, + "GITLAB": { + "SECTION_NAME": "Gitlab", + "PAGE_TITLE": "Gitlab - {{projectName}}", + "INFO_VERIFYING_IP": "Gitlab 요청은 IP를 이용해서 출처를 확인하는 방법으로 서명되지 않았습니다. 필드가 비어있을 경우, IP 유효성 검증이 되지 않습니다." + }, + "GITHUB": { + "SECTION_NAME": "Github", + "PAGE_TITLE": "Github - {{projectName}}" + }, + "GOGS": { + "SECTION_NAME": "Gogs", + "PAGE_TITLE": "Gogs - {{projectName}}" + }, + "WEBHOOKS": { + "PAGE_TITLE": "웹훅 - {{projectName}}", + "SECTION_NAME": "웹훅", + "SUBTITLE": "웹훅은 댓글, 유저 스토리 등 타이가의 이벤트를 외부 서비스에 알립니다.", + "ADD_NEW": "웹훅 추가하기", + "TYPE_NAME": "서비스 이름을 입력해 주세요", + "TYPE_PAYLOAD_URL": "서비스 주소를 입력하세요", + "TYPE_SERVICE_SECRET": "서비스 시크릿 키를 입력해 주세요", + "SAVE": "웹훅 저장하기", + "CANCEL": "웹훅 취소하기", + "SHOW_HISTORY": "(이력 보기)", + "TEST": "웹훅 테스트하기", + "EDIT": "웹훅 수정하기", + "DELETE": "웹훅 삭제하기", + "REQUEST": "요청하기", + "RESEND_REQUEST": "요청 재전송하기", + "HEADERS": "헤더", + "PAYLOAD": "Payload", + "RESPONSE": "응답하기", + "DATE": "YYYY MMM DD [at] hh:mm:ss", + "ACTION_HIDE_HISTORY": "(이력 숨기기)", + "ACTION_HIDE_HISTORY_TITLE": "상세 이력 숨기기", + "ACTION_SHOW_HISTORY": "(이력 보기)", + "ACTION_SHOW_HISTORY_TITLE": "상세 이력 보기", + "WEBHOOK_NAME": "웹훅 '{{name}}'" + }, + "CUSTOM_ATTRIBUTES": { + "PAGE_TITLE": "{{sectionName}} - 사용자 정의 속성 - {{projectName}}", + "ADD": "사용자 정의 필드 추가하기", + "EDIT": "사용자 정의 필드 수정하기", + "DELETE": "사용자 정의 필드 삭제하기", + "SAVE_TITLE": "사용자 정의 필드 저장하기", + "CANCEL_TITLE": "만들기 취소 하기", + "SET_FIELD_NAME": "사용자 정의 필드의 이름을 설정하세요", + "SET_FIELD_DESCRIPTION": "사용자 정의 필드에 대한 설명을 넣으세요", + "FIELD_TYPE_DEFAULT": "-- 하나를 고르세요 --", + "ACTION_UPDATE": "사용자 정의 필드 업데이트하기", + "ACTION_CANCEL_EDITION": "수정 내역 취소하기" + }, + "MEMBERSHIP": { + "COLUMN_MEMBER": "회원", + "COLUMN_ADMIN": "관리자", + "COLUMN_ROLE": "역할", + "COLUMN_STATUS": "상태", + "STATUS_ACTIVE": "활성상태", + "STATUS_PENDING": "보류 중", + "DELETE_MEMBER": "회원 삭제하기", + "RESEND": "다시 보내기", + "SUCCESS_SEND_INVITATION": "'{{email}}' 님에게 다시 초대장을 보냈습니다.", + "ERROR_SEND_INVITATION": "초대장을 보내지 못했습니다.", + "SUCCESS_DELETE": "{{message}} 를 지웠습니다.", + "ERROR_DELETE": "{{message}} 를 지울 수 없었습니다.", + "DEFAULT_DELETE_MESSAGE": "{{email}} 초대하기" + }, + "DEFAULT_VALUES": { + "LABEL_EPIC_STATUS": "에픽 상태의 기본값", + "LABEL_US_STATUS": "유저 스토리 상태의 기본 값", + "LABEL_POINTS": "포인트의 기본 값", + "LABEL_TASK_STATUS": "태스크 상태의 기본 값", + "LABEL_ISSUE_TYPE": "이슈 종류의 기본 값", + "LABEL_ISSUE_STATUS": "이슈 상태의 기본 값", + "LABEL_PRIORITY": "우선순위의 기본 값", + "LABEL_SEVERITY": "심각도의 기본 값" + }, + "STATUS": { + "PLACEHOLDER_WRITE_STATUS_NAME": "새 상태의 이름을 입력하세요" + }, + "TYPES": { + "PLACEHOLDER_WRITE_NAME": "새 엘리먼트의 이름을 입력하세요" + }, + "US_STATUS": { + "ACTION_ADD_STATUS": "상태 추가하기", + "IS_ARCHIVED_COLUMN": "보관됨", + "IS_CLOSED_COLUMN": "완료함", + "WIP_LIMIT_COLUMN": "동시 진행 제한 갯수", + "PLACEHOLDER_WRITE_NAME": "새 상태의 이름을 입력하세요" + }, + "MENU": { + "TITLE": "관리자", + "PROJECT": "프로젝트", + "ATTRIBUTES": "속성", + "MEMBERS": "회원", + "PERMISSIONS": "권한", + "INTEGRATIONS": "연동", + "PLUGINS": "플러그인" + }, + "SUBMENU_PROJECT_ATTRIBUTES": { + "TITLE": "속성" + }, + "SUBMENU_PROJECT_VALUES": { + "STATUS": "상태", + "POINTS": "포인트", + "PRIORITIES": "우선순위", + "SEVERITIES": "심각도", + "TYPES": "타입", + "CUSTOM_FIELDS": "사용자 정의 필드", + "TAGS": "태그" + }, + "SUBMENU_PROJECT_PROFILE": { + "TITLE": "프로젝트 프로필" + }, + "SUBMENU_ROLES": { + "TITLE": "역할", + "ACTION_NEW_ROLE": "역할 추가하기", + "TITLE_ACTION_NEW_ROLE": "역할 추가하기" + }, + "SUBMENU_THIDPARTIES": { + "TITLE": "서비스" + }, + "PROJECT_TRANSFER": { + "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "새 프로젝트의 소유자가 되고 싶습니까?", + "PRIVATE": "비공개", + "ACCEPTED_PROJECT_OWNERNSHIP": "축하합니다! 새로운 프로젝트의 소유자가 되었습니다.", + "REJECTED_PROJECT_OWNERNSHIP": "네. 이 프로젝트 소유자에게 연락하겠습니다.", + "ACCEPT": "확인", + "REJECT": "거절", + "PROPOSE_OWNERSHIP": "{{owner}}가 자신이 소유한 프로젝트 {{project}}의 새로운 소유자가 될 수 있는지 제안하였습니다.", + "ADD_COMMENT": "프로젝트 소유자에 대한 의견을 추가 하시겠습니까?", + "UNLIMITED_PROJECTS": "제한 없음", + "OWNER_MESSAGE": { + "PRIVATE": "{{maxProjects}}개의 비공개 프로젝트를 소유 할 수 있음을 기억하십시오. 현재 당신은 {{currentProjects}}개의 비공개 프로젝트를 소유하고 있습니다.", + "PUBLIC": "{{maxProjects}}개의 공공 프로젝트를 소유 할 수 있음을 기억하십시오. 현재 당신은 {{currentProjects}}개의 공공 프로젝트를 소유하고 있습니다." + }, + "CANT_BE_OWNED": "현재 이 유형의 프로젝트 소유자가 될 수 없습니다. 이 프로젝트의 소유자가되고 싶다면 관리자에게 문의하여 프로젝트 소유권을 사용하도록 계정 설정을 변경하십시오.", + "CHANGE_MY_PLAN": "내 계획 변경하기" + } + }, + "USER": { + "PROFILE": { + "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", + "EDIT": "프로필 수정하기", + "FOLLOW": "팔로우", + "CLOSED_US": "완료한 유저 스토리", + "PROJECTS": "프로젝트", + "PROJECTS_EMPTY": "{{username}} 님은 아직 프로젝트가 없습니다", + "CONTACTS": "연락처", + "CONTACTS_EMPTY": "{{username}} 님은 연락처가 없습니다", + "CURRENT_USER_CONTACTS_EMPTY": "연락처가 없습니다", + "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "타이가에서 일하는 사람들은 자동으로 당신의 연락처가 됩니다.", + "REPORT": "부당행위 보고서", + "TABS": { + "ACTIVITY_TAB": "타임라인", + "ACTIVITY_TAB_TITLE": "이 사용자의 전체 액티비티 보기", + "PROJECTS_TAB": "프로젝트", + "PROJECTS_TAB_TITLE": "이 사용자가 참여하는 모든 프로젝트 목록", + "LIKES_TAB": "좋아요", + "LIKES_TAB_TITLE": "이 사용자의 모든 좋아요 목록", + "VOTES_TAB": "투표", + "VOTES_TAB_TITLE": "이 사용자가 투표한 모든 투표 목록 보기", + "WATCHED_TAB": "구독", + "WATCHED_TAB_TITLE": "이 사용자가 구독중인 모든 목록 보기", + "CONTACTS_TAB": "연락처", + "CONTACTS_TAB_TITLE": "이 사용자가 만든 모든 연락처 목록" + } + }, + "PROFILE_SIDEBAR": { + "TITLE": "프로필", + "DESCRIPTION": "당신이 하는 모든 것, 그리고 당신이 어떤 일을 하고 있는 지 사람들이 몽땅 볼 수 있어요. 당신을 알릴 수 있는 멋진 소개를 추가하세요.", + "ADD_INFO": "이력 수정하기" + }, + "PROFILE_FAVS": { + "FILTER_INPUT_PLACEHOLDER": "아무거나 입력하세요...", + "FILTER_TYPE_ALL": "전체", + "FILTER_TYPE_ALL_TITLE": "모두 보기", + "FILTER_TYPE_PROJECTS": "프로젝트", + "FILTER_TYPE_PROJECT_TITLES": "프로젝트만 보기", + "FILTER_TYPE_EPICS": "에픽", + "FILTER_TYPE_EPIC_TITLES": "에픽만 보기", + "FILTER_TYPE_USER_STORIES": "스토리", + "FILTER_TYPE_USER_STORIES_TITLES": "유저 스토리만 보기", + "FILTER_TYPE_TASKS": "태스크", + "FILTER_TYPE_TASK_TITLES": "태스크만 보기", + "FILTER_TYPE_ISSUES": "이슈", + "FILTER_TYPE_ISSUES_TITLE": "이슈만 보기", + "EMPTY_TITLE": "여기엔 보여 줄 수 있는게 하나도 없네요." + } + }, + "PROJECT": { + "PAGE_TITLE": "{{projectName}}", + "WELCOME": "환영합니다", + "SECTION_PROJECTS": "프로젝트", + "HELP": "자주 사용하는 프로젝트들을 상위로 올려보세요.
    상위 10개 프로젝트는 내비게이션 바의 프로젝트 목록에 나타납니다.", + "PRIVATE": "비공개 프로젝트", + "LOOKING_FOR_PEOPLE": "이 프로젝트는 사람을 찾고 있습니다.", + "FANS_COUNTER_TITLE": "{total, plural, one{one fan} other{# 명의 좋아요}}", + "WATCHERS_COUNTER_TITLE": "{total, plural, one{one watcher} other{# 명이 구독중}}", + "MEMBERS_COUNTER_TITLE": "{total, plural, one{one member} other{# 명의 회원}}", + "BLOCKED_PROJECT": { + "BLOCKED": "차단된 프로젝트", + "THIS_PROJECT_IS_BLOCKED": "이 프로젝트는 임시로 차단되었습니다.", + "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "프로젝트의 차단을 해제하려면 관리자에게 문의하십시오." + }, + "STATS": { + "PROJECT": "프로젝트
    포인트", + "DEFINED": "정의된
    포인트", + "ASSIGNED": "할당받은
    포인트", + "CLOSED": "완료한
    포인트" + }, + "SECTION": { + "SEARCH": "검색", + "TIMELINE": "타임라인", + "BACKLOG": "백로그", + "KANBAN": "칸반", + "ISSUES": "이슈", + "WIKI": "위키", + "TEAM": "팀", + "MEETUP": "미팅", + "ADMIN": "관리자" + }, + "NAVIGATION": { + "SECTION_TITLE": "프로젝트", + "PLACEHOLDER_SEARCH": "검색하기", + "ACTION_CREATE_PROJECT": "프로젝트 생성하기", + "ACTION_IMPORT_PROJECT": "프로젝트 불러오기", + "MANAGE_PROJECTS": "프로젝트 관리하기", + "TITLE_CREATE_PROJECT": "프로젝트 생성하기", + "TITLE_IMPORT_PROJECT": "프로젝트 불러오기", + "TITLE_PRVIOUS_PROJECT": "이전 프로젝트 보기", + "TITLE_NEXT_PROJECT": "다음 프로젝트 보기", + "HELP_TITLE": "타이가 고객 지원 페이지", + "HELP": "도움말", + "HOMEPAGE": "홈페이지", + "FEEDBACK_TITLE": "피드백 보내기", + "FEEDBACK": "피드백", + "NOTIFICATIONS_TITLE": "알림 설정 수정", + "NOTIFICATIONS": "알림", + "ORGANIZATIONS_TITLE": "소속 기관 수정", + "ORGANIZATIONS": "조직 수정", + "SETTINGS_TITLE": "설정 수정", + "SETTINGS": "설정", + "VIEW_PROFILE_TITLE": "프로필 보기", + "VIEW_PROFILE": "프로필 보기", + "EDIT_PROFILE_TITLE": "프로필 수정하기", + "EDIT_PROFILE": "프로필 수정하기", + "CHANGE_PASSWORD_TITLE": "비밀번호 변경하기", + "CHANGE_PASSWORD": "비밀번호 변경하기", + "DASHBOARD_TITLE": "대시보드", + "DISCOVER_TITLE": "트렌드 프로젝트 찾기", + "NEW_ITEM": "신규", + "DISCOVER": "찾기", + "ACTION_REORDER": "드래그&드롭으로 순서 바꾸기" + }, + "IMPORT": { + "TITLE": "프로젝트 불러오기", + "UPLOADING_FILE": "덤프 파일 업로드 중", + "DESCRIPTION": "이 과정은 시간이 걸릴 수 있습니다. 이 창을 닫지 마세요.", + "ASYNC_IN_PROGRESS_TITLE": "움파룸파가 프로젝트를 불러오고 있습니다.", + "ASYNC_IN_PROGRESS_MESSAGE": "이 작업은 몇 분 정도 걸립니다.
    작업이 끝나면 이메일로 알려드릴게요.", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 중 {{uploadedSize}} 만큼 업로드했습니다", + "ERROR": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요.", + "ERROR_TOO_MANY_REQUEST": "죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?", + "ERROR_MESSAGE": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요. {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", + "SYNC_SUCCESS": "프로젝트를 불러오는 데 성공했습니다.", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC": "가져오기하려는 프로젝트에 {{members}} 명의 회원이 있습니다. 안타깝게도, 현재 당신의 설정에서는 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다. 최대 수용 가능 회원 수를 늘리고 싶다면 관리자에게 문의하십시오.", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "안타깝게도, 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다.", + "DESC": "가져오기하려는 프로젝트가 비공개 되어있습니다. 안타깝게도, 현재 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "안타깝게도, 당신의 현재 설정에는 추가 공공 프로젝트가 허용되어있지 않습니다.", + "DESC": "가져오기 하려는 프로젝트는 공공 프로젝트입니다. 안타깝게도, 당신의 현재 섲렁에는 추가 공공 프로젝트가 허용되어있지 않습니다." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "현재 당신의 설정으로는 비공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다." + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "현재 당신의 설정으로는 공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "안타깝게도 현재 당신의 설정으로는 추가 비공개 프로젝트가 허용되지 않았거나 비공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.", + "DESC": "가져오기 하려는 프로젝트가 비공개이며 {{members}} 명의 회원이 있습니다." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "안타깝게도 현재 당신의 설정으로는 추가 공개 프로젝트가 허용되지 않았거나 공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.", + "DESC": "가져오기 하려는 프로젝트는 공개되어있으며 {{members}} 이상의 회원이 존재합니다." + } + } + }, + "LIKE_BUTTON": { + "LIKE": "좋아요", + "LIKED": "좋아함", + "UNLIKE": "좋아요 취소", + "BUTTON_TITLE": "이 프로젝트를 좋아요 또는 좋아요 취소", + "COUNTER_TITLE": "{total, plural, one{one fan} other{# 명의 좋아요}}" + }, + "WATCH_BUTTON": { + "BUTTON_TITLE": "이 프로젝트를 구독하고 알림 정책 설정하기", + "WATCH": "구독", + "WATCHING": "구독중", + "COUNTER_TITLE": "{total, plural, one{one watcher} other{# 명이 구독중}}", + "OPTIONS": { + "NOTIFY_ALL": "모든 공지 받기", + "NOTIFY_ALL_TITLE": "이 프로젝트에 대한 모든 공지 받기", + "NOTIFY_INVOLVED": "내가 관련된 경우에만", + "NOTIFY_INVOLVED_TITLE": "연관된 경우에만 공지 받기", + "UNWATCH": "구독 취소", + "UNWATCH_TITLE": "이 프로젝트의 구독 취소" + } + }, + "CONTACT_BUTTON": { + "CONTACT_TITLE": "프로젝트 팀 문의", + "CONTACT_BUTTON": "프로젝트 문의" + } + }, + "LIGHTBOX": { + "DELETE_ACCOUNT": { + "SECTION_NAME": "타이가 계정 삭제하기", + "CONFIRM": "타이가 계정을 정말로 삭제하시겠어요?", + "NEWSLETTER_LABEL_TEXT": "뉴스레터를 더이상 받지 않고 싶습니다.", + "CANCEL": "설정으로 돌아가기", + "ACCEPT": "계정 삭제", + "BLOCK_PROJECT": "계정을 삭제한 후에는 당신이 소유하고 있는 모든 프로젝트가 차단됩니다. 이걸 원치 않으시면, 계정을 삭제하기 전에 프로젝트 소유권을 다른 회원에게 넘겨주세요.", + "SUBTITLE": "떠나서 아쉽네요. 다시 올때까지 기다릴게요! :(" + }, + "DELETE_PROJECT": { + "TITLE": "프로젝트 삭제하기", + "QUESTION": "프로젝트를 정말 삭제하시려고요?", + "SUBTITLE": "모든 프로젝트 데이터(유저 스토리, 태스크, 이슈, 스프린트, 위키)가 사라질 겁니다. :-(", + "CONFIRM": "네. 진심으로 원해요." + }, + "ASSIGNED_TO": { + "SELECT": "다음 사람에게 할당", + "SEARCH": "사용자 검색" + }, + "ADD_MEMBER": { + "TITLE": "새 회원", + "HELP_TEXT": "타이가에 이미 등록한 사용자라면 자동으로 프로젝트에 추가될 겁니다. 등록하지 않은 사용자라면 초대장이 발송됩니다." + }, + "CREATE_ISSUE": { + "TITLE": "이슈 추가하기" + }, + "FEEDBACK": { + "TITLE": "말해주세요...", + "COMMENT": "... 버그, 몇 가지 제안, 멋진 것 ... 아니면 타이가와의 최악의 악몽", + "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": "이메일을 입력하세요", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "이 프로젝트에 허용 된 최대 회원 수인 {{maxMembers}} 명에 도달하려합니다. 최대 회원 수를 늘리려면 관리자에게 문의하십시오.", + "LIMIT_USERS_WARNING_MESSAGE": "이 프로젝트에 허용 된 최대 회원 수 인 {{maxMembers}} 명에 도달하려고 합니다." + }, + "LEAVE_PROJECT_WARNING": { + "TITLE": "안타깝게도 이 프로젝트는 소유자 없이 남아있을 수 없습니다.", + "CURRENT_USER_OWNER": { + "DESC": "현재 이 프로젝트의 소유자입니다. 나가기전에 소유권을 다른 사람에게 양도하시기 바랍니다.", + "BUTTON": "프로젝트 소유자 변경하기" + }, + "OTHER_USER_OWNER": { + "DESC": "안타깝게도 현재 프로젝트 소유자인 회원을 삭제할 수 없습니다. 먼저 새 프로젝트 소유자를 지정하십시오.", + "BUTTON": "프로젝트 소유자 변경 요청" + } + }, + "CHANGE_OWNER": { + "TITLE": "누구를 새로운 프로젝트 소유자로 삼고 싶습니까?", + "ADD_COMMENT": "댓글 추가", + "BUTTON": "이 프로젝트 회원에게 새 프로젝트 소유자가 되도록 문의하십시오." + }, + "CONTACT_PROJECT": { + "TITLE": "이메일 보내기", + "WARNING": "프로젝트 관리자로부터 이메일을 받았습니다.", + "PLACEHOLDER": "메시지 쓰기", + "SEND": "보내기" + } + }, + "EPIC": { + "PAGE_TITLE": "{{epicSubject}} - 에픽 {{epicRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "상태: {{epicStatus }}. 설명: {{epicDescription}}", + "SECTION_NAME": "에픽", + "TITLE_LIGHTBOX_UNLINK_RELATED_USERSTORY": "유저 스토리 연결 해제", + "MSG_LIGHTBOX_UNLINK_RELATED_USERSTORY": "유저 스토리 '{{subject}}' 와 관련된 링크가 삭제됩니다. ", + "ERROR_UNLINK_RELATED_USERSTORY": "링크를 해제할 수 없었습니다: {{errorMessage}}", + "CREATE_RELATED_USERSTORIES": "다음으로 관계 만들기", + "NEW_USERSTORY": "새 유저 스토리", + "EXISTING_USERSTORY": "존재하는 유저 스토리", + "CHOOSE_PROJECT_FOR_CREATION": "프로젝트가 무엇인가요?", + "SUBJECT": "주제", + "SUBJECT_BULK_MODE": "제목 (여러개 생성하기)", + "CHOOSE_PROJECT_FROM": "프로젝트가 무엇인가요?", + "CHOOSE_USERSTORY": "유저스토리가 무엇인가요?", + "NO_USERSTORIES": "이 프로젝트에는 아직 유저 스토리가 없습니다. 다른 프로젝트를 선택하십시오.", + "FILTER_USERSTORIES": "유저 스토리 필터", + "LIGHTBOX_TITLE_BLOKING_EPIC": "에픽 차단", + "ACTION_DELETE": "에픽 삭제" + }, + "US": { + "PAGE_TITLE": "{{userStorySubject}} - 유저 스토리 {{userStoryRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "상태: {{userStoryStatus }}. 완료 {{userStoryProgressPercentage}}% ({{userStoryTotalTasks}} 중 {{userStoryClosedTasks}} 태스크 완료). 포인트: {{userStoryPoints}}. 상세사항: {{userStoryDescription}}", + "SECTION_NAME": "유저 스토리", + "LINK_TASKBOARD": "태스크보드", + "TITLE_LINK_TASKBOARD": "태스크보드로 가기", + "TOTAL_POINTS": "전체 포인트", + "ADD": "유저 스토리 추가하기", + "ADD_BULK": "유저 스토리 여러개 생성하기", + "PROMOTED": "이 유저 스토리는 이슈에서 만들어졌음", + "TITLE_LINK_GO_TO_ISSUE": "이슈로 가기", + "EXTERNAL_REFERENCE": "이 유저 스토리가 만들어 진 곳 ", + "GO_TO_EXTERNAL_REFERENCE": "원본으로 가기", + "BLOCKED": "이 유저 스토리는 차단되었습니다.", + "TITLE_DELETE_ACTION": "유저 스토리 삭제하기", + "LIGHTBOX_TITLE_BLOKING_US": "블로킹 유저 스토리", + "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} 태스크가 완료됨", + "ASSIGN": "유저 스토리 할당하기", + "NOT_ESTIMATED": "추산되지 않음", + "TOTAL_US_POINTS": "전체 유저 스토리 포인트", + "TRIBE": { + "PUBLISH": "Tiaga Tribe의 Gig으로 배포하기", + "PUBLISH_INFO": "더 많은 정보", + "PUBLISH_TITLE": "Taiga Tribe로 배포하기에 대한 더 많은 정보", + "PUBLISHED_AS_GIG": "스토리가 Taiga Tribe의 Gig으로 배포되었습니다.", + "EDIT_LINK": "링크 수정", + "CLOSE": "닫기", + "SYNCHRONIZE_LINK": "Taiga Tribe와 동기화", + "PUBLISH_MORE_INFO_TITLE": "이 태스크에 누군가가 필요합니까?", + "PUBLISH_MORE_INFO_TEXT": "

    만약 당신이 어떤 일에 도움이 필요하면 간단하게 Taiga Tribe 의 Gigs를 만들어 전세계의 도움을 받을 수 있습니다. 우리는 당신이 이 위대한 커뮤니티의 gig을 즐기고 제어하거나 관리하면서 기여 할 수 있기를 열망합니다.

    Taiga Tribe 는 타이가의 형제로 태어났습니다. 두 플랫폼은 별개로 살아갈 수 있지만, 우리는 이들을 결합 하였을 때 더 큰 힘을 낼 수 있다고 믿습니다. 그리고 멋지게 통합되어 움직이는 것을 확인하였습니다.

    " + }, + "FIELDS": { + "TEAM_REQUIREMENT": "팀 요구 사항", + "CLIENT_REQUIREMENT": "고객 요구 사항", + "FINISH_DATE": "마감일" + } + }, + "COMMENTS": { + "DELETED_INFO": "{{user}} 에 의해 댓글이 지워짐.", + "TITLE": "댓글", + "COMMENTS_COUNT": "{{comments}} 댓글", + "ORDER": "순서", + "OLDER_FIRST": "오랜된 순으로", + "RECENT_FIRST": "최신 순으로", + "COMMENT": "댓글", + "EDIT_COMMENT": "댓글 수정", + "EDITED_COMMENT": "수정됨:", + "SHOW_HISTORY": "역사 보기", + "TYPE_NEW_COMMENT": "댓글을 입력하세요", + "SHOW_DELETED": "삭제된 댓글 보기", + "HIDE_DELETED": "삭제된 댓글 가리기", + "DELETE": "댓글 삭제", + "RESTORE": "댓글 되살리기", + "HISTORY": { + "TITLE": "활동 내역" + } + }, + "ACTIVITY": { + "SHOW_ACTIVITY": "활동 내역 보기", + "DATETIME": "YYYY MMM DD HH:mm", + "SHOW_MORE": "+ 이전 항목 보기 ({{showMore}} 더 보기)", + "TITLE": "활동 내역", + "ACTIVITIES_COUNT": "{{activities}} 활동", + "REMOVED": "삭제됨", + "ADDED": "추가됨", + "TAGS_ADDED": "태그 추가됨:", + "TAGS_REMOVED": "태그 삭제됨:", + "US_POINTS": "{{role}} 포인트", + "NEW_ATTACHMENT": "새로운 첨부파일:", + "DELETED_ATTACHMENT": "첨부파일 삭제하기", + "UPDATED_ATTACHMENT": "첨부 파일이 업데이트됨 ({{filename}}):", + "CREATED_CUSTOM_ATTRIBUTE": "사용자 정의 속성 만들기", + "UPDATED_CUSTOM_ATTRIBUTE": "사용자 정의 속성 업데이트하기", + "SIZE_CHANGE": "Made {size, plural, one{one change} other{# 개의 변경}}", + "BECAME_DEPRECATED": "지원하지 않도록 되었습니다.", + "BECAME_UNDEPRECATED": "다시 지원하도록 되었습니다.", + "TEAM_REQUIREMENT": "팀 요구 사항", + "CLIENT_REQUIREMENT": "고객 요구 사항", + "BLOCKED": "차단됨", + "VALUES": { + "YES": "예", + "NO": "아니오", + "EMPTY": "비었음", + "UNASSIGNED": "할당되지 않음" + }, + "FIELDS": { + "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": "지원안함", + "IS_NOT_DEPRECATED": "아직 지원중입니다.", + "ORDER": "순서", + "BACKLOG_ORDER": "백로그 순서", + "SPRINT_ORDER": "스프린트 순서", + "KANBAN_ORDER": "칸반 순서", + "TASKBOARD_ORDER": "태스크보드 순서", + "US_ORDER": "유저 스토리 순서", + "COLOR": "색" + } + }, + "BACKLOG": { + "PAGE_TITLE": "백로그 - {{projectName}}", + "PAGE_DESCRIPTION": "프로젝트의 유저 스토리와 스프린트를 보여주는 백 패널 {{projectName}}: {{projectDescription}}", + "SECTION_NAME": "백로그", + "CUSTOMIZE_GRAPH": "백로그 그래프 사용자 정의하기", + "CUSTOMIZE_GRAPH_TEXT": "프로젝트의 진화를 돕는 좋은 그래프를 얻으려면, 당신은 포인트와 스프린트를 설정해야합니다.", + "CUSTOMIZE_GRAPH_ADMIN": "관리자", + "CUSTOMIZE_GRAPH_TITLE": "관리자 메뉴에서 포인트와 스프린트를 설정하세요.", + "MOVE_US_TO_CURRENT_SPRINT": "현재 스프린트로 옮기기", + "MOVE_US_TO_LATEST_SPRINT": "가장 최근 스프린트로 옮기기", + "SHOW_FILTERS": "필터 보기", + "SHOW_TAGS": "태그 보기", + "EMPTY": "백로그가 비었습니다!", + "CREATE_NEW_US": "유저 스토리 생성하기", + "CREATE_NEW_US_EMPTY_HELP": "새로운 유저 스토리를 만들어 보고 싶죠?", + "EXCESS_OF_POINTS": "포인트 초과", + "PENDING_POINTS": "보류 중인 포인트", + "CLOSED_POINTS": "완료", + "COMPACT_SPRINT": "스프린트 접기", + "GO_TO_TASKBOARD": "{{::name}}의 태스크보드로 이동하기", + "EDIT_SPRINT": "스프린트 수정하기", + "TOTAL_POINTS": "전체", + "STATUS_NAME": "상태 이름", + "SORTABLE_FILTER_ERROR": "필터 창이 열려있을 때에는 백로그를 옮길 수 없습니다.", + "DOOMLINE": "프로젝트 범위 [둠 라인]", + "CHART": { + "XAXIS_LABEL": "스프린트", + "YAXIS_LABEL": "포인트", + "OPTIMAL": "\"{{sprintName}}\" 스프린트에서 최적의 대기 포인트는 {{value}} 로 되어야합니다.", + "REAL": "\"{{sprintName}}\" 스프린트의 실제 대기포인트는 {{value}} 입니다.", + "INCREMENT_TEAM": "팀 요구 사항에 따라 \"{{sprintName}}\" 스프린트의 포인트가 {{value}}로 증가했습니다.", + "INCREMENT_CLIENT": "고객 요구 사항에 따라 \"{{sprintName}}\" 스프린트의 포인트가 {{value}}로 증가했습니다." + }, + "TAGS": { + "TOGGLE": "태그 보여짐 토글", + "SHOW": "태그 보기", + "HIDE": "태그 숨기기" + }, + "FORECASTING": { + "TITLE": "속도 예측", + "BACKLOG": "백로그 표시", + "NEW_SPRINT": "당신의 속도를 기반으로한 다음 스프린트의 후보 유저 스토리 입니다. 클릭하여 새로운 스프린트를 만드십시오.", + "CURRENT_SPRINT": "당신의 속도를 기반으로한 다음 스프린트의 후보 유저 스토리 입니다. 클릭하여 현재 스프린트에 추가하십시오." + }, + "TABLE": { + "COLUMN_US": "유저 스토리", + "TITLE_COLUMN_POINTS": "역할 별로 보기" + }, + "SPRINT_SUMMARY": { + "TOTAL_POINTS": "종합
    포인트", + "COMPLETED_POINTS": "완료한
    포인트", + "OPEN_TASKS": "태스크
    열림", + "CLOSED_TASKS": "완료한
    태스크", + "IOCAINE_DOSES": "아이오케인
    복용", + "SHOW_STATISTICS_TITLE": "지표 보기", + "TOGGLE_BAKLOG_GRAPH": "번다운 그래프 보이기/숨기기", + "POINTS_PER_ROLE": "역할별 포인트" + }, + "SUMMARY": { + "PROJECT_POINTS": "프로젝트
    포인트", + "DEFINED_POINTS": "정의된
    포인트", + "CLOSED_POINTS": "완료한
    포인트", + "POINTS_PER_SPRINT": "포인트 /
    스프린트" + }, + "FILTERS": { + "TOGGLE": "필터 보여짐 토글", + "TITLE": "필터", + "REMOVE": "필터 삭제하기", + "HIDE": "필터 숨기기", + "SHOW": "필터 보기" + }, + "SPRINTS": { + "TITLE": "스프린트", + "DATE": "YYYY MMM DD", + "LINK_TASKBOARD": "스프린트 태스크보드", + "TITLE_LINK_TASKBOARD": "\"{{name}}\" 태스크보드로 가기", + "NUMBER_SPRINTS": "
    스프린트", + "EMPTY": "스프린트가 아직 없습니다.", + "WARNING_EMPTY_SPRINT_ANONYMOUS": "이 스프린트는 유저 스토리가 없습니다.", + "WARNING_EMPTY_SPRINT": "새 스프린트를 추가하려면 백로그에서 스토리를 끌어 놓으세요", + "TITLE_ACTION_NEW_SPRINT": "새로운 스프린트 추가", + "TEXT_ACTION_NEW_SPRINT": "프로젝트에 새로운 스프린트를 만들어 보고 싶죠?", + "ACTION_SHOW_CLOSED_SPRINTS": "완료한 스프린트 보기", + "ACTION_HIDE_CLOSED_SPRINTS": "완료한 스프린트 숨기기" + } + }, + "ERROR": { + "TEXT1": "움파룸파가 무언가를 작업하고 있습니다.", + "NOT_FOUND": "찾지 못함", + "NOT_FOUND_TEXT": "404 에러: 당신이 접속한 페이지는 더 이상 존재하지 않습니다. 타이가홈페이지로 돌아가서 당신이 찾고 있는 페이지를 찾아보세요.", + "PERMISSION_DENIED": "권한이 없습니다", + "PERMISSION_DENIED_TEXT": "이 페이지를 볼 수 있는 권한이 없습니다.", + "VERSION_ERROR": "타이가 내부의 누군가가 이전에 이를 변경했으며 우리 움파룸파는 변경 사항을 적용 할 수 없습니다. 다시 로드하고 변경 사항을 다시 적용하십시오. (지금의 변경사항들은 손실 될 것입니다)." + }, + "TASKBOARD": { + "PAGE_TITLE": "{{sprintName}} - 스프린트 태스크보드 - {{projectName}}", + "PAGE_DESCRIPTION": "{{projectName}}의 스프린트 {{sprintName}} ({{startDate}}에서 {{endDate}}까지). {{completedPercentage}}% 완료됨 ({{completedPoints}} 중 {{totalPoints}}). {{openTasks}}는 {{totalTasks}}의 작업을 열었습니다.", + "SECTION_NAME": "태스크보드", + "TITLE_ACTION_ADD": "태스크 추가하기", + "TITLE_ACTION_ADD_BULK": "태스트 여러개 생성하기", + "TITLE_ACTION_ASSIGN": "태스크 할당하기", + "TITLE_ACTION_EDIT": "태스크 수정하기", + "PLACEHOLDER_CARD_TITLE": "이것은 태스크가 될 수 있습니다.", + "PLACEHOLDER_CARD_TEXT": "스토리를 여러 태스크로 나누고 개별적으로 추적하세요.", + "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": "일", + "YAXIS_LABEL": "포인트", + "OPTIMAL": "{{formattedDate}}에 대한 최적의 일일 대기 포인트는 {{roundedValue}}이어야 합니다.", + "REAL": "{{formattedDate}}의 실제 대기 포인트는 {{roundedValue}} 입니다.", + "DATE": "YYYY MMMM DD" + } + }, + "TASK": { + "PAGE_TITLE": "{{taskSubject}} - 태스크 {{taskRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "상태: {{taskStatus }}. 세부사항: {{taskDescription}}", + "SECTION_NAME": "태스크", + "LINK_TASKBOARD": "태스크보드", + "TITLE_LINK_TASKBOARD": "태스크보드로 가기", + "PLACEHOLDER_SUBJECT": "새 태스크의 이름을 입력하세요", + "TITLE_SELECT_STATUS": "상태 이름", + "OWNER_US": "이 태스크는 다음에 속합니다.", + "TITLE_LINK_GO_OWNER": "유저 스토리로 가기", + "ORIGIN_US": "이 태스크가 만들어 진 곳", + "TITLE_LINK_GO_ORIGIN": "유저 스토리로 가기", + "BLOCKED": "이 태스크는 차단되었습니다.", + "TITLE_DELETE_ACTION": "태스크 삭제하기", + "LIGHTBOX_TITLE_BLOKING_TASK": "블로킹 태스크", + "FIELDS": { + "MILESTONE": "스프린트", + "USER_STORY": "유저 스토리", + "IS_IOCAINE": "독약인가요?" + }, + "ACTION_IOCAINE": "독약", + "TITLE_ACTION_IOCAINE": "이 태스크에 대해 조금 압박감을 느끼나요? 이 태스크를 수정할 때 아이오케인을 클릭해 다른 사람들에게 알리세요. 조금씩 이 독에 맞서면 이 (허구의)치명적인 독에 면역이 될 수 있습니다. 때로는 추가 도전 과제를 취함으로써 당신이 하는 일을 더 잘 할 수 있는 것 처럼 말이죠!" + }, + "NOTIFICATION": { + "OK": "모든게 좋네요", + "WARNING": "음? 뭔가 문제가 있는데...", + "WARNING_TEXT": "변경사항이 저장되지 않아서 움파룸파는 슬퍼요.", + "SAVED": "움파룸파가 모든 사항을 저장했습니다.", + "CLOSE": "알림 닫기", + "MAIL": "메일로 알림", + "ASK_DELETE": "정말 삭제하실 건가요?" + }, + "CANCEL_ACCOUNT": { + "TITLE": "계정 취소 하기", + "SUBTITLE": "당신이 타이가 떠난다니 아쉽네요. 부디 좋은 기억만 남기를 바랍니다 :)", + "PLACEHOLDER_INPUT_TOKEN": "계정 토큰 삭제", + "ACTION_LEAVING": "네, 나갈래요!", + "SUCCESS": "움파룸파가 당신 계정을 지웠습니다" + }, + "CHANGE_EMAIL_FORM": { + "TITLE": "이메일 변경하기", + "SUBTITLE": "한번 더 클릭하시면 이메일 정보가 업데이트 됩니다.", + "PLACEHOLDER_INPUT_TOKEN": "이메일 토큰 변경", + "ACTION_CHANGE_EMAIL": "이메일 변경하기", + "SUCCESS": "움파룸파가 당신의 이메일을 업데이트 하였습니다." + }, + "ISSUES": { + "PAGE_TITLE": "이슈 - {{projectName}}", + "PAGE_DESCRIPTION": "프로젝트 {{projectName}}: {{projectDescription}}의 이슈 목록 패널", + "LIST_SECTION_NAME": "이슈", + "SECTION_NAME": "이슈", + "ACTION_NEW_ISSUE": "이슈 추가하기", + "ACTION_PROMOTE_TO_US": "유저 스토리에 등록하기", + "PROMOTED": "이 이슈가 유저 스토리에 등록되었습니다.", + "EXTERNAL_REFERENCE": "이 이슈가 만들어 진 곳은 ", + "GO_TO_EXTERNAL_REFERENCE": "원본으로 가기", + "BLOCKED": "이 이슈는 차단되었습니다.", + "ACTION_DELETE": "이슈 삭제하기", + "LIGHTBOX_TITLE_BLOKING_ISSUE": "걸림돌이 되는 이슈", + "FIELDS": { + "PRIORITY": "우선순위", + "SEVERITY": "심각도", + "TYPE": "타입" + }, + "CONFIRM_PROMOTE": { + "TITLE": "이 이슈를 유저 스토리에 등록하기", + "MESSAGE": "이 이슈에서 새 유저 스토리를 생성하시겠어요?" + }, + "TABLE": { + "COLUMNS": { + "TYPE": "타입", + "SEVERITY": "심각도", + "PRIORITY": "우선순위", + "SUBJECT": "주제", + "VOTES": "투표", + "STATUS": "상태", + "CREATED": "생성됨", + "ASSIGNED_TO": "할당됨" + }, + "TITLE_ACTION_CHANGE_STATUS": "상태 변경하기", + "TITLE_ACTION_ASSIGNED_TO": "할당됨", + "BLOCKED": "차단됨", + "EMPTY": { + "TITLE": "보고할 이슈가 없습니다. :-)", + "SUBTITLE": "이슈를 찾았나요?" + } + } + }, + "ISSUE": { + "PAGE_TITLE": "{{issueSubject}} - 이슈 {{issueRef}} - {{projectName}}", + "PAGE_DESCRIPTION": "상태: {{issueStatus }}. 종류: {{issueType}}, 우선순위: {{issuePriority}}. 심각도: {{issueSeverity}}. 설명: {{issueDescription}}" + }, + "KANBAN": { + "PAGE_TITLE": "칸반 - {{projectName}}", + "PAGE_DESCRIPTION": "프로젝트 {{projectName}}: {{projectDescription}}의 유저 스토리를 보여주는 칸반 패널", + "SECTION_NAME": "칸반", + "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": "드래그&드롭으로 되돌리기", + "PLACEHOLDER_CARD_TITLE": "당신의 유저 스토리들 입니다.", + "PLACEHOLDER_CARD_TEXT": "스토리에는 요구 사항을 구분하는 하위 태스크가 있을 수도 있습니다." + }, + "SEARCH": { + "PAGE_TITLE": "검색 - {{projectName}}", + "PAGE_DESCRIPTION": "프로젝트 내에서 유저 스토리, 이슈, 태스크 또는 위키 페이지를 포함한 모든 검색 {{projectName}}: {{projectDescription}}", + "FILTER_EPICS": "에픽", + "FILTER_USER_STORIES": "유저 스토리", + "FILTER_ISSUES": "이슈", + "FILTER_TASKS": "태스크", + "FILTER_WIKI": "위키 페이지", + "PLACEHOLDER_SEARCH": "검색하기", + "TITLE_ACTION_SEARCH": "검색하기", + "EMPTY_TITLE": "검색 조건에 부합하는 결과가 하나도 없네요.", + "EMPTY_DESCRIPTION": "위의 탭 중 하나를 사용하거나 다시 검색하십시오." + }, + "TEAM": { + "PAGE_TITLE": "팀 - {{projectName}}", + "PAGE_DESCRIPTION": "프로젝트의 모든 회원들을 보여주기 위한 팀 패널 {{projectName}}: {{projectDescription}}", + "SECTION_NAME": "팀", + "APP_TITLE": "팀 - {{projectName}}", + "PLACEHOLDER_INPUT_SEARCH": "전체 이름 검색하기", + "COLUMN_MR_WOLF": "울프씨", + "EXPLANATION_COLUMN_MR_WOLF": " 완료한 이슈", + "COLUMN_IOCAINE": "아이오케인 중독자", + "EXPLANATION_COLUMN_IOCAINE": "복용한 아이오케인 양", + "COLUMN_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": "프로젝트 나가기" + }, + "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": "내가 관련된 경우에만", + "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": "타이가 계정 삭제하기", + "CHANGE_EMAIL_SUCCESS": "이메일 보관함을 확인하세요!
    새 주소를 설정할 수 있는 방법을
    이메일로 알려드렸습니다.", + "CHANGE_PHOTO": "사진 변경하기", + "FIELD": { + "USERNAME": "아이디", + "EMAIL": "이메일", + "FULL_NAME": "전체 이름", + "PLACEHOLDER_FULL_NAME": "이름 전체를 적어 주세요(예. 조찬제)", + "BIO": "소개 (최대 210자)", + "PLACEHOLDER_BIO": "당신에 대해서 알려 주세요.", + "LANGUAGE": "언어", + "LANGUAGE_DEFAULT": "-- 기본 언어 사용하기 --", + "THEME": "테마", + "THEME_DEFAULT": "-- 기본 테마 사용하기 --" + } + }, + "WIZARD": { + "SECTION_TITLE_CREATE_PROJECT": "프로젝트 생성하기", + "CREATE_PROJECT_TEXT": "시원하고 개운하네요! 너무 신나요!", + "CHOOSE_TEMPLATE": "당신의 프로젝트에 가장 적합한 템플릿이 무엇입니까?", + "CHOOSE_TEMPLATE_TITLE": "프로젝트 템플릿에 대한 더 많은 정보", + "CHOOSE_TEMPLATE_INFO": "더 많은 정보", + "PROJECT_DETAILS": "프로젝트 세부사항", + "PUBLIC_PROJECT": "공개된 프로젝트", + "PRIVATE_PROJECT": "비공개 프로젝트", + "CREATE_PROJECT": "프로젝트 생성하기", + "MAX_PRIVATE_PROJECTS": "최대 비공개 프로젝트 수에 도달하였습니다.", + "MAX_PUBLIC_PROJECTS": "안타깝게도, 당신은 최대 공개 프로젝트수에 도달했습니다.", + "CHANGE_PLANS": "계획 변경하기" + }, + "WIKI": { + "PAGE_TITLE": "{{wikiPageName}} - 위키 - {{projectName}}", + "PAGE_DESCRIPTION": "{{lastModifiedDate}}에 최종 수정 (총 {{totalEditions}} 회 수정) 내용: {{ wikiPageContent }}", + "DATETIME": "YYYY MMM DD HH:mm", + "PLACEHOLDER_PAGE": "위키 페이지를 만들어 보세요", + "REMOVE": "이 위키 페이지 삭제하기", + "DELETE_LIGHTBOX_TITLE": "위키 페이지 삭제하기", + "DELETE_LINK_TITLE": "위키 링크 삭제하기", + "NAVIGATION": { + "HOME": "메인 페이지", + "SECTION_NAME": "북마크", + "ACTION_ADD_LINK": "북마크 추가", + "ALL_PAGES": "모든 위키 페이지" + }, + "SUMMARY": { + "TIMES_EDITED": "번
    수정됨", + "LAST_EDIT": "에
    수정됨", + "LAST_MODIFICATION": "마지막 수정" + }, + "SECTION_PAGES_LIST": "모든 페이지", + "PAGES_LIST_COLUMNS": { + "TITLE": "제목", + "EDITIONS": "판", + "CREATED": "생성됨", + "MODIFIED": "수정됨", + "CREATOR": "작성자", + "LAST_MODIFIER": "마지막 수정" + } + }, + "HINTS": { + "SECTION_NAME": "힌트", + "LINK": "사용법을 알고싶으시다면 지원 페이지를 방문해주세요.", + "LINK_TITLE": "지원 페이지를 방문하세요", + "HINT1_TITLE": "프로젝트를 내보내거나 가져올 수 있다는 건 아세요?", + "HINT1_TEXT": "이것은 당신에게 하나의 타이가에서 당신의 모든 데이터를 추출하여 다른 곳으로 이동시킬 수 있도록 허용합니다.", + "HINT2_TITLE": "사용자 정의 필드를 만들 수 있다는건 아세요?", + "HINT2_TEXT": "이제 팀은 특정 워크 플로우에 유용한 특정 데이터를 입력하는 유연한 방법으로 사용자 정의 필드를 만들 수 있습니다.", + "HINT3_TITLE": "당신과 가장 관련성이 높은 순서대로 프로젝트를 정렬하세요.", + "HINT3_TEXT": "상단의 빠른 접근 항목에서 10개의 목록이 보여 집니다.", + "HINT4_TITLE": "뭘 하고 있었는지 잊었습니까?", + "HINT4_TEXT": "걱정마세요, 대시보드에서 당신이 연 태스크, 이슈, 유저 스토리를 작업한 순서데로 찾아볼 수 있습니다." + }, + "TIMELINE": { + "UPLOAD_ATTACHMENT": "{{username}} 님이 {{obj_name}} 첨부파일을 업로드했습니다.", + "US_CREATED": "{{username}} 님이 {{project_name}}에 {{obj_name}} 유저 스토리를 생성하였습니다.", + "ISSUE_CREATED": "{{username}} 님이 {{project_name}}에 {{obj_name}} 이슈를 생성하였습니다.", + "TASK_CREATED": "{{username}} 님이 {{project_name}}에 {{obj_name}} 태스크를 추가하였습니다.", + "TASK_CREATED_WITH_US": "{{username}} 님이 {{project_name}} {{us_name}} 유저 스토리에 {{obj_name}}을 생성하였습니다.", + "WIKI_CREATED": "{{username}} 님이 {{project_name}}에 {{obj_name}} 위키 페이지를 만들었습니다.", + "MILESTONE_CREATED": "{{username}} 님이 {{project_name}}에 {{obj_name}} 스프린트를 만들었습니다.", + "EPIC_CREATED": "{{username}} 님이 새로운 에픽을 {{project_name}} 프로젝트에 {{obj_name}} 명으로 생성하였습니다.", + "EPIC_RELATED_USERSTORY_CREATED": "{{username}} 님이 {{project_name}} 프로젝트에서 {{related_us_name}} 유저 스토리를 {{epic_name}} 에픽과의 연결에 사용하였습니다.", + "NEW_PROJECT": "{{username}} 님이 {{project_name}} 프로젝트를 만들었습니다.", + "MILESTONE_UPDATED": "{{username}} 님이 {{obj_name}} 스프린트를 업데이트 했습니다.", + "US_UPDATED": "{{obj_name}} 유저 스토리에서 \"{{field_name}}\" 속성을 {{username}} 님이 업데이트 했습니다.", + "US_UPDATED_WITH_NEW_VALUE": "{{username}} 님이 {{obj_name}} 유저 스토리의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.", + "US_UPDATED_POINTS": "{{username}} 님이 {{obj_name}} 유저 스토리의 '{{role_name}}' 포인트를 {{new_value}}로 변경하였습니다.", + "ISSUE_UPDATED": "{{username}}님이 {{obj_name}} 이슈의 \"{{field_name}}\" 속성을 변경하였습니다.", + "ISSUE_UPDATED_WITH_NEW_VALUE": "{{username}} 님이 {{obj_name}} 이슈의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.", + "TASK_UPDATED": "{{username}} 님이 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.", + "TASK_UPDATED_WITH_NEW_VALUE": "{{username}} 님이 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.", + "TASK_UPDATED_WITH_US": "{{username}} 님이 {{us_name}} 유저 스토리에 있는 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 수정하였습니다.", + "TASK_UPDATED_WITH_US_NEW_VALUE": "{{username}} 님이 {{us_name}} 유저스토리에 있는 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 수정하였습니다.", + "WIKI_UPDATED": "{{username}} 님이 {{obj_name}} 위키 페이지를 업데이트했습니다.", + "EPIC_UPDATED": "{{username}}님이 에픽 {{obj_name}}의 속성 \"{{field_name}}\"을 변경하였습니다.", + "EPIC_UPDATED_WITH_NEW_VALUE": "{{username}}님이 에픽 {{obj_name}}의 속성 \"{{field_name}}\"을 {{new_value}}로 변경하였습니다.", + "EPIC_UPDATED_WITH_NEW_COLOR": "{{username}}님이 에픽 {{obj_name}}의 \"{{field_name}}\"을 으로 변경하였습니다.", + "NEW_COMMENT_US": "{{username}} 님이 {{obj_name}} 유저 스토리에 댓글을 남겼습니다.", + "NEW_COMMENT_ISSUE": "{{username}} 님이 {{obj_name}} 이슈에 댓글을 남겼습니다.", + "NEW_COMMENT_TASK": "{{username}} 님이 {{obj_name}} 태스크에 댓글을 남겼습니다.", + "NEW_COMMENT_EPIC": "{{username}} 님이 {{obj_name}} 에픽에 댓글을 남겼습니다.", + "NEW_MEMBER": "{{project_name}}에 새 팀원이 들어왔습니다.", + "US_ADDED_MILESTONE": "{{username}} 님이 {{obj_name}} 유저 스토리를 {{sprint_name}}에 추가하였습니다.", + "US_MOVED": "{{username}} 님이 {{obj_name}} 유저 스토리를 이동했습니다.", + "US_REMOVED_FROM_MILESTONE": "{{username}} 님이 {{obj_name}} 유저 스토리를 백로그에 추가하였습니다.", + "BLOCKED": "{{username}} 님이 {{obj_name}}를 차단하였습니다.", + "UNBLOCKED": "{{username}} 님이 {{obj_name}}를 차단 해제하였습니다.", + "NEW_USER": "{{username}} 님이 타이가에 등록하였습니다." + }, + "LEGAL": { + "TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD": "새 계정을 생성하시는 것은,
    서비스 약관개인정보 취급방침에 동의하시는 것을 의미합니다." + }, + "EXTERNAL_APP": { + "PAGE_TITLE": "외부 연동 앱은 권한이 필요합니다.", + "PAGE_DESCRIPTION": "외부 연동 앱은 권한이 필요합니다.", + "AUTHORIZATION_REQUEST": "{{application}}이 당신의 타이가 계정을 사용하도록 허가하시겠어요?", + "LOGIN_WITH_ANOTHER_USER": "다른 사용자로 로그인 하기", + "AUTHORIZE_APP": "인증 앱", + "CANCEL": "취소" + }, + "JOYRIDE": { + "NAV": { + "NEXT": "다음", + "BACK": "이전", + "SKIP": "건너뛰기", + "DONE": "완료됨" + }, + "DASHBOARD": { + "STEP1": { + "TITLE": "프로젝트", + "TEXT": "환영합니다! 여기에서 당신이 참여하고 있는 프로젝트를 찾으실 수 있습니다." + }, + "STEP2": { + "TITLE": "일 하는 중", + "TEXT": "여기에는 당신이 작업하고 있는 유저 스토리, 태스크, 이슈들이 표시됩니다." + }, + "STEP3": { + "TITLE": "구독중", + "TEXT1": "그리고 여기에서 프로젝트에 대해 알고 싶은 것들을 찾을 수 있습니다.", + "TEXT2": "이미 타이가에 있으신걸요? ;)" + }, + "STEP4": { + "TITLE": "시작해 봅시다.", + "TEXT1": "여러분의 첫번째 Tagia 프로젝트를 만드세요.", + "TEXT2": "행운을 빌어요!" + } + }, + "BACKLOG": { + "STEP1": { + "TITLE": "프로젝트 요약", + "TEXT1": "여기에서는 당신의 프로젝트의 상태를 알 수 있습니다.", + "TEXT2": "관리자 메뉴에서 프로젝트의 모든 설정을 변경할 수 있어요." + }, + "STEP2": { + "TITLE": "제품 백로그", + "TEXT": "백 로그는 프로젝트의 요구 사항 (유저 스토리)목록입니다. 스프린트를 계획 할 곳은 다음과 같습니다." + }, + "STEP3": { + "TITLE": "스프린트", + "TEXT": "스프린트는 특정 작업을 완료하고 전달해야하는 짧은 기간 (일반적으로 2주)입니다." + }, + "STEP4": { + "TITLE": "유저 스토리", + "TEXT": "그것들은 높은 수준의 요구 사항입니다. 백 로그에 추가하고 전달해야하는 스프린트로 드래그 할 수 있습니다." + } + }, + "KANBAN": { + "STEP1": { + "TITLE": "워크플로우 사용자 정의하기", + "TEXT": "관리자를 통해 워크 플로우 상태를 매핑하는 데 필요한 열을 설정하십시오" + }, + "STEP2": { + "TITLE": "유저 스토리 & 태스크", + "TEXT": "유저 스토리에 더 높은 권한이 필요합니다. 다른 컬럼에 끌어 놓으세요." + }, + "STEP3": { + "TITLE": "유저 스토리 추가하기", + "TEXT1": "단일 유저 스토리 (유저 스토리 아이콘 추가) 또는 그 그룹 (여러개의 아이콘)을 추가 할 수 있습니다.", + "TEXT2": "행운을 빌어요!" + } + } + }, + "DISCOVER": { + "PAGE_TITLE": "프로젝트 찾기 - 타이가", + "PAGE_DESCRIPTION": "타이가 공공 프로젝트 디렉토리를 검색 할 수 있습니다. 백 로그, 타임 라인, 이슈 및 팀을 탐색하십시오. 가장 인기 있거나 가장 활동적인 프로젝트를 확인하십시오. 칸반 또는 스크럼으로 필터", + "DISCOVER_TITLE": "프로젝트 찾기", + "DISCOVER_SUBTITLE": "{projects, plural, one{One public project to discover} other{# 개의 프로젝트를 발견}}", + "MOST_ACTIVE": "가장 활동적인", + "MOST_ACTIVE_EMPTY": "아직 활성화된 프로젝트가 없습니다.", + "MOST_LIKED": "가장 인기있는", + "MOST_LIKED_EMPTY": "아직 '좋아요' 표시한 프로젝트가 없습니다.", + "VIEW_MORE": "더 보기", + "RECRUITING": "이 프로젝트는 사람을 찾고 있습니다.", + "FEATURED": "주요 프로젝트", + "EMPTY": "이 검색 기준으로 표시 할 프로젝트가 없습니다.
    다시 시도해주세요!", + "FILTERS": { + "ALL": "전체", + "KANBAN": "칸반", + "SCRUM": "스크럼", + "PEOPLE": "사용자 찾기", + "WEEK": "지난 주", + "MONTH": "지난 달", + "YEAR": "작년", + "ALL_TIME": "모든 날짜", + "CLEAR": "필터 없애기" + }, + "SEARCH": { + "PAGE_TITLE": "검색 - 프로젝트 찾기 - 타이가", + "PAGE_DESCRIPTION": "타이가 공공 프로젝트 디렉토리를 검색 할 수 있습니다. 백 로그, 타임 라인, 이슈 및 팀을 탐색하십시오. 가장 인기 있거나 가장 활동적인 프로젝트를 확인하십시오. 칸반 또는 스크럼으로 필터", + "INPUT_PLACEHOLDER": "아무거나 입력하세요...", + "ACTION_TITLE": "검색", + "RESULTS": "검색 결과" + } + } +} \ No newline at end of file From 3d8d0aba9fd958296543e6c127f226601a130010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 17 Jan 2017 14:19:14 +0100 Subject: [PATCH 093/175] Adding support for preview svg and psd images --- CHANGELOG.md | 2 ++ app/coffee/utils.coffee | 2 +- .../components/attachments-preview/attachments-preview.jade | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4327b03..ed9df575 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - Remove bower, now use only npm packages. - Add new wysiwyg editor (like the Medunm editor) with emojis, local storage changes, mentions... - Add rich text custom fields (with a wysiwyg editor like descreption or comments). +- Add thumbnails and preview for PSD files. +- Add thumbnails and preview for SVG files. - i18n: - Add japanese (ja) translation. - Add korean (ko) translation. diff --git a/app/coffee/utils.coffee b/app/coffee/utils.coffee index 638dc218..7524f0c3 100644 --- a/app/coffee/utils.coffee +++ b/app/coffee/utils.coffee @@ -220,7 +220,7 @@ _.mixin isImage = (name) -> - return name.match(/\.(jpe?g|png|gif|gifv|webm)/i) != null + return name.match(/\.(jpe?g|png|gif|gifv|webm|svg|psd)/i) != null isPdf = (name) -> diff --git a/app/modules/components/attachments-preview/attachments-preview.jade b/app/modules/components/attachments-preview/attachments-preview.jade index 0be41189..b2966ab7 100644 --- a/app/modules/components/attachments-preview/attachments-preview.jade +++ b/app/modules/components/attachments-preview/attachments-preview.jade @@ -10,8 +10,8 @@ tg-svg(svg-icon="icon-arrow-left") a(href="{{vm.current.get('url')}}", title="{{vm.current.get('description')}}", target="_blank", download="{{vm.current.get('name')}}") - tg-preload-image(preload-src="{{vm.getCurrent().get('url')}}") - img(ng-src="{{vm.getCurrent().get('url')}}") + tg-preload-image(preload-src="{{vm.current.get('preview_url') || vm.getCurrent().get('url')}}") + img(ng-src="{{vm.current.get('preview_url') || vm.getCurrent().get('url')}}") a.next( href="#", From a4000ac39e8faaae242fc37f550a3f2cfe338be0 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 13 Jan 2017 13:40:56 +0100 Subject: [PATCH 094/175] request tasks and attachments only if the zoom level need it --- .../modules/kanban/kanban-usertories.coffee | 9 +++- app/coffee/modules/kanban/main.coffee | 46 ++++++++++++++----- app/coffee/modules/resources/tasks.coffee | 5 +- .../modules/resources/userstories.coffee | 6 ++- app/coffee/modules/taskboard/main.coffee | 33 +++++++++---- .../modules/taskboard/taskboard-tasks.coffee | 9 ++-- .../components/board-zoom/board-zoom.scss | 1 + .../card/card-templates/card-unfold.jade | 7 ++- app/modules/components/card/card.scss | 4 ++ app/partials/kanban/kanban.jade | 9 ++-- app/partials/taskboard/taskboard.jade | 9 ++-- app/styles/layout/kanban.scss | 4 ++ app/styles/layout/taskboard.scss | 4 ++ 13 files changed, 113 insertions(+), 33 deletions(-) diff --git a/app/coffee/modules/kanban/kanban-usertories.coffee b/app/coffee/modules/kanban/kanban-usertories.coffee index dc1faf82..f19b8342 100644 --- a/app/coffee/modules/kanban/kanban-usertories.coffee +++ b/app/coffee/modules/kanban/kanban-usertories.coffee @@ -170,9 +170,14 @@ class KanbanUserstoriesService extends taiga.Service userstories = @.userstoriesRaw userstories = _.map userstories, (usModel) => us = {} + + model = usModel.getAttrs() + us.foldStatusChanged = @.foldStatusChanged[usModel.id] - us.model = usModel.getAttrs() - us.images = _.filter usModel.attachments, (it) -> return !!it.thumbnail_card_url + + us.model = model + us.images = _.filter model.attachments, (it) -> return !!it.thumbnail_card_url + us.id = usModel.id us.assigned_to = @.usersById[usModel.assigned_to] us.colorized_tags = _.map us.model.tags, (tag) => diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index b8e7f4fb..05ac9d1a 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -77,6 +77,10 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @scope.sectionName = @translate.instant("KANBAN.SECTION_NAME") @.initializeEventHandlers() + taiga.defineImmutableProperty @.scope, "usByStatus", () => + return @kanbanUserstoriesService.usByStatus + + firstLoad: () -> promise = @.loadInitialData() # On Success @@ -91,16 +95,29 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi # On Error promise.then null, @.onInitialDataError.bind(@) - taiga.defineImmutableProperty @.scope, "usByStatus", () => - return @kanbanUserstoriesService.usByStatus - setZoom: (zoomLevel, zoom) -> - if @.zoomLevel != zoomLevel - @kanbanUserstoriesService.resetFolds() + if @.zoomLevel == zoomLevel + return null + + @.isFirstLoad = !@.zoomLevel + + previousZoomLevel = @.zoomLevel @.zoomLevel = zoomLevel @.zoom = zoom + if @.isFirstLoad + @.firstLoad().then () => + @.isFirstLoad = false + @kanbanUserstoriesService.resetFolds() + + else if @.zoomLevel > 1 && previousZoomLevel <= 1 + @.zoomLoading = true + + @.loadUserstories().then () => + @.zoomLoading = false + @kanbanUserstoriesService.resetFolds() + filtersReloadContent: () -> @.loadUserstories().then () => openArchived = _.difference(@kanbanUserstoriesService.archivedStatus, @@ -182,13 +199,15 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi return @rs.projects.tagsColors(@scope.projectId).then (tags_colors) => @scope.project.tags_colors = tags_colors._attrs - loadUserstories: -> + loadUserstories: () -> params = { - status__is_archived: false, - include_attachments: true, - include_tasks: true + status__is_archived: false } + if @.zoomLevel > 1 + params.include_attachments = 1 + params.include_tasks = 1 + params = _.merge params, @location.search() promise = @rs.userstories.listAll(@scope.projectId, params).then (userstories) => @@ -423,13 +442,18 @@ KanbanSquishColumnDirective = (rs, projectService) -> return 40 else return 310 + totalWidth = _.reduce columnWidths, (total, width) -> return total + width $el.find('.kanban-table-inner').css("width", totalWidth) - $scope.folds = rs.kanban.getStatusColumnModes(projectService.project.get('id')) - updateTableWidth() + unwatch = $scope.$watch 'usByStatus', (usByStatus) -> + if usByStatus.size + $scope.folds = rs.kanban.getStatusColumnModes(projectService.project.get('id')) + updateTableWidth() + + unwatch() return {link: link} diff --git a/app/coffee/modules/resources/tasks.coffee b/app/coffee/modules/resources/tasks.coffee index 4c47ad6e..63aed001 100644 --- a/app/coffee/modules/resources/tasks.coffee +++ b/app/coffee/modules/resources/tasks.coffee @@ -33,9 +33,12 @@ resourceProvider = ($repo, $http, $urls, $storage) -> hashSuffixStatusColumnModes = "tasks-statuscolumnmodels" hashSuffixUsRowModes = "tasks-usrowmodels" - service.get = (projectId, taskId) -> + service.get = (projectId, taskId, extraParams) -> params = service.getQueryParams(projectId) params.project = projectId + + params = _.extend({}, params, extraParams) + return $repo.queryOne("tasks", taskId, params) service.getByRef = (projectId, ref, extraParams) -> diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index e95693d2..0ad771b7 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -30,9 +30,12 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> service = {} hashSuffix = "userstories-queryparams" - service.get = (projectId, usId) -> + service.get = (projectId, usId, extraParams) -> params = service.getQueryParams(projectId) params.project = projectId + + params = _.extend({}, params, extraParams) + return $repo.queryOne("userstories", usId, params) service.getByRef = (projectId, ref, extraParams = {}) -> @@ -64,6 +67,7 @@ resourceProvider = ($repo, $http, $urls, $storage, $q) -> params = {"project": projectId} params = _.extend({}, params, filters or {}) service.storeQueryParams(projectId, params) + return $repo.queryMany("userstories", params) service.bulkCreate = (projectId, status, bulk) -> diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index 74f95d84..80832d9d 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -72,6 +72,10 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga @scope.sectionName = @translate.instant("TASKBOARD.SECTION_NAME") @.initializeEventHandlers() + taiga.defineImmutableProperty @.scope, "usTasks", () => + return @taskboardTasksService.usTasks + + firstLoad: () -> promise = @.loadInitialData() # On Success @@ -79,16 +83,28 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga # On Error promise.then null, @.onInitialDataError.bind(@) - taiga.defineImmutableProperty @.scope, "usTasks", () => - return @taskboardTasksService.usTasks - setZoom: (zoomLevel, zoom) -> - if @.zoomLevel != zoomLevel - @taskboardTasksService.resetFolds() + if @.zoomLevel == zoomLevel + return null + + @.isFirstLoad = !@.zoomLevel + + previousZoomLevel = @.zoomLevel @.zoomLevel = zoomLevel @.zoom = zoom + if @.isFirstLoad + @.firstLoad().then () => + @.isFirstLoad = false + @taskboardTasksService.resetFolds() + + else if @.zoomLevel > 1 && previousZoomLevel <= 1 + @.zoomLoading = true + @.loadTasks().then () => + @.zoomLoading = false + @taskboardTasksService.resetFolds() + if @.zoomLevel == '0' @rootscope.$broadcast("sprint:zoom0") @@ -342,9 +358,10 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga return sprint loadTasks: -> - params = { - include_attachments: true, - } + params = {} + + if @.zoomLevel > 1 + params.include_attachments = 1 params = _.merge params, @location.search() diff --git a/app/coffee/modules/taskboard/taskboard-tasks.coffee b/app/coffee/modules/taskboard/taskboard-tasks.coffee index 013238fb..bb3ae87a 100644 --- a/app/coffee/modules/taskboard/taskboard-tasks.coffee +++ b/app/coffee/modules/taskboard/taskboard-tasks.coffee @@ -157,12 +157,15 @@ class TaskboardTasksService extends taiga.Service for taskModel in tasks if usTasks[taskModel.user_story]? and usTasks[taskModel.user_story][taskModel.status]? task = {} + + model = taskModel.getAttrs() + task.foldStatusChanged = @.foldStatusChanged[taskModel.id] - task.model = taskModel.getAttrs() - task.images = _.filter taskModel.attachments, (it) -> return !!it.thumbnail_card_url + task.model = model + task.images = _.filter model.attachments, (it) -> return !!it.thumbnail_card_url task.id = taskModel.id task.assigned_to = @.usersById[taskModel.assigned_to] - task.colorized_tags = _.map task.model.tags, (tag) => + task.colorized_tags = _.map task.model.tags, (tag) => return {name: tag[0], color: tag[1]} usTasks[taskModel.user_story][taskModel.status].push(task) diff --git a/app/modules/components/board-zoom/board-zoom.scss b/app/modules/components/board-zoom/board-zoom.scss index 5e5d7eb2..e8b88433 100644 --- a/app/modules/components/board-zoom/board-zoom.scss +++ b/app/modules/components/board-zoom/board-zoom.scss @@ -36,6 +36,7 @@ $contrast: 2; .range-slider { -webkit-appearance: none; + display: block; margin: $thumb-height / 2 0; width: $track-width; diff --git a/app/modules/components/card/card-templates/card-unfold.jade b/app/modules/components/card/card-templates/card-unfold.jade index 5b734660..cefcfc47 100644 --- a/app/modules/components/card/card-templates/card-unfold.jade +++ b/app/modules/components/card/card-templates/card-unfold.jade @@ -1,6 +1,11 @@ .card-unfold.ng-animate-disabled( ng-click="vm.toggleFold()" - ng-if="vm.visible('unfold') && (vm.item.getIn(['model', 'tasks']).size || vm.item.get('images').size)" + ng-if="vm.visible('unfold')" role="button" ) tg-svg(svg-icon="icon-view-more") + +.loading-extra( + tg-loading="vm.item.get('loading-extra')" + + ) diff --git a/app/modules/components/card/card.scss b/app/modules/components/card/card.scss index 47d3c57d..5dfbbe5b 100644 --- a/app/modules/components/card/card.scss +++ b/app/modules/components/card/card.scss @@ -5,6 +5,10 @@ margin: 0 .6rem .6rem; overflow: hidden; transition: box-shadow .2s ease-in; + .loading-extra.loading { + padding: .2rem; + text-align: center; + } &:hover { box-shadow: 3px 3px 6px darken($whitish, 10%); } diff --git a/app/partials/kanban/kanban.jade b/app/partials/kanban/kanban.jade index 9cc9cb0d..3a63c543 100644 --- a/app/partials/kanban/kanban.jade +++ b/app/partials/kanban/kanban.jade @@ -1,7 +1,10 @@ doctype html -div.wrapper(tg-kanban, ng-controller="KanbanController as ctrl" - ng-init="section='kanban'") +div.wrapper( + tg-kanban, + ng-controller="KanbanController as ctrl" + ng-init="section='kanban'" +) tg-project-menu section.main.kanban @@ -23,8 +26,8 @@ div.wrapper(tg-kanban, ng-controller="KanbanController as ctrl" .kanban-header include ../includes/components/mainTitle .taskboard-actions + .zoom-loading(tg-loading="ctrl.zoomLoading") tg-kanban-board-zoom( - ng-if="usByStatus.size", on-zoom-change="ctrl.setZoom(zoomLevel, zoom)" ) diff --git a/app/partials/taskboard/taskboard.jade b/app/partials/taskboard/taskboard.jade index 1a0d0e62..d9475033 100644 --- a/app/partials/taskboard/taskboard.jade +++ b/app/partials/taskboard/taskboard.jade @@ -1,7 +1,10 @@ doctype html -div.wrapper(tg-taskboard, ng-controller="TaskboardController as ctrl", - ng-init="section='backlog'") +div.wrapper( + tg-taskboard, + ng-controller="TaskboardController as ctrl", + ng-init="section='backlog'" +) tg-project-menu section.main.taskboard tg-filter( @@ -24,8 +27,8 @@ div.wrapper(tg-taskboard, ng-controller="TaskboardController as ctrl", span.green(tg-bo-bind="sprint.name") span.date(tg-date-range="sprint.estimated_start,sprint.estimated_finish") .taskboard-actions + .zoom-loading(tg-loading="ctrl.zoomLoading") tg-taskboard-zoom( - ng-if="usTasks.size", on-zoom-change="ctrl.setZoom(zoomLevel, zoom)" ) button.button-filter.e2e-open-filter( diff --git a/app/styles/layout/kanban.scss b/app/styles/layout/kanban.scss index dca0852f..aad6c8c8 100644 --- a/app/styles/layout/kanban.scss +++ b/app/styles/layout/kanban.scss @@ -14,6 +14,10 @@ .burndown-container { display: none; } + .zoom-loading img { + display: block; + margin-right: 1rem; + } } .kanban-header { diff --git a/app/styles/layout/taskboard.scss b/app/styles/layout/taskboard.scss index e213b56f..45e34a89 100644 --- a/app/styles/layout/taskboard.scss +++ b/app/styles/layout/taskboard.scss @@ -10,6 +10,10 @@ .graphics-container { @include slide(300px, hidden); } + .zoom-loading img { + display: block; + margin-right: 1rem; + } } .taskboard-header { From 382758715bd27f9022f4365095715ad0a4a103e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Sat, 19 Nov 2016 10:00:42 +0100 Subject: [PATCH 095/175] Restyle of custom fields --- .../custom-attributes-values.jade | 2 + app/styles/modules/common/custom-fields.scss | 39 ++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/app/partials/custom-attributes/custom-attributes-values.jade b/app/partials/custom-attributes/custom-attributes-values.jade index 2a5ec5eb..ba45e4f3 100644 --- a/app/partials/custom-attributes/custom-attributes-values.jade +++ b/app/partials/custom-attributes/custom-attributes-values.jade @@ -7,8 +7,10 @@ section.duty-custom-fields(ng-show="ctrl.customAttributes.length") ng-click="toggleCollapse()" ) tg-svg(svg-icon="icon-arrow-down") + .custom-fields-body( ng-show="!collapsed" + ng-class="{'collapse-fields': ctrl.customAttributes.length > 6}" ) .custom-attribute( ng-repeat="attr in ctrl.customAttributes" diff --git a/app/styles/modules/common/custom-fields.scss b/app/styles/modules/common/custom-fields.scss index 003e9cc0..792550bb 100644 --- a/app/styles/modules/common/custom-fields.scss +++ b/app/styles/modules/common/custom-fields.scss @@ -24,7 +24,7 @@ border-bottom: 1px solid $whitish; display: flex; justify-content: flex-start; - padding: 1rem; + padding: .7rem; &:hover { .custom-field-options { opacity: 1; @@ -85,3 +85,40 @@ } } } + +.custom-fields-body { + display: flex; + flex-wrap: wrap; + &.collapse-fields { + .custom-attribute { + flex-basis: 50%; + @include breakpoint(laptop) { + flex-basis: 100%; + &:nth-child(even) { + padding: 0; + } + &:nth-child(odd) { + padding: 0; + } + } + &:nth-child(even) { + padding: 0 0 0 2rem; + } + &:nth-child(odd) { + padding: 0 2rem 0 0; + } + } + } + .custom-attribute { + flex-basis: 100%; + &:nth-child(even) { + padding: 0; + } + &:nth-child(odd) { + padding: 0; + } + } + .custom-field-single { + height: 100%; + } +} From 204f1026969009d148bce70e2b456dac23d7d3b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 2 Nov 2016 12:56:17 +0100 Subject: [PATCH 096/175] Show icons on kanban and taskboard only when is relevant --- .../components/card/card-templates/card-data.jade | 14 ++++++++++---- .../kanban-board-zoom.directive.coffee | 2 +- .../taskboard-zoom/taskboard-zoom.directive.coffee | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/modules/components/card/card-templates/card-data.jade b/app/modules/components/card/card-templates/card-data.jade index e5fb512a..73f941c2 100644 --- a/app/modules/components/card/card-templates/card-data.jade +++ b/app/modules/components/card/card-templates/card-data.jade @@ -3,7 +3,7 @@ ng-class="{'empty-tasks': !vm.item.getIn(['model', 'tasks']).size}" ) span.card-estimation( - ng-if="vm.item.getIn(['model', 'total_points']) === null", + ng-if="vm.item.getIn(['model', 'total_points']) === null && vm.visible('empty_extra_info')", translate="US.NOT_ESTIMATED" ) span.card-estimation( @@ -17,12 +17,18 @@ tg-svg( svg-icon="icon-iocaine" ) - .statistic.card-votes(ng-class="{'active': vm.item.getIn(['model', 'is_voter'])}") + .statistic.card-votes( + ng-class="{'active': vm.item.getIn(['model', 'is_voter'])}" + ng-if="vm.item.getIn(['model', 'total_voters']) || vm.visible('empty_extra_info')" + ) tg-svg(svg-icon="icon-upvote") span {{vm.item.getIn(['model', 'total_voters'])}} - .statistic.card-watchers + .statistic.card-watchers(ng-if="vm.item.getIn(['model', 'watchers']).size || vm.visible('empty_extra_info')") tg-svg(svg-icon="icon-watch") span {{vm.item.getIn(['model', 'watchers']).size}} - .statistic.card-attachments(ng-if="vm.item.getIn(['model', 'attachments']).size") + .statistic.card-comments(ng-if="vm.item.getIn(['model', 'total_comments']) || vm.visible('empty_extra_info')") + tg-svg(svg-icon="icon-bubble-empty") + span {{vm.item.getIn(['model', 'total_comments'])}} + .statistic.card-attachments(ng-if="vm.item.getIn(['model', 'attachments']).size || vm.visible('empty_extra_info')") tg-svg(svg-icon="icon-attachment") span {{vm.item.getIn(['model', 'attachments']).size}} diff --git a/app/modules/components/kanban-board-zoom/kanban-board-zoom.directive.coffee b/app/modules/components/kanban-board-zoom/kanban-board-zoom.directive.coffee index 26e60a0f..435d7c0b 100644 --- a/app/modules/components/kanban-board-zoom/kanban-board-zoom.directive.coffee +++ b/app/modules/components/kanban-board-zoom/kanban-board-zoom.directive.coffee @@ -27,7 +27,7 @@ KanbanBoardZoomDirective = (storage, projectService) -> ["subject"], ["owner", "tags", "extra_info", "unfold"], ["attachments"], - ["related_tasks"] + ["related_tasks", "empty_extra_info"] ] getZoomView = (zoomIndex = 0) -> diff --git a/app/modules/components/taskboard-zoom/taskboard-zoom.directive.coffee b/app/modules/components/taskboard-zoom/taskboard-zoom.directive.coffee index 7db01d43..aeedeafb 100644 --- a/app/modules/components/taskboard-zoom/taskboard-zoom.directive.coffee +++ b/app/modules/components/taskboard-zoom/taskboard-zoom.directive.coffee @@ -27,7 +27,7 @@ TaskboardZoomDirective = (storage) -> ["ref"], ["subject"], ["owner", "tags", "extra_info", "unfold"], - ["attachments"], + ["attachments", "empty_extra_info"], ["related_tasks"] ] From c98ad12e1ed8da38778879263e81effa2d101a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 18 Jan 2017 14:11:02 +0100 Subject: [PATCH 097/175] Update Prism languages list --- prism-languages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prism-languages.json b/prism-languages.json index be5b8e15..6d79b676 100644 --- a/prism-languages.json +++ b/prism-languages.json @@ -1 +1 @@ -[{"file":"prism-abap.min.js","name":"abap"},{"file":"prism-actionscript.min.js","name":"actionscript"},{"file":"prism-apacheconf.min.js","name":"apacheconf"},{"file":"prism-apl.min.js","name":"apl"},{"file":"prism-applescript.min.js","name":"applescript"},{"file":"prism-asciidoc.min.js","name":"asciidoc"},{"file":"prism-aspnet.min.js","name":"aspnet"},{"file":"prism-autohotkey.min.js","name":"autohotkey"},{"file":"prism-autoit.min.js","name":"autoit"},{"file":"prism-bash.min.js","name":"bash"},{"file":"prism-basic.min.js","name":"basic"},{"file":"prism-batch.min.js","name":"batch"},{"file":"prism-bison.min.js","name":"bison"},{"file":"prism-brainfuck.min.js","name":"brainfuck"},{"file":"prism-bro.min.js","name":"bro"},{"file":"prism-c.min.js","name":"c"},{"file":"prism-clike.min.js","name":"clike"},{"file":"prism-coffeescript.min.js","name":"coffeescript"},{"file":"prism-core.min.js","name":"core"},{"file":"prism-cpp.min.js","name":"cpp"},{"file":"prism-crystal.min.js","name":"crystal"},{"file":"prism-csharp.min.js","name":"csharp"},{"file":"prism-css-extras.min.js","name":"css-extras"},{"file":"prism-css.min.js","name":"css"},{"file":"prism-d.min.js","name":"d"},{"file":"prism-dart.min.js","name":"dart"},{"file":"prism-diff.min.js","name":"diff"},{"file":"prism-docker.min.js","name":"docker"},{"file":"prism-eiffel.min.js","name":"eiffel"},{"file":"prism-elixir.min.js","name":"elixir"},{"file":"prism-erlang.min.js","name":"erlang"},{"file":"prism-fortran.min.js","name":"fortran"},{"file":"prism-fsharp.min.js","name":"fsharp"},{"file":"prism-gherkin.min.js","name":"gherkin"},{"file":"prism-git.min.js","name":"git"},{"file":"prism-glsl.min.js","name":"glsl"},{"file":"prism-go.min.js","name":"go"},{"file":"prism-groovy.min.js","name":"groovy"},{"file":"prism-haml.min.js","name":"haml"},{"file":"prism-handlebars.min.js","name":"handlebars"},{"file":"prism-haskell.min.js","name":"haskell"},{"file":"prism-haxe.min.js","name":"haxe"},{"file":"prism-http.min.js","name":"http"},{"file":"prism-icon.min.js","name":"icon"},{"file":"prism-inform7.min.js","name":"inform7"},{"file":"prism-ini.min.js","name":"ini"},{"file":"prism-j.min.js","name":"j"},{"file":"prism-jade.min.js","name":"jade"},{"file":"prism-java.min.js","name":"java"},{"file":"prism-javascript.min.js","name":"javascript"},{"file":"prism-json.min.js","name":"json"},{"file":"prism-jsx.min.js","name":"jsx"},{"file":"prism-julia.min.js","name":"julia"},{"file":"prism-keyman.min.js","name":"keyman"},{"file":"prism-kotlin.min.js","name":"kotlin"},{"file":"prism-latex.min.js","name":"latex"},{"file":"prism-less.min.js","name":"less"},{"file":"prism-lolcode.min.js","name":"lolcode"},{"file":"prism-lua.min.js","name":"lua"},{"file":"prism-makefile.min.js","name":"makefile"},{"file":"prism-markdown.min.js","name":"markdown"},{"file":"prism-markup.min.js","name":"markup"},{"file":"prism-matlab.min.js","name":"matlab"},{"file":"prism-mel.min.js","name":"mel"},{"file":"prism-mizar.min.js","name":"mizar"},{"file":"prism-monkey.min.js","name":"monkey"},{"file":"prism-nasm.min.js","name":"nasm"},{"file":"prism-nginx.min.js","name":"nginx"},{"file":"prism-nim.min.js","name":"nim"},{"file":"prism-nix.min.js","name":"nix"},{"file":"prism-nsis.min.js","name":"nsis"},{"file":"prism-objectivec.min.js","name":"objectivec"},{"file":"prism-ocaml.min.js","name":"ocaml"},{"file":"prism-oz.min.js","name":"oz"},{"file":"prism-parigp.min.js","name":"parigp"},{"file":"prism-parser.min.js","name":"parser"},{"file":"prism-pascal.min.js","name":"pascal"},{"file":"prism-perl.min.js","name":"perl"},{"file":"prism-php-extras.min.js","name":"php-extras"},{"file":"prism-php.min.js","name":"php"},{"file":"prism-powershell.min.js","name":"powershell"},{"file":"prism-processing.min.js","name":"processing"},{"file":"prism-prolog.min.js","name":"prolog"},{"file":"prism-protobuf.min.js","name":"protobuf"},{"file":"prism-puppet.min.js","name":"puppet"},{"file":"prism-pure.min.js","name":"pure"},{"file":"prism-python.min.js","name":"python"},{"file":"prism-q.min.js","name":"q"},{"file":"prism-qore.min.js","name":"qore"},{"file":"prism-r.min.js","name":"r"},{"file":"prism-rest.min.js","name":"rest"},{"file":"prism-rip.min.js","name":"rip"},{"file":"prism-roboconf.min.js","name":"roboconf"},{"file":"prism-ruby.min.js","name":"ruby"},{"file":"prism-rust.min.js","name":"rust"},{"file":"prism-sas.min.js","name":"sas"},{"file":"prism-sass.min.js","name":"sass"},{"file":"prism-scala.min.js","name":"scala"},{"file":"prism-scheme.min.js","name":"scheme"},{"file":"prism-scss.min.js","name":"scss"},{"file":"prism-smalltalk.min.js","name":"smalltalk"},{"file":"prism-smarty.min.js","name":"smarty"},{"file":"prism-sql.min.js","name":"sql"},{"file":"prism-stylus.min.js","name":"stylus"},{"file":"prism-swift.min.js","name":"swift"},{"file":"prism-tcl.min.js","name":"tcl"},{"file":"prism-textile.min.js","name":"textile"},{"file":"prism-twig.min.js","name":"twig"},{"file":"prism-typescript.min.js","name":"typescript"},{"file":"prism-verilog.min.js","name":"verilog"},{"file":"prism-vhdl.min.js","name":"vhdl"},{"file":"prism-vim.min.js","name":"vim"},{"file":"prism-wiki.min.js","name":"wiki"},{"file":"prism-yaml.min.js","name":"yaml"}] \ No newline at end of file +[{"file":"prism-abap.min.js","name":"abap"},{"file":"prism-actionscript.min.js","name":"actionscript"},{"file":"prism-ada.min.js","name":"ada"},{"file":"prism-apacheconf.min.js","name":"apacheconf"},{"file":"prism-apl.min.js","name":"apl"},{"file":"prism-applescript.min.js","name":"applescript"},{"file":"prism-asciidoc.min.js","name":"asciidoc"},{"file":"prism-aspnet.min.js","name":"aspnet"},{"file":"prism-autohotkey.min.js","name":"autohotkey"},{"file":"prism-autoit.min.js","name":"autoit"},{"file":"prism-bash.min.js","name":"bash"},{"file":"prism-basic.min.js","name":"basic"},{"file":"prism-batch.min.js","name":"batch"},{"file":"prism-bison.min.js","name":"bison"},{"file":"prism-brainfuck.min.js","name":"brainfuck"},{"file":"prism-bro.min.js","name":"bro"},{"file":"prism-c.min.js","name":"c"},{"file":"prism-clike.min.js","name":"clike"},{"file":"prism-coffeescript.min.js","name":"coffeescript"},{"file":"prism-core.min.js","name":"core"},{"file":"prism-cpp.min.js","name":"cpp"},{"file":"prism-crystal.min.js","name":"crystal"},{"file":"prism-csharp.min.js","name":"csharp"},{"file":"prism-css-extras.min.js","name":"css-extras"},{"file":"prism-css.min.js","name":"css"},{"file":"prism-d.min.js","name":"d"},{"file":"prism-dart.min.js","name":"dart"},{"file":"prism-diff.min.js","name":"diff"},{"file":"prism-docker.min.js","name":"docker"},{"file":"prism-eiffel.min.js","name":"eiffel"},{"file":"prism-elixir.min.js","name":"elixir"},{"file":"prism-erlang.min.js","name":"erlang"},{"file":"prism-fortran.min.js","name":"fortran"},{"file":"prism-fsharp.min.js","name":"fsharp"},{"file":"prism-gherkin.min.js","name":"gherkin"},{"file":"prism-git.min.js","name":"git"},{"file":"prism-glsl.min.js","name":"glsl"},{"file":"prism-go.min.js","name":"go"},{"file":"prism-graphql.min.js","name":"graphql"},{"file":"prism-groovy.min.js","name":"groovy"},{"file":"prism-haml.min.js","name":"haml"},{"file":"prism-handlebars.min.js","name":"handlebars"},{"file":"prism-haskell.min.js","name":"haskell"},{"file":"prism-haxe.min.js","name":"haxe"},{"file":"prism-http.min.js","name":"http"},{"file":"prism-icon.min.js","name":"icon"},{"file":"prism-inform7.min.js","name":"inform7"},{"file":"prism-ini.min.js","name":"ini"},{"file":"prism-j.min.js","name":"j"},{"file":"prism-jade.min.js","name":"jade"},{"file":"prism-java.min.js","name":"java"},{"file":"prism-javascript.min.js","name":"javascript"},{"file":"prism-jolie.min.js","name":"jolie"},{"file":"prism-json.min.js","name":"json"},{"file":"prism-jsx.min.js","name":"jsx"},{"file":"prism-julia.min.js","name":"julia"},{"file":"prism-keyman.min.js","name":"keyman"},{"file":"prism-kotlin.min.js","name":"kotlin"},{"file":"prism-latex.min.js","name":"latex"},{"file":"prism-less.min.js","name":"less"},{"file":"prism-livescript.min.js","name":"livescript"},{"file":"prism-lolcode.min.js","name":"lolcode"},{"file":"prism-lua.min.js","name":"lua"},{"file":"prism-makefile.min.js","name":"makefile"},{"file":"prism-markdown.min.js","name":"markdown"},{"file":"prism-markup.min.js","name":"markup"},{"file":"prism-matlab.min.js","name":"matlab"},{"file":"prism-mel.min.js","name":"mel"},{"file":"prism-mizar.min.js","name":"mizar"},{"file":"prism-monkey.min.js","name":"monkey"},{"file":"prism-nasm.min.js","name":"nasm"},{"file":"prism-nginx.min.js","name":"nginx"},{"file":"prism-nim.min.js","name":"nim"},{"file":"prism-nix.min.js","name":"nix"},{"file":"prism-nsis.min.js","name":"nsis"},{"file":"prism-objectivec.min.js","name":"objectivec"},{"file":"prism-ocaml.min.js","name":"ocaml"},{"file":"prism-oz.min.js","name":"oz"},{"file":"prism-parigp.min.js","name":"parigp"},{"file":"prism-parser.min.js","name":"parser"},{"file":"prism-pascal.min.js","name":"pascal"},{"file":"prism-perl.min.js","name":"perl"},{"file":"prism-php-extras.min.js","name":"php-extras"},{"file":"prism-php.min.js","name":"php"},{"file":"prism-powershell.min.js","name":"powershell"},{"file":"prism-processing.min.js","name":"processing"},{"file":"prism-prolog.min.js","name":"prolog"},{"file":"prism-properties.min.js","name":"properties"},{"file":"prism-protobuf.min.js","name":"protobuf"},{"file":"prism-puppet.min.js","name":"puppet"},{"file":"prism-pure.min.js","name":"pure"},{"file":"prism-python.min.js","name":"python"},{"file":"prism-q.min.js","name":"q"},{"file":"prism-qore.min.js","name":"qore"},{"file":"prism-r.min.js","name":"r"},{"file":"prism-reason.min.js","name":"reason"},{"file":"prism-rest.min.js","name":"rest"},{"file":"prism-rip.min.js","name":"rip"},{"file":"prism-roboconf.min.js","name":"roboconf"},{"file":"prism-ruby.min.js","name":"ruby"},{"file":"prism-rust.min.js","name":"rust"},{"file":"prism-sas.min.js","name":"sas"},{"file":"prism-sass.min.js","name":"sass"},{"file":"prism-scala.min.js","name":"scala"},{"file":"prism-scheme.min.js","name":"scheme"},{"file":"prism-scss.min.js","name":"scss"},{"file":"prism-smalltalk.min.js","name":"smalltalk"},{"file":"prism-smarty.min.js","name":"smarty"},{"file":"prism-sql.min.js","name":"sql"},{"file":"prism-stylus.min.js","name":"stylus"},{"file":"prism-swift.min.js","name":"swift"},{"file":"prism-tcl.min.js","name":"tcl"},{"file":"prism-textile.min.js","name":"textile"},{"file":"prism-twig.min.js","name":"twig"},{"file":"prism-typescript.min.js","name":"typescript"},{"file":"prism-verilog.min.js","name":"verilog"},{"file":"prism-vhdl.min.js","name":"vhdl"},{"file":"prism-vim.min.js","name":"vim"},{"file":"prism-wiki.min.js","name":"wiki"},{"file":"prism-xojo.min.js","name":"xojo"},{"file":"prism-yaml.min.js","name":"yaml"}] \ No newline at end of file From 9fb32124d4bb9cb185c217d8a228ed0befad0a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Tue, 17 Jan 2017 11:54:05 +0100 Subject: [PATCH 098/175] Add from_comment field in attachments from comment --- .../attachments-full/attachments-full.service.coffee | 7 ++++--- .../wysiwyg/comment-edit-wysiwyg.directive.coffee | 3 ++- .../components/wysiwyg/comment-wysiwyg.directive.coffee | 3 ++- app/modules/resources/attachments-resource.service.coffee | 3 ++- app/modules/services/attachments.service.coffee | 4 ++-- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/modules/components/attachments-full/attachments-full.service.coffee b/app/modules/components/attachments-full/attachments-full.service.coffee index 2635f7c4..118330c4 100644 --- a/app/modules/components/attachments-full/attachments-full.service.coffee +++ b/app/modules/components/attachments-full/attachments-full.service.coffee @@ -47,12 +47,12 @@ class AttachmentsFullService extends taiga.Service else @._attachmentsVisible = @._attachments.filter (it) -> !it.getIn(['file', 'is_deprecated']) - addAttachment: (projectId, objId, type, file, editable = true) -> + addAttachment: (projectId, objId, type, file, editable = true, comment = false) -> return new Promise (resolve, reject) => if @attachmentsService.validate(file) @.uploadingAttachments.push(file) - promise = @attachmentsService.upload(file, objId, projectId, type) + promise = @attachmentsService.upload(file, objId, projectId, type, comment) promise.then (file) => @.uploadingAttachments = @.uploadingAttachments.filter (uploading) -> return uploading.name != file.get('name') @@ -62,7 +62,8 @@ class AttachmentsFullService extends taiga.Service attachment = attachment.merge({ file: file, editable: editable, - loading: false + loading: false, + from_comment: comment }) @._attachments = @._attachments.push(attachment) diff --git a/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee index 2bc170e6..845b44e5 100644 --- a/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee @@ -25,13 +25,14 @@ CommentEditWysiwyg = (attachmentsFullService) -> link = ($scope, $el, $attrs) -> types = { + epics: "epic", userstories: "us", issues: "issue", tasks: "task" } uploadFile = (file, cb) -> - return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.comment.comment.id, types[$scope.vm.comment.comment._name], file).then (result) -> + return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.comment.comment.id, types[$scope.vm.comment.comment._name], file, true, true).then (result) -> cb(result.getIn(['file', 'name']), result.getIn(['file', 'url'])) $scope.uploadFiles = (files, cb) -> diff --git a/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee index c1240a63..7a7ae5bd 100644 --- a/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee @@ -32,13 +32,14 @@ CommentWysiwyg = (attachmentsFullService) -> $scope.vm.onAddComment({callback: cb}) types = { + epics: "epic", userstories: "us", issues: "issue", tasks: "task" } uploadFile = (file, cb) -> - return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.type.id, types[$scope.vm.type._name], file).then (result) -> + return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.type.id, types[$scope.vm.type._name], file, true, true).then (result) -> cb(result.getIn(['file', 'name']), result.getIn(['file', 'url'])) $scope.onChange = (markdown) -> diff --git a/app/modules/resources/attachments-resource.service.coffee b/app/modules/resources/attachments-resource.service.coffee index 94cb1bb2..ecdacbc3 100644 --- a/app/modules/resources/attachments-resource.service.coffee +++ b/app/modules/resources/attachments-resource.service.coffee @@ -58,7 +58,7 @@ Resource = (urlsService, http, config, $rootScope, $q, storage) -> return http.patch(url, patch) - service.create = (type, projectId, objectId, file) -> + service.create = (type, projectId, objectId, file, from_comment) -> urlname = "attachments/#{type}" url = urlsService.resolve(urlname) @@ -116,6 +116,7 @@ Resource = (urlsService, http, config, $rootScope, $q, storage) -> data.append("project", projectId) data.append("object_id", objectId) data.append("attached_file", file) + data.append("from_comment", from_comment) xhr = new XMLHttpRequest() xhr.upload.addEventListener("progress", uploadProgress, false) diff --git a/app/modules/services/attachments.service.coffee b/app/modules/services/attachments.service.coffee index 5ebfa0ce..89069785 100644 --- a/app/modules/services/attachments.service.coffee +++ b/app/modules/services/attachments.service.coffee @@ -70,8 +70,8 @@ class AttachmentsService @confirm.notify("error", message) - upload: (file, objId, projectId, type) -> - promise = @rs.attachments.create(type, projectId, objId, file) + upload: (file, objId, projectId, type, from_comment = false) -> + promise = @rs.attachments.create(type, projectId, objId, file, from_comment) promise.then null, @.saveError.bind(this, file) From f995b75d231c6fa675c7323b7cc3660ad09ddc16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 18 Jan 2017 14:07:35 +0100 Subject: [PATCH 099/175] Hide delete button if it is not needed --- app/modules/components/attachment/attachment-gallery.jade | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/modules/components/attachment/attachment-gallery.jade b/app/modules/components/attachment/attachment-gallery.jade index 4a131ef2..5a4a9074 100644 --- a/app/modules/components/attachment/attachment-gallery.jade +++ b/app/modules/components/attachment/attachment-gallery.jade @@ -32,6 +32,8 @@ a.icon-delete( href="" title="{{'COMMON.DELETE' | translate}}" + ng-if="!vm.attachment.get('editable')" + tg-check-permission="modify_{{vm.type}}" ng-click="vm.delete()" ) tg-svg(svg-icon="icon-trash") From dc9f1acfb359a605b9db88d93f325d31346b8f85 Mon Sep 17 00:00:00 2001 From: xaviju Date: Fri, 20 Jan 2017 09:37:05 +0100 Subject: [PATCH 100/175] Remove hover in selected filters --- scsslint.yml => .scss-lint.yml | 0 app/modules/components/filter/filter.scss | 15 ++++++++++++--- gulpfile.js | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) rename scsslint.yml => .scss-lint.yml (100%) diff --git a/scsslint.yml b/.scss-lint.yml similarity index 100% rename from scsslint.yml rename to .scss-lint.yml diff --git a/app/modules/components/filter/filter.scss b/app/modules/components/filter/filter.scss index 0f3abaf3..109b78cf 100644 --- a/app/modules/components/filter/filter.scss +++ b/app/modules/components/filter/filter.scss @@ -13,6 +13,14 @@ tg-filter { z-index: 1; .filters-applied { padding: 0 1rem 1rem; + .single-filter { + &:hover { + color: currentColor; + cursor: default; + opacity: .5; + transition: none; + } + } } h1, form { @@ -69,7 +77,7 @@ tg-filter { transition: color .2s ease-in; &:hover, &.selected { - background-color: rgba(darken($whitish, 20%), 1); + background-color: rgba(darken($whitish, 10%), 1); color: $grayer; transition: background-color .2s ease-in; .icon { @@ -92,7 +100,7 @@ tg-filter { @include font-type(text); @include clearfix; align-items: center; - background: darken($whitish, 10%); // Fallback + background: darken($whitish, 5%); cursor: pointer; display: flex; justify-content: space-between; @@ -101,7 +109,7 @@ tg-filter { padding-right: .5rem; position: relative; &:hover { - color: $grayer; + background: darken($whitish, 8%); opacity: 1; transition: opacity .2s linear; } @@ -127,6 +135,7 @@ tg-filter { top: 0; } .remove-filter { + cursor: pointer; display: block; svg { fill: $gray; diff --git a/gulpfile.js b/gulpfile.js index f06b4201..f141184e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -270,7 +270,7 @@ gulp.task("scss-lint", [], function() { var sassFiles = paths.sass.concat(themes.current.customScss, ignore); return gulp.src(sassFiles) - .pipe(gulpif(!isDeploy, cache(scsslint({endless: true, sync: true, config: "scsslint.yml"}), { + .pipe(gulpif(!isDeploy, cache(scsslint({endless: true, sync: true, config: ".scss-lint.yml"}), { success: function(scsslintFile) { return scsslintFile.scsslint.success; }, From 5288603c0fd428f9d12da2bf1c8071f4ec4a480d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 20 Jan 2017 09:57:37 +0100 Subject: [PATCH 101/175] [i18n] Update locales --- app/locales/taiga/locale-es.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 5f020760..330a4a01 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -41,7 +41,7 @@ "LOGOUT": "Cerrar sesión", "EXTERNAL_USER": "un usuario externo", "GENERIC_ERROR": "Uno de nuestros Oompa Loompas dice {{error}}.", - "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", + "IOCAINE_TEXT": "Este miembro se siente un poco abrumado por esta tarea. Será inmune al veneno de la iocaína con el tiempo con tu ayuda, Ahora, puede necesitar un abrazo ;-).", "CLIENT_REQUIREMENT": "Requerimiento de cliente es un nuevo requisito que no se esperaba y es necesario que forme parte del proyecto.", "TEAM_REQUIREMENT": "Requerimiento del equipo es un nuevo requisito que debe existir en el proyecto pero que no conllevará ningún coste para el cliente.", "OWNER": "Dueño del proyecto", @@ -227,7 +227,7 @@ } }, "WYSIWYG": { - "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", + "OUTDATED": "Otra persona ha realizado cambios durante tu edición. Comprueba la nueva versión en la pestaña de activiy antes de guardar los cambios.", "ATTACH_FILE_HELP": "Adjunte archivos arrastrando y soltando dentro del area de texto", "ATTACH_FILE_HELP_SAVE_FIRST": "Si desea guardar adjuntos guarde primero, luego arrastre y suelte los archivos en el area de texto mas arriba", "MARKDOWN_HELP": "Ayuda de sintaxis Markdown" @@ -518,7 +518,7 @@ "RECRUITING": "¿Este proyecto está buscando a gente?", "RECRUITING_MESSAGE": "¿Qué estás buscando?", "RECRUITING_PLACEHOLDER": "Define el perfil de lo que estás buscando", - "FEEDBACK": "Receive feedback from Taiga users?", + "FEEDBACK": "¿Recibir feedback de los usuarios de Taiga?", "PUBLIC_PROJECT": "Proyecto público", "PRIVATE_PROJECT": "Proyecto privado", "PRIVATE_OR_PUBLIC": "¿Cuál es la diferencia entre proyecto público y privado?", @@ -571,7 +571,7 @@ "ISSUE_DESCRIPTION": "Atributos personalizados de peticiones", "ISSUE_ADD": "Añadir un atributo personalizado en las peticiones", "FIELD_TYPE_TEXT": "Texto", - "FIELD_TYPE_RICHTEXT": "Rich text", + "FIELD_TYPE_RICHTEXT": "Texto enriquecido", "FIELD_TYPE_MULTI": "Multilínea", "FIELD_TYPE_DATE": "Fecha", "FIELD_TYPE_URL": "Url" @@ -963,7 +963,7 @@ }, "CONTACT_BUTTON": { "CONTACT_TITLE": "Contacta con el equipo de proyecto", - "CONTACT_BUTTON": "Contact the project" + "CONTACT_BUTTON": "Contacta con el proyecto" } }, "LIGHTBOX": { @@ -1053,7 +1053,7 @@ "CONTACT_PROJECT": { "TITLE": "Enviar email a", "WARNING": "Los administradores del proyecto recibirán el email", - "PLACEHOLDER": "Write your message", + "PLACEHOLDER": "Escribe tu mensaje", "SEND": "Enviar" } }, @@ -1106,7 +1106,7 @@ "CLOSE": "Cerrar", "SYNCHRONIZE_LINK": "sincronizar con la Tribu Taiga", "PUBLISH_MORE_INFO_TITLE": "Necesita a alguien para esta tarea?", - "PUBLISH_MORE_INFO_TEXT": "

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

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

    " + "PUBLISH_MORE_INFO_TEXT": "

    Si necesitas ayuda con una tarea en particular, puedes crear 'gigs' en Taiga Tribe y recibir ayuda de todo el mundo. Podrás controlar y gestionar el 'gig' disfrutando de una gran comunidad deseosa de contribuir.

    TaigaTribe es el hermano ideal de Taiga. Ambas plataformas pueden vivir separadamente pero creemos que hay mucho poder en usarlas combinadas, por lo que estamos asegurándonos de que la integración entre ambas funcione como un tiro.

    " }, "FIELDS": { "TEAM_REQUIREMENT": "Requerido por el Equipo", @@ -1236,10 +1236,10 @@ "HIDE": "Ocultar etiquetas" }, "FORECASTING": { - "TITLE": "Velocity forecasting", - "BACKLOG": "Display backlog", - "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", - "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." + "TITLE": "Previsión de velocidad", + "BACKLOG": "Mostrar el backlog", + "NEW_SPRINT": "Historias de Usuarios candidatas para el próximo sprint, basado en tu velocidad. Haga clic para crear un nuevo sprint.", + "CURRENT_SPRINT": "Historias de Usuarios candidatas para el sprint, basado en tu velocidad. Haga clic para añadirlas al sprint en curso." }, "TABLE": { "COLUMN_US": "Historias de Usuario", From ca404df58453e28b655e793333a52ac52110a98b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 20 Jan 2017 10:02:39 +0100 Subject: [PATCH 102/175] [i18n] Fix script --- scripts/manage_translations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/manage_translations.py b/scripts/manage_translations.py index b756efbd..92fb9ca6 100755 --- a/scripts/manage_translations.py +++ b/scripts/manage_translations.py @@ -84,7 +84,7 @@ You need transifex-client, install it. 1. Install transifex-client, use - $ pip install --upgrade transifex-client==0.11.1.beta + $ pip install --upgrade transifex-client==0.12.2 2. Create ~/.transifexrc file: From 338f0c77d960b2af5f363aeed84a9d4b57b4df69 Mon Sep 17 00:00:00 2001 From: xaviju Date: Fri, 20 Jan 2017 10:13:56 +0100 Subject: [PATCH 103/175] Remove outline provide fallback rangeslider --- app/modules/components/board-zoom/board-zoom.scss | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/modules/components/board-zoom/board-zoom.scss b/app/modules/components/board-zoom/board-zoom.scss index e8b88433..d04f643c 100644 --- a/app/modules/components/board-zoom/board-zoom.scss +++ b/app/modules/components/board-zoom/board-zoom.scss @@ -41,8 +41,10 @@ $contrast: 2; width: $track-width; &:focus { + outline: 0; + &::-webkit-slider-runnable-track { - background: lighten($track-color, $contrast); + background: lighten($primary-dark, $contrast); } &::-webkit-slider-thumb { box-shadow: 0 0 0 4px $thumb-shadow; From ebc70eb330b422544dc4750ffb90512232c385e0 Mon Sep 17 00:00:00 2001 From: xaviju Date: Fri, 20 Jan 2017 12:16:11 +0100 Subject: [PATCH 104/175] Fix membership table avatars --- .../admin/memberships-row-avatar.jade | 15 +++++--- .../modules/admin/admin-membership-table.jade | 4 +- .../modules/admin/admin-membership-table.scss | 37 +++++++------------ 3 files changed, 25 insertions(+), 31 deletions(-) diff --git a/app/partials/admin/memberships-row-avatar.jade b/app/partials/admin/memberships-row-avatar.jade index 89411cb6..53c66556 100644 --- a/app/partials/admin/memberships-row-avatar.jade +++ b/app/partials/admin/memberships-row-avatar.jade @@ -1,10 +1,11 @@ -figure.avatar +.avatar img( + src!="<%- imgurl %>" + alt!="<%- full_name %>" style!="background-color: <%- bg %>" - src!="<%- imgurl %>", alt!="<%- full_name %>" ) - figcaption - div.name + .user-data + .name span(ng-non-bindable) <%- full_name %> <% if (isOwner) { %> tg-svg.owner-badge( @@ -12,6 +13,8 @@ figure.avatar svg-title-translate="COMMON.OWNER" ) <% } %> - div - span.pending <%- pending %> + .data span.email <%- email %> + <% if (pending) { %> + span.pending <%- pending %> + <% } %> diff --git a/app/partials/includes/modules/admin/admin-membership-table.jade b/app/partials/includes/modules/admin/admin-membership-table.jade index 8ddb19f5..c88d8abc 100644 --- a/app/partials/includes/modules/admin/admin-membership-table.jade +++ b/app/partials/includes/modules/admin/admin-membership-table.jade @@ -1,11 +1,11 @@ section.admin-membership-table.basic-table - div.row.title + .row.title div.header-member(translate="ADMIN.MEMBERSHIP.COLUMN_MEMBER") div.header-admin(translate="ADMIN.MEMBERSHIP.COLUMN_ADMIN") div.header-role(translate="ADMIN.MEMBERSHIP.COLUMN_ROLE") div.header-status(translate="ADMIN.MEMBERSHIP.COLUMN_STATUS") - div.row(ng-repeat="member in memberships") + .row(ng-repeat="member in memberships") div.row-member(tg-memberships-row-avatar="member") div.row-admin(tg-memberships-row-admin-checkbox="member") div.row-role(tg-memberships-row-role-selector="member") diff --git a/app/styles/modules/admin/admin-membership-table.scss b/app/styles/modules/admin/admin-membership-table.scss index 0312b8f1..126f3a23 100644 --- a/app/styles/modules/admin/admin-membership-table.scss +++ b/app/styles/modules/admin/admin-membership-table.scss @@ -5,32 +5,23 @@ .avatar { align-items: center; display: flex; - justify-content: flex-start; - figcaption { - margin-left: 1rem; - width: 75%; - span { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 100%; - } - } img { - flex-basis: 35px; - flex-grow: 1; - max-width: 35px; + border-radius: 4px; + flex-grow: 0; + margin: 0 .5rem 0 .3rem; + width: 50px; } - .name, - .email { - display: block; - width: 100%; + .data { + @include font-type(light); + @include font-size(small); + color: $gray; + margin-top: .2rem; } - .name { - @include font-type(bold); - } - .email { - color: $gray-light; + .pending { + @include font-type(normal); + color: $red-light; + display: inline-block; + padding-left: .3rem; } } .header-role, From 18eb3273455aa8341cef4ffe98af953e0e1cdac5 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 23 Jan 2017 08:32:12 +0100 Subject: [PATCH 105/175] description rtl support --- .../wysiwyg/wysiwyg.directive.coffee | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 5568ead1..df1c8bc2 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -56,6 +56,23 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad wysiwygCodeHightlighterService.addCodeLanguageSelectors(elm) + + AlignRightButton = MediumEditor.extensions.button.extend({ + name: 'rtl', + init: () -> + this.button = this.document.createElement('button') + this.button.classList.add('medium-editor-action') + this.button.innerHTML = 'RTL' + this.button.title = 'RTL' + this.on(this.button, 'click', this.handleClick.bind(this)) + + getButton: () -> + return this.button + handleClick: (event) -> + document.execCommand('justifyRight', false) + + }) + # MediumEditor extension to add CodeButton = MediumEditor.extensions.button.extend({ name: 'code', @@ -294,12 +311,14 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad 'h3', 'quote', 'removeFormat', + 'rtl', 'code' ] }, extensions: { code: new CodeButton(), autolist: new AutoList(), + alignright: new AlignRightButton(), mediumMention: new MentionExtension({ getItems: (mention, mentionCb) -> wysiwygMentionService.search(mention).then(mentionCb) From eda2f74c45a904ada9ec02c3f5fac365c9387500 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 25 Jan 2017 08:22:45 +0100 Subject: [PATCH 106/175] refresh current project on save attributes --- app/coffee/modules/admin/project-values.coffee | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index 772ea749..7dd31a0f 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -134,7 +134,7 @@ module.controller("ProjectValuesController", ProjectValuesController) ## Project values directive ############################################################################# -ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope) -> +ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope, projectService) -> ## Drag & Drop Link linkDragAndDrop = ($scope, $el, $attrs) -> @@ -214,6 +214,8 @@ ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame, $tra row.addClass("hidden") row.siblings(".visualization").removeClass('hidden') + projectService.fetchProject() + promise.then null, (data) -> form.setErrors(data) @@ -328,7 +330,7 @@ ProjectValuesDirective = ($log, $repo, $confirm, $location, animationFrame, $tra return {link:link} module.directive("tgProjectValues", ["$log", "$tgRepo", "$tgConfirm", "$tgLocation", "animationFrame", - "$translate", "$rootScope", ProjectValuesDirective]) + "$translate", "$rootScope", "tgProjectService", ProjectValuesDirective]) ############################################################################# From dad8022f4e0113a7a7ebdc823f7e0b1e6499eca5 Mon Sep 17 00:00:00 2001 From: xaviju Date: Wed, 25 Jan 2017 09:15:21 +0100 Subject: [PATCH 107/175] Visual enhancements --- app/styles/components/track-btn.scss | 4 ++-- csslintrc.json | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/styles/components/track-btn.scss b/app/styles/components/track-btn.scss index 62d76f5a..8fdab2bd 100644 --- a/app/styles/components/track-btn.scss +++ b/app/styles/components/track-btn.scss @@ -11,13 +11,13 @@ padding: 0; &.active { .track-inner { - background: rgba($primary-light, .2); + background: rgba($primary-light, .4); } .icon { fill: $primary; } .track-button-counter { - background: rgba($primary-light, .4); + background: rgba($primary-light, .6); } } &.is-hover { diff --git a/csslintrc.json b/csslintrc.json index 3f615cc3..41704e31 100644 --- a/csslintrc.json +++ b/csslintrc.json @@ -21,5 +21,6 @@ "floats": false, "fallback-colors": false, "adjoining-classes": false, - "qualified-headings": false + "qualified-headings": false, + "outline-none": false } From 868f8707218a353a487d6ea8d28b0ef7e21be85b Mon Sep 17 00:00:00 2001 From: xaviju Date: Wed, 25 Jan 2017 09:26:31 +0100 Subject: [PATCH 108/175] Typo --- app/locales/taiga/locale-en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index a5badc03..60e1d524 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -230,8 +230,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown syntax help" }, "PERMISIONS_CATEGORIES": { From 4999b7918148058c40eeb10287413556b82bb4e3 Mon Sep 17 00:00:00 2001 From: xaviju Date: Wed, 25 Jan 2017 10:08:10 +0100 Subject: [PATCH 109/175] Fixes long status name wrapping --- app/styles/modules/backlog/backlog-table.scss | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/styles/modules/backlog/backlog-table.scss b/app/styles/modules/backlog/backlog-table.scss index 61a4d5c7..eba8eb0d 100644 --- a/app/styles/modules/backlog/backlog-table.scss +++ b/app/styles/modules/backlog/backlog-table.scss @@ -32,8 +32,7 @@ width: 100%; } .status { - flex-basis: 120px; - flex-grow: 0; + flex-grow: 1; flex-shrink: 0; } .points { From 2a02b89cc63b5044d31c4123a96cc773800a7a16 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 1 Feb 2017 10:25:12 +0100 Subject: [PATCH 110/175] new editor toobar icons --- app/index.jade | 1 + .../wysiwyg/wysiwyg.directive.coffee | 85 +++++++++++++++---- app/modules/components/wysiwyg/wysiwyg.scss | 12 ++- app/svg/editor.svg | 60 +++++++++++++ 4 files changed, 140 insertions(+), 18 deletions(-) create mode 100644 app/svg/editor.svg diff --git a/app/index.jade b/app/index.jade index 7ba7bb63..ae7d1734 100644 --- a/app/index.jade +++ b/app/index.jade @@ -51,3 +51,4 @@ html(lang="en") script(src="/#{v}/js/templates.js") script(src="/#{v}/js/app-loader.js") include svg/sprite.svg + include svg/editor.svg diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index df1c8bc2..738cb508 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -60,9 +60,12 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad AlignRightButton = MediumEditor.extensions.button.extend({ name: 'rtl', init: () -> + option = _.find this.base.options.toolbar.buttons, (it) -> + it.name == 'rtl' + this.button = this.document.createElement('button') this.button.classList.add('medium-editor-action') - this.button.innerHTML = 'RTL' + this.button.innerHTML = option.contentDefault || 'RTL' this.button.title = 'RTL' this.on(this.button, 'click', this.handleClick.bind(this)) @@ -73,13 +76,21 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad }) + getIcon = (icon) -> + return """ + + """ + # MediumEditor extension to add CodeButton = MediumEditor.extensions.button.extend({ name: 'code', init: () -> + option = _.find this.base.options.toolbar.buttons, (it) -> + it.name == 'code' + this.button = this.document.createElement('button') this.button.classList.add('medium-editor-action') - this.button.innerHTML = 'Code' + this.button.innerHTML = option.contentDefault || 'Code' this.button.title = 'Code' this.on(this.button, 'click', this.handleClick.bind(this)) @@ -299,20 +310,62 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad }, toolbar: { buttons: [ - 'bold', - 'italic', - 'strikethrough', - 'anchor', - 'image', - 'orderedlist', - 'unorderedlist', - 'h1', - 'h2', - 'h3', - 'quote', - 'removeFormat', - 'rtl', - 'code' + { + name: 'bold', + contentDefault: getIcon('editor-bold') + }, + { + name: 'italic', + contentDefault: getIcon('editor-italic') + }, + { + name: 'strikethrough', + contentDefault: getIcon('editor-cross-out') + }, + { + name: 'anchor', + contentDefault: getIcon('editor-link') + }, + { + name: 'image', + contentDefault: getIcon('editor-image') + }, + { + name: 'orderedlist', + contentDefault: getIcon('editor-list-n') + }, + { + name: 'unorderedlist', + contentDefault: getIcon('editor-list-o') + }, + { + name: 'h1', + contentDefault: getIcon('editor-h1') + }, + { + name: 'h2', + contentDefault: getIcon('editor-h2') + }, + { + name: 'h3', + contentDefault: getIcon('editor-h3') + }, + { + name: 'quote', + contentDefault: getIcon('editor-quote') + }, + { + name: 'removeFormat', + contentDefault: getIcon('editor-no-format') + }, + { + name: 'rtl', + contentDefault: getIcon('editor-rtl') + }, + { + name: 'code', + contentDefault: getIcon('editor-code') + } ] }, extensions: { diff --git a/app/modules/components/wysiwyg/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss index 2f10c1bc..fa4a822a 100644 --- a/app/modules/components/wysiwyg/wysiwyg.scss +++ b/app/modules/components/wysiwyg/wysiwyg.scss @@ -250,6 +250,14 @@ tg-wysiwyg { } // Override medium styles -.medium-editor-toolbar li .medium-editor-button-active { - color: $primary-light; +.medium-editor-toolbar { + li .medium-editor-button-active { + color: $primary-light; + } + svg { + fill: $white; + } + button:hover svg { + fill: $primary-light; + } } diff --git a/app/svg/editor.svg b/app/svg/editor.svg new file mode 100644 index 00000000..352ac011 --- /dev/null +++ b/app/svg/editor.svg @@ -0,0 +1,60 @@ + + + + editor-list-o + + + + editor-rtl + + + + editor-quote + + + + editor-list-n + + + + editor-no-format + + + + editor-link + + + + editor-italic + + + + editor-image + + + + editor-h3 + + + + editor-h1 + + + + editor-h2 + + + + editor-cross-out + + + + editor-code + + + + editor-bold + + + + From c262d77ca85b28fcde55e2adb5693bf593d42e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 3 Feb 2017 10:36:11 +0100 Subject: [PATCH 111/175] Change node version useed in TravisCI --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index bd5967a1..9aaf96e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: - - "4.1" + - "node" before_install: - export CHROME_BIN=chromium-browser - export DISPLAY=:99.0 From bfc580677db67a1359dbbd35165761bcd1a2ee5e Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 1 Feb 2017 15:09:45 +0100 Subject: [PATCH 112/175] Fix some issues in the wysiwyg editor --- .../wysiwyg-code-hightlighter.service.coffee | 7 +- .../wysiwyg/wysiwyg.directive.coffee | 32 +++++++++- app/modules/components/wysiwyg/wysiwyg.scss | 10 +-- .../components/wysiwyg/wysiwyg.service.coffee | 1 + app/partials/issue/issues-detail.jade | 2 +- app/styles/vendor/codehilite.github.css | 64 ------------------- package.json | 4 +- 7 files changed, 42 insertions(+), 78 deletions(-) delete mode 100644 app/styles/vendor/codehilite.github.css diff --git a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee index 06c35b5a..bdb123a7 100644 --- a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee @@ -47,6 +47,7 @@ class WysiwygCodeHightlighterService code.classList.add('has-code-lan-selector') # prevent multi instanciate currentLan = @.getLanguageInClassList(code.classList) + code.parentNode.classList.add('language-' + currentLan) id = new Date().getTime() @@ -63,8 +64,9 @@ class WysiwygCodeHightlighterService languageClass = _.find code.classList, (className) -> return className && className.indexOf('language-') != -1 - code.classList.remove(languageClass.replace('language-', '')) - code.classList.remove(languageClass) + if languageClass + code.classList.remove(languageClass.replace('language-', '')) + code.classList.remove(languageClass) code.classList.add('language-' + lan) code.classList.add(lan) @@ -73,7 +75,6 @@ class WysiwygCodeHightlighterService code.dataset.tab = tab - if !code.dataset.tabId code.dataset.tabId = id code.classList.add(id) diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 738cb508..2d8cfbae 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -72,7 +72,11 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad getButton: () -> return this.button handleClick: (event) -> - document.execCommand('justifyRight', false) + range = MediumEditor.selection.getSelectionRange(document) + if range.commonAncestorContainer.parentNode.style.textAlign == 'right' + document.execCommand('justifyLeft', false) + else + document.execCommand('justifyRight', false) }) @@ -108,6 +112,13 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad addCodeBlockAndHightlight(range, this.base) }) + CustomPasteHandler = MediumEditor.extensions.paste.extend({ + doPaste: (pastedHTML, pastedPlain, editable) -> + html = MediumEditor.util.htmlEntities(pastedPlain); + + MediumEditor.util.insertHTMLCommand(this.document, html); + }) + # bug #
    the enter key press doesn't work oldIsBlockContainer = MediumEditor.util.isBlockContainer @@ -369,6 +380,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad ] }, extensions: { + paste: new CustomPasteHandler(), code: new CodeButton(), autolist: new AutoList(), alignright: new AlignRightButton(), @@ -398,6 +410,24 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad mediumInstance.subscribe 'editableDrop', (event) -> $scope.onUploadFile({files: event.dataTransfer.files, cb: uploadEnd}) + editorMedium.on 'keydown', (e) -> + code = if e.keyCode then e.keyCode else e.which + range = MediumEditor.selection.getSelectionRange(document) + codeBlock = isCodeBlockSelected(range, document) + selection = window.getSelection() + + if code == 13 && !e.shiftKey && selection.focusOffset == _.trimEnd(selection.focusNode.textContent).length + e.preventDefault() + document.execCommand('insertHTML', false, '


    ') + + lastP = $('#last-p').attr('id', '') + + range = document.createRange() + range.selectNodeContents(lastP[0]) + range.collapse(true); + + MediumEditor.selection.selectRange(document, range) + mediumInstance.subscribe 'editableKeydown', (e) -> code = if e.keyCode then e.keyCode else e.which diff --git a/app/modules/components/wysiwyg/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss index fa4a822a..4bfce409 100644 --- a/app/modules/components/wysiwyg/wysiwyg.scss +++ b/app/modules/components/wysiwyg/wysiwyg.scss @@ -88,22 +88,18 @@ margin: 0; } } - pre, - code { + pre:not([class*="language-"]) { @include font-size(small); background: lighten($grayer, 10%); color: $whitish; direction: ltr; font-family: 'courier new', 'monospace'; + line-height: 1.4rem; margin-bottom: 1rem; overflow: auto; + padding: 1rem; unicode-bidi: embed; white-space: pre-wrap; - - } - pre { - line-height: 1.4rem; - padding: 1rem; } table { border: $gray-light 1px solid; diff --git a/app/modules/components/wysiwyg/wysiwyg.service.coffee b/app/modules/components/wysiwyg/wysiwyg.service.coffee index 1786417c..c4ee7eba 100644 --- a/app/modules/components/wysiwyg/wysiwyg.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.service.coffee @@ -98,6 +98,7 @@ class WysiwygService converters: [cleanIssueConverter, codeLanguageConverter] }) + return markdown getHTML: (text) -> diff --git a/app/partials/issue/issues-detail.jade b/app/partials/issue/issues-detail.jade index 91a01ef1..2b554160 100644 --- a/app/partials/issue/issues-detail.jade +++ b/app/partials/issue/issues-detail.jade @@ -33,7 +33,7 @@ div.wrapper( permissions="modify_issue" ) tg-created-by-display.ticket-created-by(ng-model="issue") - + section.duty-content tg-item-wysiwyg( type="issue", diff --git a/app/styles/vendor/codehilite.github.css b/app/styles/vendor/codehilite.github.css deleted file mode 100644 index 6121071b..00000000 --- a/app/styles/vendor/codehilite.github.css +++ /dev/null @@ -1,64 +0,0 @@ -.codehilite .hll { background-color: #49483e } -.codehilite .c { color: #75715e } /* Comment */ -.codehilite .err { color: #960050; background-color: #1e0010 } /* Error */ -.codehilite .k { color: #66d9ef } /* Keyword */ -.codehilite .l { color: #ae81ff } /* Literal */ -.codehilite .n { color: #f8f8f2 } /* Name */ -.codehilite .o { color: #f92672 } /* Operator */ -.codehilite .p { color: #f8f8f2 } /* Punctuation */ -.codehilite .cm { color: #75715e } /* Comment.Multiline */ -.codehilite .cp { color: #75715e } /* Comment.Preproc */ -.codehilite .c1 { color: #75715e } /* Comment.Single */ -.codehilite .cs { color: #75715e } /* Comment.Special */ -.codehilite .ge { font-style: italic } /* Generic.Emph */ -.codehilite .gs { font-weight: bold } /* Generic.Strong */ -.codehilite .kc { color: #66d9ef } /* Keyword.Constant */ -.codehilite .kd { color: #66d9ef } /* Keyword.Declaration */ -.codehilite .kn { color: #f92672 } /* Keyword.Namespace */ -.codehilite .kp { color: #66d9ef } /* Keyword.Pseudo */ -.codehilite .kr { color: #66d9ef } /* Keyword.Reserved */ -.codehilite .kt { color: #66d9ef } /* Keyword.Type */ -.codehilite .ld { color: #e6db74 } /* Literal.Date */ -.codehilite .m { color: #ae81ff } /* Literal.Number */ -.codehilite .s { color: #e6db74 } /* Literal.String */ -.codehilite .na { color: #a6e22e } /* Name.Attribute */ -.codehilite .nb { color: #f8f8f2 } /* Name.Builtin */ -.codehilite .nc { color: #a6e22e } /* Name.Class */ -.codehilite .no { color: #66d9ef } /* Name.Constant */ -.codehilite .nd { color: #a6e22e } /* Name.Decorator */ -.codehilite .ni { color: #f8f8f2 } /* Name.Entity */ -.codehilite .ne { color: #a6e22e } /* Name.Exception */ -.codehilite .nf { color: #a6e22e } /* Name.Function */ -.codehilite .nl { color: #f8f8f2 } /* Name.Label */ -.codehilite .nn { color: #f8f8f2 } /* Name.Namespace */ -.codehilite .nx { color: #a6e22e } /* Name.Other */ -.codehilite .py { color: #f8f8f2 } /* Name.Property */ -.codehilite .nt { color: #f92672 } /* Name.Tag */ -.codehilite .nv { color: #f8f8f2 } /* Name.Variable */ -.codehilite .ow { color: #f92672 } /* Operator.Word */ -.codehilite .w { color: #f8f8f2 } /* Text.Whitespace */ -.codehilite .mf { color: #ae81ff } /* Literal.Number.Float */ -.codehilite .mh { color: #ae81ff } /* Literal.Number.Hex */ -.codehilite .mi { color: #ae81ff } /* Literal.Number.Integer */ -.codehilite .mo { color: #ae81ff } /* Literal.Number.Oct */ -.codehilite .sb { color: #e6db74 } /* Literal.String.Backtick */ -.codehilite .sc { color: #e6db74 } /* Literal.String.Char */ -.codehilite .sd { color: #e6db74 } /* Literal.String.Doc */ -.codehilite .s2 { color: #e6db74 } /* Literal.String.Double */ -.codehilite .se { color: #ae81ff } /* Literal.String.Escape */ -.codehilite .sh { color: #e6db74 } /* Literal.String.Heredoc */ -.codehilite .si { color: #e6db74 } /* Literal.String.Interpol */ -.codehilite .sx { color: #e6db74 } /* Literal.String.Other */ -.codehilite .sr { color: #e6db74 } /* Literal.String.Regex */ -.codehilite .s1 { color: #e6db74 } /* Literal.String.Single */ -.codehilite .ss { color: #e6db74 } /* Literal.String.Symbol */ -.codehilite .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ -.codehilite .vc { color: #f8f8f2 } /* Name.Variable.Class */ -.codehilite .vg { color: #f8f8f2 } /* Name.Variable.Global */ -.codehilite .vi { color: #f8f8f2 } /* Name.Variable.Instance */ -.codehilite .il { color: #ae81ff } /* Literal.Number.Integer.Long */ - -.codehilite .gh { } /* Generic Heading & Diff Header */ -.codehilite .gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */ -.codehilite .gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */ -.codehilite .gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */ diff --git a/package.json b/package.json index a54865f1..4d158b25 100644 --- a/package.json +++ b/package.json @@ -125,14 +125,14 @@ "lodash": "^4.16.4", "markdown-it": "^8.0.1", "markdown-it-task-lists": "^1.4.1", - "medium-editor": "^5.21.1", + "medium-editor": "^5.22.2", "medium-editor-autolist": "git+https://github.com/gruberro/medium-editor-autolist.git#add-package-json", "medium-editor-tc-mention": "^2.2.4", "messageformat": "^1.0.2", "moment": "^2.15.1", "ng-infinite-scroll": "^1.3.0", "pikaday": "^1.4.0", - "prismjs": "^1.5.1", + "prismjs": "^1.6.0", "raven-js": "^3.7.0", "showdown": "^1.4.3", "to-markdown": "^3.0.1" From 160bff7783604fec8e856b6b84b290db8d433746 Mon Sep 17 00:00:00 2001 From: xaviju Date: Thu, 26 Jan 2017 13:56:14 +0100 Subject: [PATCH 113/175] Suggest/invite members --- .travis.yml | 13 +- CHANGELOG.md | 1 + app/coffee/modules/admin/lightboxes.coffee | 106 ----------- app/coffee/utils.coffee | 3 + app/locales/taiga/locale-en.json | 6 + .../invite-members-form.controller.coffee | 80 ++++++++ ...invite-members-form.controller.spec.coffee | 134 +++++++++++++ .../invite-members-form.directive.coffee | 41 ++++ .../invite-members-form.jade | 69 +++++++ .../invite-members-form.scss | 67 +++++++ .../lightbox-add-members.controller.coffee | 74 +++++++ ...ightbox-add-members.controller.spec.coffee | 180 ++++++++++++++++++ .../lightbox-add-members.directive.coffee | 33 ++++ .../invite-members/lightbox-add-members.jade | 18 ++ .../invite-members/lightbox-add-members.scss | 6 + .../suggest-add-members.controller.coffee | 39 ++++ ...suggest-add-members.controller.spec.coffee | 79 ++++++++ .../suggest-add-members.directive.coffee | 34 ++++ .../suggest-add-members.jade | 31 +++ .../suggest-add-members.scss | 78 ++++++++ .../resources/users-resource.service.coffee | 7 +- app/modules/services/user.service.coffee | 4 +- .../admin/memberships-warning-message.jade | 8 +- app/styles/modules/common/lightbox.scss | 77 -------- e2e/helpers/admin-memberships.js | 25 ++- e2e/suites/admin/members.e2e.js | 25 ++- 26 files changed, 1026 insertions(+), 212 deletions(-) create mode 100644 app/modules/invite-members/invite-members-form/invite-members-form.controller.coffee create mode 100644 app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee create mode 100644 app/modules/invite-members/invite-members-form/invite-members-form.directive.coffee create mode 100644 app/modules/invite-members/invite-members-form/invite-members-form.jade create mode 100644 app/modules/invite-members/invite-members-form/invite-members-form.scss create mode 100644 app/modules/invite-members/lightbox-add-members.controller.coffee create mode 100644 app/modules/invite-members/lightbox-add-members.controller.spec.coffee create mode 100644 app/modules/invite-members/lightbox-add-members.directive.coffee create mode 100644 app/modules/invite-members/lightbox-add-members.jade create mode 100644 app/modules/invite-members/lightbox-add-members.scss create mode 100644 app/modules/invite-members/suggest-add-members/suggest-add-members.controller.coffee create mode 100644 app/modules/invite-members/suggest-add-members/suggest-add-members.controller.spec.coffee create mode 100644 app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee create mode 100644 app/modules/invite-members/suggest-add-members/suggest-add-members.jade create mode 100644 app/modules/invite-members/suggest-add-members/suggest-add-members.scss diff --git a/.travis.yml b/.travis.yml index 9aaf96e9..f5617c42 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,17 @@ language: node_js +dist: trusty node_js: - "node" before_install: - - export CHROME_BIN=chromium-browser - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - - travis_retry npm install -g gulp + - sudo apt-get update + - sudo apt-get install -y libappindicator1 fonts-liberation + - wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb + - sudo dpkg -i google-chrome*.deb install: - travis_retry npm install before_script: + - export CHROME_BIN=/usr/bin/google-chrome + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + - travis_retry npm install -g gulp - gulp deploy diff --git a/CHANGELOG.md b/CHANGELOG.md index ed9df575..bbb9a4ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Add rich text custom fields (with a wysiwyg editor like descreption or comments). - Add thumbnails and preview for PSD files. - Add thumbnails and preview for SVG files. +- Improve add-members form: Now users can select between their contacts or type an email. - i18n: - Add japanese (ja) translation. - Add korean (ko) translation. diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee index 9802d72a..5f8d632a 100644 --- a/app/coffee/modules/admin/lightboxes.coffee +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -27,112 +27,6 @@ debounce = @.taiga.debounce module = angular.module("taigaKanban") -############################################################################# -## Create Members Lightbox Directive -############################################################################# - -class LightboxAddMembersController - @.$inject = [ - "$scope", - "lightboxService", - "tgLoader", - "$tgConfirm", - "$tgResources", - "$rootScope", - ] - - constructor: (@scope, @lightboxService, @tgLoader, @confirm, @rs, @rootScope) -> - @._defaultMaxInvites = 4 - @._defaultRole = @.project.roles[0].id - @.form = null - @.submitInvites = false - @.canAddUsers = true - @.memberInvites = [] - - if @.project.max_memberships == null - @.membersLimit = @._defaultMaxInvites - else - pendingMembersCount = Math.max(@.project.max_memberships - @.project.total_memberships, 0) - @.membersLimit = Math.min(pendingMembersCount, @._defaultMaxInvites) - - @.addSingleMember() - - addSingleMember: () -> - @.memberInvites.push({email:'', role_id: @._defaultRole}) - - if @.memberInvites.length >= @.membersLimit - @.canAddUsers = false - @.showWarningMessage = (!@.canAddUsers && - @.project.total_memberships + @.memberInvites.length == @.project.max_memberships) - - removeSingleMember: (index) -> - @.memberInvites.splice(index, 1) - - @.canAddUsers = true - @.showWarningMessage = @.membersLimit == 1 - - submit: () -> - # Need to reset the form constrains - @.form.initializeFields() - @.form.reset() - return if not @.form.validate() - - @.memberInvites = _.filter(@.memberInvites, (invites) -> - invites.email != "") - - @.submitInvites = true - promise = @rs.memberships.bulkCreateMemberships( - @.project.id, - @.memberInvites, - @.invitationText - ) - promise.then( - @._onSuccessInvite.bind(this), - @._onErrorInvite.bind(this) - ) - - _onSuccessInvite: () -> - @.submitInvites = false - @rootScope.$broadcast("membersform:new:success") - @lightboxService.closeAll() - @confirm.notify("success") - - _onErrorInvite: (response) -> - @.submitInvites = false - errors = {} - _.each response.data.bulk_memberships, (value, index) => - if value.email - errors["email-#{index}"] = value.email[0] - if value.role - errors["role-#{index}"] = value.role[0] - - @.form.setErrors(errors) - if response.data._error_message - @confirm.notify("error", response.data._error_message) - -module.controller("LbAddMembersController", LightboxAddMembersController) - - - -LightboxAddMembersDirective = (lightboxService) -> - link = (scope, el, attrs, ctrl) -> - lightboxService.open(el) - ctrl.form = el.find("form").checksley() - - return { - scope: {}, - bindToController: { - project: '=', - }, - controller: 'LbAddMembersController', - controllerAs: 'vm', - templateUrl: 'admin/lightbox-add-members.html', - link: link - } - -module.directive("tgLbAddMembers", ["lightboxService", LightboxAddMembersDirective]) - - ############################################################################# ## Warning message directive ############################################################################# diff --git a/app/coffee/utils.coffee b/app/coffee/utils.coffee index 7524f0c3..8a8f0b72 100644 --- a/app/coffee/utils.coffee +++ b/app/coffee/utils.coffee @@ -222,6 +222,8 @@ _.mixin isImage = (name) -> return name.match(/\.(jpe?g|png|gif|gifv|webm|svg|psd)/i) != null +isEmail = (name) -> + return name? and name.match(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/) != null isPdf = (name) -> return name.match(/\.(pdf)/i) != null @@ -286,6 +288,7 @@ taiga.stripTags = stripTags taiga.replaceTags = replaceTags taiga.defineImmutableProperty = defineImmutableProperty taiga.isImage = isImage +taiga.isEmail = isEmail taiga.isPdf = isPdf taiga.patch = patch taiga.getRandomDefaultColor = getRandomDefaultColor diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 60e1d524..ecf924b5 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -990,6 +990,12 @@ }, "ADD_MEMBER": { "TITLE": "New Member", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "If users are already registered on Taiga, they will be added automatically. Otherwise they will receive an invitation." }, "CREATE_ISSUE": { diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.controller.coffee b/app/modules/invite-members/invite-members-form/invite-members-form.controller.coffee new file mode 100644 index 00000000..263cb6ab --- /dev/null +++ b/app/modules/invite-members/invite-members-form/invite-members-form.controller.coffee @@ -0,0 +1,80 @@ +### +# Copyright (C) 2014-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: add-members.controller.coffee +### + +taiga = @.taiga + + +class InviteMembersFormController + @.$inject = [ + "tgProjectService", + "$tgResources", + "lightboxService", + "$tgConfirm", + "$rootScope" + ] + + constructor: (@projectService, @rs, @lightboxService, @confirm, @rootScope) -> + @.project = @projectService.project + @.roles = @projectService.project.get('roles') + @.rolesValues = {} + @.loading = false + @.defaultMaxInvites = 4 + + _areRolesValidated: () -> + Object.defineProperty @, 'areRolesValidated', { + get: () => + roleIds = _.filter Object.values(@.rolesValues), (it) -> return it + return roleIds.length == @.contactsToInvite.size + @.emailsToInvite.size + } + + _checkLimitMemberships: () -> + if @.project.get('max_memberships') == null + @.membersLimit = @.defaultMaxInvites + else + pendingMembersCount = Math.max(@.project.get('max_memberships') - @.project.get('total_memberships'), 0) + @.membersLimit = Math.min(pendingMembersCount, @.defaultMaxInvites) + + @.showWarningMessage = @.membersLimit < @.defaultMaxInvites + + sendInvites: () -> + @.setInvitedContacts = [] + _.forEach(@.rolesValues, (key, value) => + @.setInvitedContacts.push({ + 'role_id': key + 'username': value + }) + ) + @.loading = true + @rs.memberships.bulkCreateMemberships( + @.project.get('id'), + @.setInvitedContacts, + @.inviteContactsMessage + ) + .then (response) => # On success + @.loading = false + @lightboxService.closeAll() + @rootScope.$broadcast("membersform:new:success") + @confirm.notify('success') + .catch (response) => # On error + @.loading = false + if response.data._error_message + @confirm.notify("error", response.data._error_message) + + +angular.module("taigaAdmin").controller("InviteMembersFormCtrl", InviteMembersFormController) diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee b/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee new file mode 100644 index 00000000..09e809f9 --- /dev/null +++ b/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee @@ -0,0 +1,134 @@ +### +# Copyright (C) 2014-2016 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: invite-members-form.controller.spec.coffee +### + +describe "InviteMembersFormController", -> + inviteMembersFormCtrl = null + provide = null + controller = null + mocks = {} + + _mockProjectService = () -> + mocks.projectService = { + project: sinon.stub() + } + + provide.value "tgProjectService", mocks.projectService + + _mockTgResources = () -> + mocks.tgResources = { + memberships: { + bulkCreateMemberships: sinon.stub() + } + } + + provide.value "$tgResources", mocks.tgResources + + _mockLightboxService = () -> + mocks.lightboxService = { + closeAll: sinon.stub() + } + + provide.value "lightboxService", mocks.lightboxService + + _mockTgConfirm = () -> + mocks.tgConfirm = { + notify: sinon.stub() + } + + provide.value "$tgConfirm", mocks.tgConfirm + + _mockRootScope = -> + mocks.rootScope = { + $broadcast: sinon.stub() + } + + provide.value("$rootScope", mocks.rootScope) + + _mocks = () -> + module ($provide) -> + provide = $provide + _mockProjectService() + _mockTgResources() + _mockLightboxService() + _mockTgConfirm() + _mockRootScope() + return null + + beforeEach -> + module "taigaAdmin" + + _mocks() + + inject ($controller) -> + controller = $controller + + mocks.projectService.project = Immutable.fromJS([{ + 'roles': 'role1' + }]) + + it "check limit memberships - no limit", () -> + inviteMembersFormCtrl = controller "InviteMembersFormCtrl" + + inviteMembersFormCtrl.project = Immutable.fromJS({ + 'max_memberships': null, + }) + + inviteMembersFormCtrl.defaultMaxInvites = 4 + + inviteMembersFormCtrl._checkLimitMemberships() + expect(inviteMembersFormCtrl.membersLimit).to.be.equal(4) + expect(inviteMembersFormCtrl.showWarningMessage).to.be.false + + it "check limit memberships", () -> + inviteMembersFormCtrl = controller "InviteMembersFormCtrl" + + inviteMembersFormCtrl.project = Immutable.fromJS({ + 'max_memberships': 15, + 'total_memberships': 13 + }) + inviteMembersFormCtrl.defaultMaxInvites = 4 + + inviteMembersFormCtrl._checkLimitMemberships() + expect(inviteMembersFormCtrl.membersLimit).to.be.equal(2) + expect(inviteMembersFormCtrl.showWarningMessage).to.be.true + + + it "send invites", (done) -> + inviteMembersFormCtrl = controller "InviteMembersFormCtrl" + inviteMembersFormCtrl.project = Immutable.fromJS( + {'id': 1} + ) + inviteMembersFormCtrl.rolesValues = {'user1': 1} + inviteMembersFormCtrl.inviteContactsMessage = 'Message' + inviteMembersFormCtrl.loading = true + + promise = mocks.tgResources.memberships.bulkCreateMemberships.withArgs( + 1, + [{ + 'role_id': 1 + 'username': 'user1' + }], + 'Message' + ).promise().resolve() + + inviteMembersFormCtrl.sendInvites().then () -> + expect(inviteMembersFormCtrl.loading).to.be.false + expect(mocks.rootScope.$broadcast).to.have.been.calledWith("membersform:new:success") + expect(mocks.tgConfirm.notify).to.have.been.calledWith("success") + done() diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.directive.coffee b/app/modules/invite-members/invite-members-form/invite-members-form.directive.coffee new file mode 100644 index 00000000..4afd40bd --- /dev/null +++ b/app/modules/invite-members/invite-members-form/invite-members-form.directive.coffee @@ -0,0 +1,41 @@ +### +# Copyright (C) 2014-2016 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: invite-members.directive.coffee +### + +InviteMembersFormDirective = () -> + link = (scope, el, attrs, ctrl) -> + ctrl._areRolesValidated() + ctrl._checkLimitMemberships() + + return { + scope: {}, + templateUrl:"invite-members/invite-members-form/invite-members-form.html", + controller: "InviteMembersFormCtrl", + controllerAs: "vm", + bindToController: { + contactsToInvite: '<', + emailsToInvite: '=', + onDisplayContactList: '&', + onRemoveInvitedContact: '&', + onRemoveInvitedEmail: '&', + onSendInvites: '&' + }, + link: link + } + +angular.module("taigaAdmin").directive("tgInviteMembersForm", InviteMembersFormDirective) diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.jade b/app/modules/invite-members/invite-members-form/invite-members-form.jade new file mode 100644 index 00000000..b2642606 --- /dev/null +++ b/app/modules/invite-members/invite-members-form/invite-members-form.jade @@ -0,0 +1,69 @@ +form.invite-members-form(ng-submit="vm.sendInvites(vm.inviteContacts)") + ul.invite-members-form-list + li.invite-members-single.e2e-invite-members-single( + ng-repeat="contact in vm.contactsToInvite | toMutable track by contact.id" + ) + .invite-members-single-data + img.invite-members-single-avatar( + tg-avatar="contact" + alt="{{contact.full_name}}" + ) + span.invite-members-single-name {{contact.full_name}} + a.invite-members-single-remove.e2e-invite-members-single-remove( + href="" + ng-click="vm.onRemoveInvitedContact({contact: contact})" + translate="LIGHTBOX.ADD_MEMBER.REMOVE" + ) + select.invite-members-single-role.e2e-invite-members-single-role( + ng-model="vm.rolesValues[contact.username]" + id="add-member-suggest-role-dropdown" + ng-options="role.id as role.name for role in vm.roles | toMutable track by role.id" + required + ) + option( + value="" + selected="selected" + translate="LIGHTBOX.ADD_MEMBER.CHOOSE_ROLE" + ) + li.invite-members-single.e2e-invite-members-single( + ng-repeat="userMail in vm.emailsToInvite | toMutable" + ) + .invite-members-single-data + span.invite-members-single-email {{userMail.email}} + a.invite-members-single-remove.e2e-invite-members-single-remove( + href="" + ng-click="vm.onRemoveInvitedEmail({email: userMail})" + translate="LIGHTBOX.ADD_MEMBER.REMOVE" + ) + select.invite-members-single-role.e2e-invite-members-single-role( + ng-model="vm.rolesValues[userMail.email]" + id="add-email-suggest-role-dropdown" + ng-options="role.id as role.name for role in vm.roles | toMutable track by role.id" + required + ) + option( + value="" + translate="LIGHTBOX.ADD_MEMBER.CHOOSE_ROLE" + ) + .invite-members-single-new.e2e-invite-members-single-new( + ng-if="vm.contactsToInvite.size + vm.emailsToInvite.size < vm.membersLimit" + ) + tg-svg.invite-members-single-new-btn( + svg-icon="icon-add" + ng-click="vm.onDisplayContactList()" + ) + tg-lightbox-add-members-warning-message( + ng-if="vm.showWarningMessage" + project="vm.project" + ) + textarea.invite-members-single-msg( + ng-model="vm.inviteContactsMessage" + placeholder="{{'LIGHTBOX.ADD_MEMBER.PLACEHOLDER_INVITATION_TEXT' | translate}}" + ) + button.button-green.invite-members-single-send.e2e-invite-members-single-send( + type="submit" + translate="LIGHTBOX.ADD_MEMBER.INVITE" + ng-disabled="!vm.areRolesValidated" + tg-loading="vm.loading" + ) + p.invite-members-single-help(translate="LIGHTBOX.ADD_MEMBER.HELP_TEXT") diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.scss b/app/modules/invite-members/invite-members-form/invite-members-form.scss new file mode 100644 index 00000000..9f5099f9 --- /dev/null +++ b/app/modules/invite-members/invite-members-form/invite-members-form.scss @@ -0,0 +1,67 @@ +.invite-members-form { + border-top: 1px solid $whitish; + margin: 0 5rem; + .invite-members-form-list { + margin: 0; + margin-bottom: 1rem; + } + .invite-members-single { + align-items: center; + border-bottom: 1px solid $whitish; + display: flex; + justify-content: space-between; + padding: 1rem; + } + .invite-members-single-data { + align-items: center; + display: flex; + flex: 1; + } + .invite-members-single-avatar { + height: 4rem; + margin-right: 1rem; + width: 4rem; + } + .invite-members-single-remove { + color: $red-light; + margin-left: 1rem; + transition: color .2s; + &:hover { + color: $red; + } + } + .invite-members-single-role { + flex-basis: 40%; + flex-shrink: 0; + } + .invite-members-single-new { + align-items: center; + display: flex; + justify-content: center; + padding: 1rem 0; + .invite-members-single-new-btn { + cursor: pointer; + } + .icon-add { + @include svg-size(2rem); + fill: $grayer; + transition: fill .2s; + } + &:hover { + .icon-add { + fill: $primary-light; + } + } + } + .invite-members-single-send { + @include font-size(large); + display: block; + margin: 1.5rem 0 1rem; + padding: 1rem; + width: 100%; + } + .invite-members-single-help { + @include font-size(small); + @include font-type(light); + } +} diff --git a/app/modules/invite-members/lightbox-add-members.controller.coffee b/app/modules/invite-members/lightbox-add-members.controller.coffee new file mode 100644 index 00000000..5ad60891 --- /dev/null +++ b/app/modules/invite-members/lightbox-add-members.controller.coffee @@ -0,0 +1,74 @@ +### +# Copyright (C) 2014-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: add-members.controller.coffee +### + +taiga = @.taiga + +class AddMembersController + @.$inject = [ + "tgUserService", + "tgCurrentUserService", + "tgProjectService", + ] + + constructor: (@userService, @currentUserService, @projectService) -> + @.contactsToInvite = Immutable.List() + @.emailsToInvite = Immutable.List() + @.displayContactList = false + + _getContacts: () -> + userId = @currentUserService.getUser().get("id") + excludeProjectId = @projectService.project.get("id") + + @userService.getContacts(userId, excludeProjectId).then (contacts) => + @.contacts = contacts + + _filterContacts: (invited) -> + @.contacts = @.contacts.filter( (contact) => + contact.get('id') != invited.get('id') + ) + + inviteSuggested: (contact) -> + @.contactsToInvite = @.contactsToInvite.push(contact) + @._filterContacts(contact) + @.displayContactList = true + + removeContact: (invited) -> + @.contactsToInvite = @.contactsToInvite.filter( (contact) => + return contact.get('id') != invited.id + ) + invited = Immutable.fromJS(invited) + @.contacts = @.contacts.push(invited) + @.testEmptyContacts() + + inviteEmail: (email) -> + emailData = Immutable.Map({'email': email}) + @.emailsToInvite = @.emailsToInvite.push(emailData) + @.displayContactList = true + + removeEmail: (invited) -> + @.emailsToInvite = @.emailsToInvite.filter( (email) => + return email.get('email') != invited.email + ) + @.testEmptyContacts() + + testEmptyContacts: () -> + if @.emailsToInvite.size + @.contactsToInvite.size == 0 + @.displayContactList = false + +angular.module("taigaAdmin").controller("AddMembersCtrl", AddMembersController) diff --git a/app/modules/invite-members/lightbox-add-members.controller.spec.coffee b/app/modules/invite-members/lightbox-add-members.controller.spec.coffee new file mode 100644 index 00000000..edec3801 --- /dev/null +++ b/app/modules/invite-members/lightbox-add-members.controller.spec.coffee @@ -0,0 +1,180 @@ +### +# Copyright (C) 2014-2016 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: lightbox-add-members.controller.spec.coffee +### + +describe "AddMembersController", -> + addMembersCtrl = null + provide = null + controller = null + mocks = {} + + _mockUserService = () -> + mocks.userService = { + getContacts: sinon.stub() + } + + provide.value "tgUserService", mocks.userService + + _mockCurrentUser = () -> + mocks.currentUser = { + getUser: sinon.stub() + } + + provide.value "tgCurrentUserService", mocks.currentUser + + _mockProjectService = () -> + mocks.projectService = { + project: sinon.stub() + } + + provide.value "tgProjectService", mocks.projectService + + _mocks = () -> + module ($provide) -> + provide = $provide + _mockCurrentUser() + _mockUserService() + _mockProjectService() + return null + + beforeEach -> + module "taigaAdmin" + + _mocks() + + inject ($controller) -> + controller = $controller + + + it "get user contacts", (done) -> + + userId = 1 + excludeProjectId = 1 + + mocks.currentUser.getUser.returns(Immutable.fromJS({ + id: userId + })) + mocks.projectService.project = Immutable.fromJS({ + id: excludeProjectId + }) + + contacts = Immutable.fromJS({ + username: "username", + full_name_display: "full-name-display", + bio: "bio" + }) + + mocks.userService.getContacts.withArgs(userId, excludeProjectId).promise().resolve(contacts) + + addMembersCtrl = controller "AddMembersCtrl" + + addMembersCtrl._getContacts().then () -> + expect(addMembersCtrl.contacts).to.be.equal(contacts) + done() + + it "filterContacts", () -> + + addMembersCtrl = controller "AddMembersCtrl" + addMembersCtrl.contacts = Immutable.fromJS([ + {id: 1} + {id: 2} + ]) + invited = Immutable.fromJS({id: 1}) + + addMembersCtrl._filterContacts(invited) + + expect(addMembersCtrl.contacts.size).to.be.equal(1) + + it "invite suggested", () -> + addMembersCtrl = controller "AddMembersCtrl" + addMembersCtrl.contactsToInvite = Immutable.List() + addMembersCtrl.displayContactList = false + + contact = Immutable.fromJS({id: 1}) + + addMembersCtrl._filterContacts = sinon.stub() + + addMembersCtrl.inviteSuggested(contact) + expect(addMembersCtrl.contactsToInvite.size).to.be.equal(1) + expect(addMembersCtrl._filterContacts).to.be.calledWith(contact) + expect(addMembersCtrl.displayContactList).to.be.true + + it "remove contact", () -> + addMembersCtrl = controller "AddMembersCtrl" + addMembersCtrl.contactsToInvite = Immutable.fromJS([ + {id: 1} + {id: 2} + ]) + invited = {id: 1} + addMembersCtrl.contacts = Immutable.fromJS([]) + + addMembersCtrl.testEmptyContacts = sinon.stub() + + addMembersCtrl.removeContact(invited) + expect(addMembersCtrl.contactsToInvite.size).to.be.equal(1) + expect(addMembersCtrl.contacts.size).to.be.equal(1) + expect(addMembersCtrl.testEmptyContacts).to.be.called + + it "invite email", () -> + addMembersCtrl = controller "AddMembersCtrl" + email = 'email@example.com' + emailData = Immutable.Map({'email': email}) + addMembersCtrl.displayContactList = false + + addMembersCtrl.emailsToInvite = Immutable.fromJS([]) + + addMembersCtrl.inviteEmail(email) + expect(emailData.get('email')).to.be.equal(email) + expect(addMembersCtrl.emailsToInvite.size).to.be.equal(1) + expect(addMembersCtrl.displayContactList).to.be.true + + it "remove email", () -> + addMembersCtrl = controller "AddMembersCtrl" + invited = {email: 'email@example.com'} + addMembersCtrl.emailsToInvite = Immutable.fromJS([ + {'email': 'email@example.com'} + {'email': 'email@example2.com'} + ]) + + addMembersCtrl.testEmptyContacts = sinon.stub() + + addMembersCtrl.removeEmail(invited) + expect(addMembersCtrl.emailsToInvite.size).to.be.equal(1) + expect(addMembersCtrl.testEmptyContacts).to.be.called + + it "test empty contacts - not empty", () -> + addMembersCtrl = controller "AddMembersCtrl" + addMembersCtrl.displayContactList = true + addMembersCtrl.emailsToInvite = Immutable.fromJS([ + {'email': 'email@example.com'} + {'email': 'email@example2.com'} + ]) + addMembersCtrl.contactsToInvite = Immutable.fromJS([ + {'id': 1} + {'id': 1} + ]) + addMembersCtrl.testEmptyContacts() + expect(addMembersCtrl.displayContactList).to.be.true + + it "test empty contacts - empty", () -> + addMembersCtrl = controller "AddMembersCtrl" + addMembersCtrl.displayContactList = true + addMembersCtrl.emailsToInvite = Immutable.fromJS([]) + addMembersCtrl.contactsToInvite = Immutable.fromJS([]) + addMembersCtrl.testEmptyContacts() + expect(addMembersCtrl.displayContactList).to.be.false diff --git a/app/modules/invite-members/lightbox-add-members.directive.coffee b/app/modules/invite-members/lightbox-add-members.directive.coffee new file mode 100644 index 00000000..a3eb9932 --- /dev/null +++ b/app/modules/invite-members/lightbox-add-members.directive.coffee @@ -0,0 +1,33 @@ +### +# Copyright (C) 2014-2016 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: add-member.directive.coffee +### + +LightboxAddMembersDirective = (lightboxService) -> + link = (scope, el, attrs, ctrl) -> + lightboxService.open(el) + ctrl._getContacts() + + return { + scope: {}, + templateUrl:"invite-members/lightbox-add-members.html", + controller: "AddMembersCtrl", + controllerAs: "vm", + link: link + } + +angular.module("taigaAdmin").directive("tgLbAddMembers", ["lightboxService", LightboxAddMembersDirective]) diff --git a/app/modules/invite-members/lightbox-add-members.jade b/app/modules/invite-members/lightbox-add-members.jade new file mode 100644 index 00000000..c88bebdb --- /dev/null +++ b/app/modules/invite-members/lightbox-add-members.jade @@ -0,0 +1,18 @@ +tg-lightbox-close +.add-members-wrapper + h2.title(translate="LIGHTBOX.ADD_MEMBER.TITLE") + tg-suggest-add-members( + ng-show="!vm.displayContactList" + contacts="vm.contacts" + on-invite-suggested="vm.inviteSuggested(contact)" + on-invite-email="vm.inviteEmail(email)" + ) + tg-invite-members-form( + ng-show="vm.displayContactList" + on-display-contact-list="vm.displayContactList = false" + contacts-to-invite="vm.contactsToInvite" + emails-to-invite="vm.emailsToInvite" + on-remove-invited-contact="vm.removeContact(contact)" + on-remove-invited-email="vm.removeEmail(email)" + on-send-invites="vm.submit(invites)" + ) diff --git a/app/modules/invite-members/lightbox-add-members.scss b/app/modules/invite-members/lightbox-add-members.scss new file mode 100644 index 00000000..3b0d3076 --- /dev/null +++ b/app/modules/invite-members/lightbox-add-members.scss @@ -0,0 +1,6 @@ +.lightbox-add-member { + .add-members-wrapper { + max-width: 900px; + width: 90%; + } +} diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.coffee new file mode 100644 index 00000000..03bde373 --- /dev/null +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.coffee @@ -0,0 +1,39 @@ +### +# Copyright (C) 2014-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: suggest-add-members.controller.coffee +### + +taiga = @.taiga + +class SuggestAddMembersController + @.$inject = [] + + constructor: () -> + @.contactQuery = "" + + isEmail: () -> + return taiga.isEmail(@.contactQuery) + + filterContacts: () -> + @.filteredContacts = @.contacts.filter( (contact) => + contact.get('full_name_display').toLowerCase().includes(@.contactQuery.toLowerCase()) || contact.get('username').toLowerCase().includes(@.contactQuery.toLowerCase()); + ) + + setInvited: (contact) -> + @.onInviteSuggested({'contact': contact}) + +angular.module("taigaAdmin").controller("SuggestAddMembersCtrl", SuggestAddMembersController) diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.spec.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.spec.coffee new file mode 100644 index 00000000..42e5e356 --- /dev/null +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.spec.coffee @@ -0,0 +1,79 @@ +### +# Copyright (C) 2014-2016 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: suggest-add-members.controller.spec.coffee +### + +describe "SuggestAddMembersController", -> + suggestAddMembersCtrl = null + provide = null + controller = null + mocks = {} + + _mocks = () -> + module ($provide) -> + provide = $provide + return null + + beforeEach -> + module "taigaAdmin" + + _mocks() + + inject ($controller) -> + controller = $controller + + it "is email - wrong", () -> + suggestAddMembersCtrl = controller "SuggestAddMembersCtrl" + suggestAddMembersCtrl.contactQuery = 'lololo' + + result = suggestAddMembersCtrl.isEmail() + expect(result).to.be.false + + it "is email - true", () -> + suggestAddMembersCtrl = controller "SuggestAddMembersCtrl" + suggestAddMembersCtrl.contactQuery = 'lololo@lolo.com' + + result = suggestAddMembersCtrl.isEmail() + expect(result).to.be.true + + it "filter contacts", () -> + suggestAddMembersCtrl = controller "SuggestAddMembersCtrl" + suggestAddMembersCtrl.contacts = Immutable.fromJS([ + { + full_name_display: 'Abel Sonofadan' + username: 'abel' + }, + { + full_name_display: 'Cain Sonofadan' + username: 'cain' + } + ]) + + suggestAddMembersCtrl.contactQuery = 'Cain Sonofadan' + + suggestAddMembersCtrl.filterContacts() + expect(suggestAddMembersCtrl.filteredContacts.size).to.be.equal(1) + + it "set invited", () -> + suggestAddMembersCtrl = controller "SuggestAddMembersCtrl" + + contact = 'contact' + + suggestAddMembersCtrl.onInviteSuggested = sinon.stub() + + suggestAddMembersCtrl.setInvited(contact) + expect(suggestAddMembersCtrl.onInviteSuggested).has.been.calledWith({'contact': contact}) diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee new file mode 100644 index 00000000..9a4126d7 --- /dev/null +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee @@ -0,0 +1,34 @@ +### +# Copyright (C) 2014-2016 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: suggest-add-member.directive.coffee +### + +SuggestAddMembersDirective = (lightboxService) -> + return { + scope: {}, + templateUrl:"invite-members/suggest-add-members/suggest-add-members.html", + controller: "SuggestAddMembersCtrl", + controllerAs: "vm", + bindToController: { + contacts: '=', + filteredContacts: ' .then (result) -> return Immutable.fromJS(result.data) - service.getContacts = (userId) -> + service.getContacts = (userId, excludeProjectId) -> url = urlsService.resolve("user-contacts", userId) + params = {} + params.exclude_project = excludeProjectId if excludeProjectId? + httpOptions = { headers: { "x-disable-pagination": "1" } } - return http.get(url, {}, httpOptions) + return http.get(url, params, httpOptions) .then (result) -> return Immutable.fromJS(result.data) diff --git a/app/modules/services/user.service.coffee b/app/modules/services/user.service.coffee index b986c1f4..85be5bd3 100644 --- a/app/modules/services/user.service.coffee +++ b/app/modules/services/user.service.coffee @@ -30,8 +30,8 @@ class UserService extends taiga.Service getUserByUserName: (username) -> return @rs.users.getUserByUsername(username) - getContacts: (userId) -> - return @rs.users.getContacts(userId) + getContacts: (userId, excludeProjectId) -> + return @rs.users.getContacts(userId, excludeProjectId) getLiked: (userId, pageNumber, objectType, textQuery) -> return @rs.users.getLiked(userId, pageNumber, objectType, textQuery) diff --git a/app/partials/admin/memberships-warning-message.jade b/app/partials/admin/memberships-warning-message.jade index 304e5f09..6f46ef10 100644 --- a/app/partials/admin/memberships-warning-message.jade +++ b/app/partials/admin/memberships-warning-message.jade @@ -1,11 +1,11 @@ p.member-limit-warning( - ng-if="project.i_am_owner == true" + ng-if="project.get('i_am_owner') == true" translate="LIGHTBOX.CREATE_MEMBER.LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER" - translate-values="{maxMembers: project.max_memberships}" + translate-values="{maxMembers: project.get('max_memberships')}" ) p.member-limit-warning( - ng-if="project.i_am_owner == false" + ng-if="project.get('i_am_owner') == false" translate="LIGHTBOX.CREATE_MEMBER.LIMIT_USERS_WARNING_MESSAGE" - translate-values="{maxMembers: project.max_memberships}" + translate-values="{maxMembers: project.get('max_memberships')}" ) diff --git a/app/styles/modules/common/lightbox.scss b/app/styles/modules/common/lightbox.scss index 6df94cbc..255254d3 100644 --- a/app/styles/modules/common/lightbox.scss +++ b/app/styles/modules/common/lightbox.scss @@ -143,83 +143,6 @@ margin-bottom: 1rem; } } - -.lightbox-add-member { - .add-member-wrapper { - max-width: 600px; - width: 90%; - } - .add-single-member { - align-items: center; - display: flex; - justify-content: space-between; - margin-bottom: .5rem; - &:last-child { - margin-bottom: 0; - } - fieldset { - display: inline-block; - flex: 1; - margin: 0 .5rem 0 0; - &:last-child { - flex-basis: 30px; - flex-grow: 0; - flex-shrink: 0; - } - &:first-child { - flex-basis: 20%; - } - - } - } - .icon { - @include svg-size(1.25rem); - fill: $gray; - margin-left: .5rem; - } - .icon-add { - &:hover { - fill: $primary; - transition: fill .2s; - } - } - .icon-trash { - fill: $red-light; - &:hover { - fill: $red; - transition: fill .2s; - } - } - .member-limit-warning { - @include font-size(small); - background: $mass-white; - color: $grayer; - margin: 1rem 0; - padding: 1rem 2rem; - text-align: center; - a { - color: $primary; - &:hover { - color: $primary-light; - } - } - } - .help-text { - @include font-size(small); - @include font-type(light); - margin-top: 1rem; - } - .checksley-error-list { - right: .5rem; - li { - display: none; - &:first-child { - display: block; - } - } - } -} - .lightbox-sprint-add-edit { form { flex-basis: 600px; diff --git a/e2e/helpers/admin-memberships.js b/e2e/helpers/admin-memberships.js index e22bc3f5..e0e9759b 100644 --- a/e2e/helpers/admin-memberships.js +++ b/e2e/helpers/admin-memberships.js @@ -18,17 +18,28 @@ helper.getNewMemberLightbox = function() { return utils.lightbox.close(el); }, newEmail: function(email) { - el.$$('input').last().sendKeys(email); - el.$('.add-fieldset').click(); + el.$$('input').clear(); + el.$$('input').sendKeys(email); + el.$('.e2e-add-member-suggest-filter-addmail').click(); }, - getRows: function() { - return el.$$('.add-single-member'); + addSuggested: function(index) { + el.$$('.e2e-add-member-suggest-single').get(index).click(); }, - deleteRow: function(index) { - el.$$('.remove-fieldset').get(index).click(); + addNew: function() { + return el.$$('.e2e-invite-members-single-new').click(); + }, + setRole: function(index) { + let select = el.$$('.e2e-invite-members-single-role').get(index); + select.$('option:last-child').click(); + }, + getInviteds: function() { + return el.$$('.e2e-invite-members-single') + }, + deleteInvited: function(index) { + el.$$('.e2e-invite-members-single-remove').get(index).click(); }, submit: function() { - return el.$('.submit-button').click(); + return el.$('.e2e-invite-members-single-send').click(); } }; diff --git a/e2e/suites/admin/members.e2e.js b/e2e/suites/admin/members.e2e.js index 5178b139..d01d8b75 100644 --- a/e2e/suites/admin/members.e2e.js +++ b/e2e/suites/admin/members.e2e.js @@ -28,25 +28,30 @@ describe('admin - members', function() { adminMembershipsHelper.openNewMemberLightbox(); await newMemberLightbox.waitOpen(); - utils.common.takeScreenshot('memberships', 'new-member'); + utils.common.takeScreenshot('memberships', 'add-new-member'); }); - it('add members row', async function() { + it('add contacts', async function() { + newMemberLightbox.addSuggested(0); + newMemberLightbox.addNew(); newMemberLightbox.newEmail('xxx' + new Date().getTime() + '@xx.es'); + newMemberLightbox.addNew(); newMemberLightbox.newEmail('xxx' + new Date().getTime() + '@xx.es'); - newMemberLightbox.newEmail('xxx' + new Date().getTime() + '@xx.es'); - - let membersRows = await newMemberLightbox.getRows().count(); - - expect(membersRows).to.be.equal(3 + 1); + utils.common.takeScreenshot('memberships', 'add-new-member-form'); }); it('delete members row', async function() { - newMemberLightbox.deleteRow(2); + newMemberLightbox.deleteInvited(2); - let membersRows = await newMemberLightbox.getRows().count(); + let invitedRows = await newMemberLightbox.getInviteds().count(); - expect(membersRows).to.be.equal(2 + 1); + expect(invitedRows).to.be.equal(2); + }); + + it('set roles', async function() { + newMemberLightbox.setRole(0); + newMemberLightbox.setRole(1); + utils.common.takeScreenshot('memberships', 'add-new-member-form-active'); }); it('submit', async function() { From 8b1c41b8789f643afa037be9938891de29ff6d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 8 Feb 2017 10:17:16 +0100 Subject: [PATCH 114/175] [i18n] Update locales --- app/locales/taiga/locale-ca.json | 10 +++++++-- app/locales/taiga/locale-de.json | 10 +++++++-- app/locales/taiga/locale-es.json | 10 +++++++-- app/locales/taiga/locale-fi.json | 10 +++++++-- app/locales/taiga/locale-fr.json | 10 +++++++-- app/locales/taiga/locale-it.json | 30 ++++++++++++++++----------- app/locales/taiga/locale-ja.json | 22 +++++++++++++------- app/locales/taiga/locale-ko.json | 10 +++++++-- app/locales/taiga/locale-nb.json | 10 +++++++-- app/locales/taiga/locale-nl.json | 10 +++++++-- app/locales/taiga/locale-pl.json | 10 +++++++-- app/locales/taiga/locale-pt-br.json | 10 +++++++-- app/locales/taiga/locale-ru.json | 10 +++++++-- app/locales/taiga/locale-sv.json | 24 +++++++++++++-------- app/locales/taiga/locale-tr.json | 10 +++++++-- app/locales/taiga/locale-zh-hans.json | 10 +++++++-- app/locales/taiga/locale-zh-hant.json | 10 +++++++-- 17 files changed, 159 insertions(+), 57 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index b690d2bc..c8503028 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Ajuda de Markdown" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Nou membre", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Si els usuaris ja estàn registrats en Taiga seràn afegits automàticament. Si no, rebran una invitació." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index 73f925ae..ef8e562e 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Dateien per Drag & Drop auf das obere Textfeld anhängen.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown syntax Hilfe" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Neues Mitglied", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Wenn Benutzer schon bei Taiga registriert sind, werden diese automatisch hinzugefügt. Ansonsten erhalten sie eine Einladung." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 330a4a01..71dea4db 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Otra persona ha realizado cambios durante tu edición. Comprueba la nueva versión en la pestaña de activiy antes de guardar los cambios.", - "ATTACH_FILE_HELP": "Adjunte archivos arrastrando y soltando dentro del area de texto", - "ATTACH_FILE_HELP_SAVE_FIRST": "Si desea guardar adjuntos guarde primero, luego arrastre y suelte los archivos en el area de texto mas arriba", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Ayuda de sintaxis Markdown" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Nuevo miembro", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "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": { diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index d4405f2d..d00faed6 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Merkintätavan ohjeet" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Uusi jäsen", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Taigan käyttäjät lisätään automaattisesti, muille lähetetään kutsu." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index f745ea48..873e97f6 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Une autre personne a apportée des modifications lors de l'édition. Vérifiez la nouvelle version dans l'onglet Activité avant d'enregistrer vos modifications.", - "ATTACH_FILE_HELP": "Joindre des fichiers en glissant et déposant ceux-ci sur la zone de texte ci-dessus.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Enregistrez d'abord si vous voulez joindre des fichiers en glissant et déposant ceux-ci sur la zone de texte ci-dessus.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Aide sur la syntaxe Markdown" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Nouveau membre", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Si vos utilisateurs sont déjà inscrits sur Taiga, ils seront automatiquement ajoutés. Sinon, ils recevront une invitation." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index d94560f8..23527561 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -41,7 +41,7 @@ "LOGOUT": "Esci", "EXTERNAL_USER": "un utente esterno", "GENERIC_ERROR": "C'é uno dei nostri Oompa Loompa che dice {{error}}.", - "IOCAINE_TEXT": "This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.", + "IOCAINE_TEXT": "Questo membro si sente un po' sopraffatto da questo compito. In futuro diventerà immune a tutto questo, ma per ora, potrebbe sentire il bisogno di un abbraccio.", "CLIENT_REQUIREMENT": "Requisito del Cliente è un nuovo requisito che non era stato previsto ed ora è stato richiesto come requisito del progetto", "TEAM_REQUIREMENT": "Requisito del Team è un requisito che deve esistere nel progetto ma non deve avere costi per il cliente", "OWNER": "Proprietario Progetto", @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Allega file trascinandoli nell'area qui sopra", - "ATTACH_FILE_HELP_SAVE_FIRST": "Se vuoi allegare file trascinandoli nell'area qui sopra, prima salva", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Aiuto per la sintassi Markdown" }, "PERMISIONS_CATEGORIES": { @@ -518,7 +518,7 @@ "RECRUITING": "Il progetto cerca persone?", "RECRUITING_MESSAGE": "Chi stai cercando?", "RECRUITING_PLACEHOLDER": "Definisci il profilo che stai cercando", - "FEEDBACK": "Receive feedback from Taiga users?", + "FEEDBACK": "RIcevere opinioni da utenti Taiga?", "PUBLIC_PROJECT": "Progetto pubblico", "PRIVATE_PROJECT": "Progetto privato", "PRIVATE_OR_PUBLIC": "Quale è la differenza tra progetto privato e pubblico?", @@ -571,7 +571,7 @@ "ISSUE_DESCRIPTION": "Campi personalizzati", "ISSUE_ADD": "Aggiungi un campo personalizzato alla criticitá", "FIELD_TYPE_TEXT": "Testo", - "FIELD_TYPE_RICHTEXT": "Rich text", + "FIELD_TYPE_RICHTEXT": "Testo con formattazione", "FIELD_TYPE_MULTI": "Multilinea", "FIELD_TYPE_DATE": "Data", "FIELD_TYPE_URL": "Url" @@ -962,8 +962,8 @@ } }, "CONTACT_BUTTON": { - "CONTACT_TITLE": "Contact the project team", - "CONTACT_BUTTON": "Contact the project" + "CONTACT_TITLE": "Contatta il team di progetto", + "CONTACT_BUTTON": "Contatta il progetto" } }, "LIGHTBOX": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Nuovo Membro", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Se gli utenti sono già registrati su Taiga, verranno aggiunti automaticamente. In caso contrario, riceveranno un invito." }, "CREATE_ISSUE": { @@ -1051,10 +1057,10 @@ "BUTTON": "Chiedi a questo membro di diventare il nuovo proprietario del progetto" }, "CONTACT_PROJECT": { - "TITLE": "Send an email to", - "WARNING": "The email will be received by the project admins", - "PLACEHOLDER": "Write your message", - "SEND": "Send" + "TITLE": "Inviare un'email a", + "WARNING": "Questa email sarà ricevuta dagli amministratori di progetto", + "PLACEHOLDER": "Scrivi il tuo messaggio", + "SEND": "Invia" } }, "EPIC": { @@ -1236,7 +1242,7 @@ "HIDE": "Nascondi tag" }, "FORECASTING": { - "TITLE": "Velocity forecasting", + "TITLE": "Previsione di velocità", "BACKLOG": "Display backlog", "NEW_SPRINT": "Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.", "CURRENT_SPRINT": "Candidate User Stories for your sprint based on your velocity. Click to add to current sprint." diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index 8a6f521f..241ac967 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "あなたが編集中に別のユーザーが変更を加えました。あなたの変更点を保存する前に、アクティビティタブで新しいバージョンを確認してください。", - "ATTACH_FILE_HELP": "テキストエリアへドラッグ&ドロップでファイルを添付", - "ATTACH_FILE_HELP_SAVE_FIRST": "上部テキストエリアへ添付ファイルをドラッグ&ドロップしたい場合、先に保存してください。", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown記法のヘルプ" }, "PERMISIONS_CATEGORIES": { @@ -571,7 +571,7 @@ "ISSUE_DESCRIPTION": "課題のカスタムフィールド", "ISSUE_ADD": "課題にカスタムフィールドを追加", "FIELD_TYPE_TEXT": "テキスト", - "FIELD_TYPE_RICHTEXT": "Rich text", + "FIELD_TYPE_RICHTEXT": "リッチテキスト", "FIELD_TYPE_MULTI": "マルチライン", "FIELD_TYPE_DATE": "日時", "FIELD_TYPE_URL": "Url" @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "新しいメンバー", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "ユーザーが既にTaigaに登録されている場合、自動的に追加されます。そうでない場合は招待状が送信されます。" }, "CREATE_ISSUE": { @@ -1051,10 +1057,10 @@ "BUTTON": "このメンバーを新しいプロジェクトオーナーにする。" }, "CONTACT_PROJECT": { - "TITLE": "Send an email to", + "TITLE": "メールを送る", "WARNING": "The email will be received by the project admins", - "PLACEHOLDER": "Write your message", - "SEND": "Send" + "PLACEHOLDER": "メッセージを書いてください", + "SEND": "送信" } }, "EPIC": { @@ -1214,7 +1220,7 @@ "CREATE_NEW_US_EMPTY_HELP": "新しくユーザーストーリーを作成してください。", "EXCESS_OF_POINTS": "Excess of points", "PENDING_POINTS": "保留ポイント", - "CLOSED_POINTS": "closed", + "CLOSED_POINTS": "完了", "COMPACT_SPRINT": "Compact Sprint", "GO_TO_TASKBOARD": "タスクボード {{::name}} へ移動", "EDIT_SPRINT": "スプリントを編集", @@ -1311,7 +1317,7 @@ "ROW_UNASSIGED_TASKS_TITLE": "未アサイン タスク" }, "CHARTS": { - "XAXIS_LABEL": "Days", + "XAXIS_LABEL": "日", "YAXIS_LABEL": "ポイント", "OPTIMAL": "Optimal pending points for day {{formattedDate}} should be {{roundedValue}}", "REAL": "{{formattedDate}} の実際の保留ポイントは {{roundedValue}} です", diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index 8bc110bd..fb479f5f 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "편집하는 동안 다른 사람이 변경했습니다. 변경 사항을 저장하기 전에 활성 탭에서 새 버전을 확인하십시오.", - "ATTACH_FILE_HELP": "위의 텍스트 영역에 파일을 드래그 & 드랍하여 첨부하십시오.", - "ATTACH_FILE_HELP_SAVE_FIRST": "저장하기 전에 파일을 업로드하고 싶다면 텍스트 입련란에 파일을 드래그 & 드랍해주세요.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "마크다운 문법 도움말" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "새 회원", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "타이가에 이미 등록한 사용자라면 자동으로 프로젝트에 추가될 겁니다. 등록하지 않은 사용자라면 초대장이 발송됩니다." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index b3ea1d3e..4c57d21d 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Legg ved filer ved å dra og slippe på tekstområdet ovenfor.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown syntaks hjelp" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Nytt medlem", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Hvis brukere allerede er registrerte på Taiga, vil de bli lagt til automatisk. Ellers vil de motta en invitasjon." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index ea90fe32..16a6d4e4 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown syntax help" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Nieuwe gebruiker", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Als gebruikers al geregistreerd zijn op Taiga, zullen ze automatisch toegevoegd worden. Anders krijgen ze een uitnodiging." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index 0bcec240..f0e2fb91 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Składnia Markdown pomoc" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Nowy Członek", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Jeżeli użytkownik jest już zarejestrowany w Taiga, będzie dodany automatycznie. W przeciwnym wypadku otrzyma zaproszenie." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index 182166ad..ff387473 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Anexe arquivos arrastando e soltando na área de texto acima.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Salve os arquivos primeiro se você quiser anexar arquivos arrastando e soltando na área de texto acima.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Ajuda de sintaxe markdown" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Novo Membro", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Se os usuários já estiverem registrados no Taiga, eles serão adicionados automaticamente. Caso contrário, eles receberão um convite." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index f64d1d1e..ceac3f68 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Помощь по синтаксису Markdown" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Новый участник", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Если пользователи уже зарегистрированы в Тайге они добавятся автоматически. В противном случае им будет отправлено приглашение." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 514cd751..9232907e 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -36,7 +36,7 @@ "ONE_ITEM_LINE": "En post per rad ...", "NEW_BULK": "Lägg till flera nya", "RELATED_TASKS": "Besläktade uppgifter", - "PREVIOUS": "Previous", + "PREVIOUS": "Föregående", "NEXT": "Nästa", "LOGOUT": "Logga ut", "EXTERNAL_USER": "en extern användare", @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Hjälp för markeringssyntax" }, "PERMISIONS_CATEGORIES": { @@ -602,7 +602,7 @@ "PROJECT_VALUES_STATUS": { "TITLE": "Status", "SUBTITLE": "Specificera status för dina användarhistorier, uppgifter och ärenden ska ha i olika faser. ", - "EPIC_TITLE": "Epic Statuses", + "EPIC_TITLE": "Status för Epics", "US_TITLE": "User Story Statuses", "TASK_TITLE": "Status för uppgifter", "ISSUE_TITLE": "Status för ärenden" @@ -963,7 +963,7 @@ }, "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", - "CONTACT_BUTTON": "Contact the project" + "CONTACT_BUTTON": "Kontakta projektet" } }, "LIGHTBOX": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Ny medlem", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Om användaren redan är registrerad på Taiga vill hen bli lagt till automatiskt. I annat fall vill de motta en invitation. " }, "CREATE_ISSUE": { @@ -1038,7 +1044,7 @@ "TITLE": "Unfortunately, this project can't be left without an owner", "CURRENT_USER_OWNER": { "DESC": "You are the current owner of this project. Before leaving, please transfer ownership to someone else.", - "BUTTON": "Change the project owner" + "BUTTON": "Ändra projektägaren" }, "OTHER_USER_OWNER": { "DESC": "Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.", @@ -1051,9 +1057,9 @@ "BUTTON": "Ask this project member to become the new project owner" }, "CONTACT_PROJECT": { - "TITLE": "Send an email to", + "TITLE": "Skicka ett e-postmeddelande till", "WARNING": "The email will be received by the project admins", - "PLACEHOLDER": "Write your message", + "PLACEHOLDER": "Skriv ditt meddelande", "SEND": "Send" } }, @@ -1124,7 +1130,7 @@ "COMMENT": "Kommentarer", "EDIT_COMMENT": "Redigera kommentar", "EDITED_COMMENT": "Redigerad:", - "SHOW_HISTORY": "View historic", + "SHOW_HISTORY": "Se historik", "TYPE_NEW_COMMENT": "Skriv en ny kommentar här", "SHOW_DELETED": "Visa raderade kommentarer", "HIDE_DELETED": "Dölj raderade kommentarer", diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index ed2b0353..5964a0ea 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown yazım kılavuzu" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Yeni üye", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "Eğer kullanıcılar önceden Taigaya kayıt olmuşlarsa, otomatik olarak ekleneceklerdir. Eğer olmamışlarsa bir davet mektubu alacaklardır." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index 1fc252f5..81bfbe08 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "在你编辑期间其他人做过变更,保存前请先检查新版本", - "ATTACH_FILE_HELP": "拖拽到上面的文本区域来添加附件", - "ATTACH_FILE_HELP_SAVE_FIRST": "如果你希望通过拖拽到上面的文本区域来添加附件,在此之前请先保存。", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown 语法帮助" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "新成员", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "如果用户已注册Taiga账户,他们会自动被加入。否则他们会收到一封加入的邀请信" }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 6b625d17..9fe15b51 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the textarea above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the textarea above.", + "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown 語法協助" }, "PERMISIONS_CATEGORIES": { @@ -988,6 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "新成員", + "PLACEHOLDER": "Filter users or write an email to invite", + "ADD_EMAIL": "Add email", + "REMOVE": "Remove", + "INVITE": "Invite", + "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", "HELP_TEXT": "如果用戶已註冊Taiga帳戶,他們會自動被加入。否則他們會收到一封加入的邀請信" }, "CREATE_ISSUE": { From b00686f8884adddb5fb999334a5f79dc961e6370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 8 Feb 2017 18:21:49 +0100 Subject: [PATCH 115/175] Refresh project after members change --- app/coffee/modules/admin/memberships.coffee | 7 ++++--- .../invite-members-form.controller.coffee | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/coffee/modules/admin/memberships.coffee b/app/coffee/modules/admin/memberships.coffee index ba2b294a..e38779cd 100644 --- a/app/coffee/modules/admin/memberships.coffee +++ b/app/coffee/modules/admin/memberships.coffee @@ -395,7 +395,7 @@ module.directive("tgMembershipsRowRoleSelector", ["$log", "$tgRepo", "$tgConfirm ############################################################################# MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $translate, $location, - $navUrls, lightboxFactory) -> + $navUrls, lightboxFactory, projectService) -> activedTemplate = """
    @@ -458,7 +458,8 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla if $scope.page > 1 && ($scope.count - 1) <= $scope.paginatedBy $ctrl.selectFilter("page", $scope.page - 1) - $ctrl.loadInitialData() + projectService.fetchProject().then => + $ctrl.loadInitialData() else $location.path($navUrls.resolve("home")) @@ -495,7 +496,7 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla module.directive("tgMembershipsRowActions", ["$log", "$tgRepo", "$tgResources", "$tgConfirm", "$compile", "$translate", "$tgLocation", "$tgNavUrls", "tgLightboxFactory", - MembershipsRowActionsDirective]) + "tgProjectService", MembershipsRowActionsDirective]) ############################################################################# diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.controller.coffee b/app/modules/invite-members/invite-members-form/invite-members-form.controller.coffee index 263cb6ab..2fb48350 100644 --- a/app/modules/invite-members/invite-members-form/invite-members-form.controller.coffee +++ b/app/modules/invite-members/invite-members-form/invite-members-form.controller.coffee @@ -67,10 +67,11 @@ class InviteMembersFormController @.inviteContactsMessage ) .then (response) => # On success - @.loading = false - @lightboxService.closeAll() - @rootScope.$broadcast("membersform:new:success") - @confirm.notify('success') + @projectService.fetchProject().then => + @.loading = false + @lightboxService.closeAll() + @rootScope.$broadcast("membersform:new:success") + @confirm.notify('success') .catch (response) => # On error @.loading = false if response.data._error_message From f474c7c20e66424dc718f3d80eda44b1c1c9f963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 8 Feb 2017 18:55:39 +0100 Subject: [PATCH 116/175] Fix tests --- .../invite-members-form.controller.spec.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee b/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee index 09e809f9..d356f95e 100644 --- a/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee +++ b/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee @@ -26,6 +26,7 @@ describe "InviteMembersFormController", -> _mockProjectService = () -> mocks.projectService = { project: sinon.stub() + fetchProject: sinon.stub() } provide.value "tgProjectService", mocks.projectService @@ -118,7 +119,7 @@ describe "InviteMembersFormController", -> inviteMembersFormCtrl.inviteContactsMessage = 'Message' inviteMembersFormCtrl.loading = true - promise = mocks.tgResources.memberships.bulkCreateMemberships.withArgs( + mocks.tgResources.memberships.bulkCreateMemberships.withArgs( 1, [{ 'role_id': 1 @@ -127,6 +128,8 @@ describe "InviteMembersFormController", -> 'Message' ).promise().resolve() + mocks.projectService.fetchProject.withArgs().promise().resolve() + inviteMembersFormCtrl.sendInvites().then () -> expect(inviteMembersFormCtrl.loading).to.be.false expect(mocks.rootScope.$broadcast).to.have.been.calledWith("membersform:new:success") From 454989abfcd52e3a0c0cd90637973a93a86ac0a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Thu, 9 Feb 2017 12:06:03 +0100 Subject: [PATCH 117/175] [i18n] Update locales --- app/locales/taiga/locale-ca.json | 2 +- app/locales/taiga/locale-de.json | 2 +- app/locales/taiga/locale-es.json | 16 ++++++++-------- app/locales/taiga/locale-fi.json | 2 +- app/locales/taiga/locale-fr.json | 2 +- app/locales/taiga/locale-it.json | 2 +- app/locales/taiga/locale-ja.json | 2 +- app/locales/taiga/locale-ko.json | 2 +- app/locales/taiga/locale-nb.json | 2 +- app/locales/taiga/locale-nl.json | 2 +- app/locales/taiga/locale-pl.json | 2 +- app/locales/taiga/locale-pt-br.json | 2 +- app/locales/taiga/locale-ru.json | 2 +- app/locales/taiga/locale-sv.json | 2 +- app/locales/taiga/locale-tr.json | 2 +- app/locales/taiga/locale-zh-hans.json | 2 +- app/locales/taiga/locale-zh-hant.json | 2 +- 17 files changed, 24 insertions(+), 24 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index c8503028..c5374c73 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Opcional) Afegix un text personalizat a la invitació. Dis-li algo divertit als nous membres. ;-)", "HELP_TEXT": "Si els usuaris ja estàn registrats en Taiga seràn afegits automàticament. Si no, rebran una invitació." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index ef8e562e..ae61b1c5 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Optional) Fügen Sie einen persönlichen Text zur Einladung hinzu. Erzählen Sie Ihren neuen Mitgliedern etwas Schönes. ;-)", "HELP_TEXT": "Wenn Benutzer schon bei Taiga registriert sind, werden diese automatisch hinzugefügt. Ansonsten erhalten sie eine Einladung." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 71dea4db..74adace4 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "Otra persona ha realizado cambios durante tu edición. Comprueba la nueva versión en la pestaña de activiy antes de guardar los cambios.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP": "Adjunta ficheros arrastrando y soltándolos sobre el área de texto.", + "ATTACH_FILE_HELP_SAVE_FIRST": "Guarde primero si desea adjuntar archivos arrastrando y soltando en el área de texto anterior.", "MARKDOWN_HELP": "Ayuda de sintaxis Markdown" }, "PERMISIONS_CATEGORIES": { @@ -988,12 +988,12 @@ }, "ADD_MEMBER": { "TITLE": "Nuevo miembro", - "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER": "Filtra los usuarios o escribe un email para enviar la invitación", + "ADD_EMAIL": "Añade un email", + "REMOVE": "Borrar", + "INVITE": "Invitar", + "CHOOSE_ROLE": "Elije un rol", + "PLACEHOLDER_INVITATION_TEXT": "(Opcional) Añade un texto personalizado a la invitación. Dile algo encantador a tus nuevos miembros ;-)", "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": { diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index d00faed6..0412593f 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Vapaaehtoinen) Lisää oma kuvaus kutsuusi uusille jäsenille ;-)", "HELP_TEXT": "Taigan käyttäjät lisätään automaattisesti, muille lähetetään kutsu." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 873e97f6..18d3dd79 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Optionnel) Ajoutez un texte personnalisé à l'invitation. Dites quelque chose de gentil à vos nouveaux membres ;-)", "HELP_TEXT": "Si vos utilisateurs sont déjà inscrits sur Taiga, ils seront automatiquement ajoutés. Sinon, ils recevront une invitation." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 23527561..9699d503 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(facoltativo) aggiungi un testo personalizzato all'invito. Di qualcosa di simpatico ai tuoi nuovi membri ;-)", "HELP_TEXT": "Se gli utenti sono già registrati su Taiga, verranno aggiunti automaticamente. In caso contrario, riceveranno un invito." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index 241ac967..7fd771da 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(任意) 招待する際のメッセージを追加できます。新メンバーに素敵な言葉を贈りましょう ;-)", "HELP_TEXT": "ユーザーが既にTaigaに登録されている場合、自動的に追加されます。そうでない場合は招待状が送信されます。" }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index fb479f5f..4b43e554 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(선택사항) 초대장에 특별한 메시지를 적으세요. 새로운 회원에게 멋진 말을 전해주세요 ;-)", "HELP_TEXT": "타이가에 이미 등록한 사용자라면 자동으로 프로젝트에 추가될 겁니다. 등록하지 않은 사용자라면 초대장이 발송됩니다." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 4c57d21d..1dcdb9f5 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Valgfritt) Legg til en egen tekst til invitasjonen. Fortell dine nye medlemmer noe fantastisk ;-)", "HELP_TEXT": "Hvis brukere allerede er registrerte på Taiga, vil de bli lagt til automatisk. Ellers vil de motta en invitasjon." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index 16a6d4e4..79aa10e5 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Optioneel) Voeg een gepersonaliseerd bericht toe aan je uitnodiging. Vertel iets leuks aan je nieuwe leden ;-)", "HELP_TEXT": "Als gebruikers al geregistreerd zijn op Taiga, zullen ze automatisch toegevoegd worden. Anders krijgen ze een uitnodiging." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index f0e2fb91..7fc8b2bf 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Opcjonalne) Dodaj spersonalizowany tekst do zaproszenia. Napisz coś słodziachnego do nowego członka zespołu :)", "HELP_TEXT": "Jeżeli użytkownik jest już zarejestrowany w Taiga, będzie dodany automatycznie. W przeciwnym wypadku otrzyma zaproszenie." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index ff387473..8dfe75e8 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Opcional) Adicione uma mensagem de texto ao convite. Diga algo animador para os novos membros ;-)", "HELP_TEXT": "Se os usuários já estiverem registrados no Taiga, eles serão adicionados automaticamente. Caso contrário, eles receberão um convite." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index ceac3f68..606915e0 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Необязательно) Добавьте персональный текст в приглашение. Скажите что-нибудь приятное вашим новым участникам ;-)", "HELP_TEXT": "Если пользователи уже зарегистрированы в Тайге они добавятся автоматически. В противном случае им будет отправлено приглашение." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 9232907e..05890756 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Valfritt) Lägg till en personlig hälsning till invitationen. Berätta något trevligt till din nya projektmedlem ;-)", "HELP_TEXT": "Om användaren redan är registrerad på Taiga vill hen bli lagt till automatiskt. I annat fall vill de motta en invitation. " }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 5964a0ea..9b111a85 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(Opsiyonel) Davetinize kişiselleştirilmiş bir metin ekleyin. Yeni üyelerinize tatlı bir şeyler söyleyin ;-)", "HELP_TEXT": "Eğer kullanıcılar önceden Taigaya kayıt olmuşlarsa, otomatik olarak ekleneceklerdir. Eğer olmamışlarsa bir davet mektubu alacaklardır." }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index 81bfbe08..490d6db4 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(非必要) 加上一段私人文字在邀请信,告诉你的新成员一些好事 ;-)", "HELP_TEXT": "如果用户已注册Taiga账户,他们会自动被加入。否则他们会收到一封加入的邀请信" }, "CREATE_ISSUE": { diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 9fe15b51..44cec5ac 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -993,7 +993,7 @@ "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", - "PLACEHOLDER_INVITATION_TEXT": "(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)", + "PLACEHOLDER_INVITATION_TEXT": "(非必要) 加上一段私人文字在邀請信,告訴你的新成員一些好事 ;-)", "HELP_TEXT": "如果用戶已註冊Taiga帳戶,他們會自動被加入。否則他們會收到一封加入的邀請信" }, "CREATE_ISSUE": { From face26f1c16695ea7bbb05478d8a3a1484d5ca31 Mon Sep 17 00:00:00 2001 From: xaviju Date: Fri, 10 Feb 2017 10:17:26 +0100 Subject: [PATCH 118/175] Limit comment max-width to 80chars --- app/modules/components/wysiwyg/wysiwyg.scss | 1 + app/modules/history/comments/comment.scss | 1 + 2 files changed, 2 insertions(+) diff --git a/app/modules/components/wysiwyg/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss index 4bfce409..ad20e9fd 100644 --- a/app/modules/components/wysiwyg/wysiwyg.scss +++ b/app/modules/components/wysiwyg/wysiwyg.scss @@ -78,6 +78,7 @@ } p { margin-bottom: 1rem; + max-width: 80rem; word-wrap: break-word; } .codehilite { diff --git a/app/modules/history/comments/comment.scss b/app/modules/history/comments/comment.scss index 7a526108..d3186c2f 100644 --- a/app/modules/history/comments/comment.scss +++ b/app/modules/history/comments/comment.scss @@ -156,6 +156,7 @@ } .comment-text { + max-width: 80rem; &.wysiwyg { margin-bottom: 0; padding: 0; From b36a15d230ad0f56700b7cffce53b903de5d4671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 15 Feb 2017 09:49:16 +0100 Subject: [PATCH 119/175] Fix bug #4947: Now arrows works with the tags input opened --- .../components/tags/tag-dropdown/tag-dropdown.directive.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/modules/components/tags/tag-dropdown/tag-dropdown.directive.coffee b/app/modules/components/tags/tag-dropdown/tag-dropdown.directive.coffee index c1386e2f..564524a1 100644 --- a/app/modules/components/tags/tag-dropdown/tag-dropdown.directive.coffee +++ b/app/modules/components/tags/tag-dropdown/tag-dropdown.directive.coffee @@ -61,7 +61,7 @@ TagOptionDirective = () -> link = (scope, el) -> stop() - $(document).on "keydown.tags-keyboard-navigation", (event) => + $(el).parent().on "keydown.tags-keyboard-navigation", (event) => code = if event.keyCode then event.keyCode else event.which if code == 40 || code == 38 From 86184a9a6c518607c3413c602448e77e02605683 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 15 Feb 2017 12:13:27 +0100 Subject: [PATCH 120/175] Fix ordering labels --- app/modules/history/history-tabs/history-tabs.jade | 8 ++++---- app/modules/history/history.controller.coffee | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/modules/history/history-tabs/history-tabs.jade b/app/modules/history/history-tabs/history-tabs.jade index d9e25e30..5cca8483 100644 --- a/app/modules/history/history-tabs/history-tabs.jade +++ b/app/modules/history/history-tabs/history-tabs.jade @@ -27,17 +27,17 @@ nav.history-tabs span( translate="COMMENTS.OLDER_FIRST" - ng-if="onReverse" + ng-if="!onReverse" ) tg-svg( svg-icon="icon-arrow-down" - ng-if="onReverse" + ng-if="!onReverse" ) span( translate="COMMENTS.RECENT_FIRST" - ng-if="!onReverse" + ng-if="onReverse" ) tg-svg( svg-icon="icon-arrow-up" - ng-if="!onReverse" + ng-if="onReverse" ) diff --git a/app/modules/history/history.controller.coffee b/app/modules/history/history.controller.coffee index de452840..492975bf 100644 --- a/app/modules/history/history.controller.coffee +++ b/app/modules/history/history.controller.coffee @@ -32,8 +32,8 @@ class HistorySectionController @.deleting = null @.editMode = {} @.viewComments = true - @._loadHistory() @.reverse = @storage.get("orderComments") + @._loadHistory() _loadHistory: () -> @rs.history.get(@.name, @.id).then (history) => From d7c6e6333057359dd5dc32a832d3e4a2e6f361f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 15 Feb 2017 13:08:58 +0100 Subject: [PATCH 121/175] In the order of comments the arrow alwais points up --- app/modules/history/history-tabs/history-tabs.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/modules/history/history-tabs/history-tabs.jade b/app/modules/history/history-tabs/history-tabs.jade index 5cca8483..74022b39 100644 --- a/app/modules/history/history-tabs/history-tabs.jade +++ b/app/modules/history/history-tabs/history-tabs.jade @@ -30,7 +30,7 @@ nav.history-tabs ng-if="!onReverse" ) tg-svg( - svg-icon="icon-arrow-down" + svg-icon="icon-arrow-up" ng-if="!onReverse" ) span( From 0cfef30885c35d33b21833458a07e6593fe6703f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Fri, 11 Nov 2016 09:03:03 +0100 Subject: [PATCH 122/175] Improve 'create project' (new, import, duplicate) --- CHANGELOG.md | 1 + app-loader/app-loader.coffee | 1 + app/coffee/app.coffee | 48 +++ app/coffee/modules/auth.coffee | 1 + app/coffee/modules/base.coffee | 7 +- app/coffee/modules/base/repository.coffee | 13 - app/coffee/modules/common.coffee | 11 +- app/coffee/modules/common/confirm.coffee | 5 +- app/coffee/modules/common/importer.coffee | 153 -------- app/coffee/modules/common/lightboxes.coffee | 17 +- ...reate-project-restriction.directive.coffee | 8 - app/coffee/modules/projects/lightboxes.coffee | 88 ----- app/coffee/modules/resources.coffee | 25 ++ app/images/import-logos/asana.png | Bin 0 -> 5087 bytes app/images/import-logos/github.png | Bin 0 -> 3617 bytes app/images/import-logos/jira.png | Bin 0 -> 6511 bytes app/images/import-logos/trello.png | Bin 0 -> 2612 bytes app/locales/taiga/locale-en.json | 202 +++++++--- .../click-input-file.directive.coffee | 39 ++ .../file-change/file-change.directive.coffee | 1 - .../home-project-list-directive.spec.coffee | 15 - .../home-project-list.directive.coffee | 8 +- .../home/projects/home-project-list.jade | 9 +- .../dropdown-project-list.jade | 10 +- ...sana-import-project-form.controller.coffee | 55 +++ ...asana-import-project-form.directive.coffee | 40 ++ .../asana-import-project-form.jade | 63 +++ .../asana-import-project-form.scss | 57 +++ .../asana-import.controller.coffee | 73 ++++ .../asana-import.controller.spec.coffee | 172 ++++++++ .../asana-import.directive.coffee | 35 ++ .../create/asana-import/asana-import.jade | 31 ++ .../asana-import/asana-import.service.coffee | 57 +++ .../asana-import.service.spec.coffee | 128 ++++++ .../create-project-form.controller.coffee | 63 +++ ...create-project-form.controller.spec.coffee | 139 +++++++ .../create-project-form.directive.coffee | 31 ++ .../create-project-form.jade | 32 ++ ...ject-members-restrictions.directive.coffee | 13 + .../create-project-members-restrictions.jade | 13 + ...eate-project-restrictions.directive.coffee | 13 + .../create-project-restrictions.jade | 11 + .../create/create-project.controller.coffee | 56 +++ .../create-project.controller.spec.coffee | 45 +++ .../projects/create/create-project.jade | 69 ++++ .../projects/create/create-project.scss | 3 + .../duplicate-project.controller.coffee | 85 ++++ .../duplicate-project.controller.spec.coffee | 222 +++++++++++ .../duplicate-project.directive.coffee | 35 ++ .../create/duplicate/duplicate-project.jade | 57 +++ .../create/duplicate/duplicate-project.scss | 5 + ...thub-import-project-form.controller.coffee | 56 +++ ...ithub-import-project-form.directive.coffee | 40 ++ .../github-import-project-form.jade | 71 ++++ .../github-import-project-form.scss | 61 +++ .../github-import.controller.coffee | 74 ++++ .../github-import.controller.spec.coffee | 172 ++++++++ .../github-import.directive.coffee | 35 ++ .../create/github-import/github-import.jade | 31 ++ .../github-import.service.coffee | 55 +++ .../github-import.service.spec.coffee | 129 ++++++ .../import-project-form-common/actions.jade | 13 + .../description.jade | 7 + .../import-project-form-common/links.jade | 20 + .../import-project-form-common/name.jade | 13 + .../project-privacy.jade | 30 ++ .../import-project-members.controller.coffee | 150 +++++++ ...ort-project-members.controller.spec.coffee | 367 ++++++++++++++++++ .../import-project-members.directive.coffee | 43 ++ .../import-project-members.jade | 85 ++++ .../import-project-members.scss | 3 + .../import-project-selector.controller.coffee | 24 ++ .../import-project-selector.directive.coffee | 36 ++ .../import-project-selector.jade | 34 ++ .../import-project-selector.scss | 3 + .../import-taiga.controller.coffee | 43 ++ .../import-taiga.directive.coffee | 29 ++ .../create/import-taiga/import-taiga.jade | 15 + .../projects/create/import/import-header.jade | 2 + .../import-project-error-lb.directive.coffee | 16 + .../import/import-project-error-lb.jade} | 0 .../import/import-project.controller.coffee | 113 ++++++ .../import-project.controller.spec.coffee | 183 +++++++++ .../import/import-project.directive.coffee | 38 ++ .../create/import/import-project.jade | 95 +++++ .../create/import/import-project.scss | 55 +++ .../import/import-project.service.coffee | 121 ++++++ .../import/import-project.service.spec.coffee | 294 ++++++++++++++ .../invite-members.controller.coffee | 26 ++ .../invite-members.directive.coffee | 38 ++ .../create/invite-members/invite-members.jade | 8 + .../create/invite-members/invite-members.scss | 7 + .../single-member.directive.coffee | 31 ++ .../single-member/single-member.jade | 6 + .../single-member/single-member.scss | 40 ++ ...jira-import-project-form.controller.coffee | 58 +++ .../jira-import-project-form.directive.coffee | 40 ++ .../jira-import-project-form.jade | 126 ++++++ .../jira-import-project-form.scss | 30 ++ .../jira-import/jira-import.controller.coffee | 78 ++++ .../jira-import.controller.spec.coffee | 171 ++++++++ .../jira-import/jira-import.directive.coffee | 35 ++ .../create/jira-import/jira-import.jade | 30 ++ .../jira-import/jira-import.service.coffee | 58 +++ .../jira-import.service.spec.coffee | 129 ++++++ ...ect-import-user-lightbox.controller.coffee | 35 ++ ...lect-import-user-lightbox.directive.coffee | 54 +++ .../select-import-user-lightbox.jade | 90 +++++ .../select-import-user-lightbox.scss | 54 +++ ...ello-import-project-form.controller.coffee | 54 +++ ...rello-import-project-form.directive.coffee | 40 ++ .../trello-import-project-form.jade | 25 ++ .../trello-import-project-form.scss | 3 + .../trello-import.controller.coffee | 71 ++++ .../trello-import.controller.spec.coffee | 176 +++++++++ .../trello-import.directive.coffee | 35 ++ .../create/trello-import/trello-import.jade | 27 ++ .../trello-import.service.coffee | 56 +++ .../trello-import.service.spec.coffee | 115 ++++++ ...ning-user-import-lightbox.directive.coffee | 41 ++ .../warning-user-import-lightbox.jade | 8 + .../warning-user-import-lightbox.scss | 9 + .../projects-listing.controller.coffee | 8 +- .../projects-listing.controller.spec.coffee | 13 - .../projects/listing/projects-listing.jade | 9 +- app/modules/projects/projects.service.coffee | 15 +- .../projects/projects.service.spec.coffee | 14 - .../importers-resource.service.coffee | 193 +++++++++ .../projects-resource.service.coffee | 22 ++ app/modules/resources/resources.coffee | 8 +- .../services/current-user.service.coffee | 53 ++- .../services/current-user.service.spec.coffee | 24 +- .../project/wizard-create-project.jade | 84 ---- app/partials/project/wizard-restrictions.jade | 7 - app/styles/dependencies/mixins/btn-group.scss | 45 +++ app/styles/dependencies/mixins/create.scss | 238 ++++++++++++ app/styles/dependencies/mixins/import.scss | 189 +++++++++ .../dependencies/mixins/radio-group.scss | 19 + app/styles/extras/dependencies.scss | 4 + app/styles/modules/common/wizard.scss | 143 ------- app/svg/sprite.svg | 14 +- conf.e2e.js | 1 + conf/conf.example.json | 1 + e2e/helpers/create-project-helper.js | 39 +- e2e/suites/admin/project/create-delete.e2e.js | 67 ---- e2e/suites/create-project/duplicate.e2e.js | 63 +++ e2e/suites/home.e2e.js | 12 - karma.conf.js | 4 - locales.js | 10 +- package.json | 2 +- prism-languages.json | 2 +- 151 files changed, 7151 insertions(+), 777 deletions(-) delete mode 100644 app/coffee/modules/common/importer.coffee delete mode 100644 app/coffee/modules/projects/create-project-restriction.directive.coffee create mode 100644 app/images/import-logos/asana.png create mode 100644 app/images/import-logos/github.png create mode 100644 app/images/import-logos/jira.png create mode 100644 app/images/import-logos/trello.png create mode 100644 app/modules/components/click-input-file.directive.coffee create mode 100644 app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee create mode 100644 app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee create mode 100644 app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.jade create mode 100644 app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.scss create mode 100644 app/modules/projects/create/asana-import/asana-import.controller.coffee create mode 100644 app/modules/projects/create/asana-import/asana-import.controller.spec.coffee create mode 100644 app/modules/projects/create/asana-import/asana-import.directive.coffee create mode 100644 app/modules/projects/create/asana-import/asana-import.jade create mode 100644 app/modules/projects/create/asana-import/asana-import.service.coffee create mode 100644 app/modules/projects/create/asana-import/asana-import.service.spec.coffee create mode 100644 app/modules/projects/create/create-project-form/create-project-form.controller.coffee create mode 100644 app/modules/projects/create/create-project-form/create-project-form.controller.spec.coffee create mode 100644 app/modules/projects/create/create-project-form/create-project-form.directive.coffee create mode 100644 app/modules/projects/create/create-project-form/create-project-form.jade create mode 100644 app/modules/projects/create/create-project-members-restrictions/create-project-members-restrictions.directive.coffee create mode 100644 app/modules/projects/create/create-project-members-restrictions/create-project-members-restrictions.jade create mode 100644 app/modules/projects/create/create-project-restrictions/create-project-restrictions.directive.coffee create mode 100644 app/modules/projects/create/create-project-restrictions/create-project-restrictions.jade create mode 100644 app/modules/projects/create/create-project.controller.coffee create mode 100644 app/modules/projects/create/create-project.controller.spec.coffee create mode 100644 app/modules/projects/create/create-project.jade create mode 100644 app/modules/projects/create/create-project.scss create mode 100644 app/modules/projects/create/duplicate/duplicate-project.controller.coffee create mode 100644 app/modules/projects/create/duplicate/duplicate-project.controller.spec.coffee create mode 100644 app/modules/projects/create/duplicate/duplicate-project.directive.coffee create mode 100644 app/modules/projects/create/duplicate/duplicate-project.jade create mode 100644 app/modules/projects/create/duplicate/duplicate-project.scss create mode 100644 app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee create mode 100644 app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee create mode 100644 app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.jade create mode 100644 app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.scss create mode 100644 app/modules/projects/create/github-import/github-import.controller.coffee create mode 100644 app/modules/projects/create/github-import/github-import.controller.spec.coffee create mode 100644 app/modules/projects/create/github-import/github-import.directive.coffee create mode 100644 app/modules/projects/create/github-import/github-import.jade create mode 100644 app/modules/projects/create/github-import/github-import.service.coffee create mode 100644 app/modules/projects/create/github-import/github-import.service.spec.coffee create mode 100644 app/modules/projects/create/import-project-form-common/actions.jade create mode 100644 app/modules/projects/create/import-project-form-common/description.jade create mode 100644 app/modules/projects/create/import-project-form-common/links.jade create mode 100644 app/modules/projects/create/import-project-form-common/name.jade create mode 100644 app/modules/projects/create/import-project-form-common/project-privacy.jade create mode 100644 app/modules/projects/create/import-project-members/import-project-members.controller.coffee create mode 100644 app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee create mode 100644 app/modules/projects/create/import-project-members/import-project-members.directive.coffee create mode 100644 app/modules/projects/create/import-project-members/import-project-members.jade create mode 100644 app/modules/projects/create/import-project-members/import-project-members.scss create mode 100644 app/modules/projects/create/import-project-selector/import-project-selector.controller.coffee create mode 100644 app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee create mode 100644 app/modules/projects/create/import-project-selector/import-project-selector.jade create mode 100644 app/modules/projects/create/import-project-selector/import-project-selector.scss create mode 100644 app/modules/projects/create/import-taiga/import-taiga.controller.coffee create mode 100644 app/modules/projects/create/import-taiga/import-taiga.directive.coffee create mode 100644 app/modules/projects/create/import-taiga/import-taiga.jade create mode 100644 app/modules/projects/create/import/import-header.jade create mode 100644 app/modules/projects/create/import/import-project-error-lb.directive.coffee rename app/{partials/common/lightbox/lightbox-import-error.jade => modules/projects/create/import/import-project-error-lb.jade} (100%) create mode 100644 app/modules/projects/create/import/import-project.controller.coffee create mode 100644 app/modules/projects/create/import/import-project.controller.spec.coffee create mode 100644 app/modules/projects/create/import/import-project.directive.coffee create mode 100644 app/modules/projects/create/import/import-project.jade create mode 100644 app/modules/projects/create/import/import-project.scss create mode 100644 app/modules/projects/create/import/import-project.service.coffee create mode 100644 app/modules/projects/create/import/import-project.service.spec.coffee create mode 100644 app/modules/projects/create/invite-members/invite-members.controller.coffee create mode 100644 app/modules/projects/create/invite-members/invite-members.directive.coffee create mode 100644 app/modules/projects/create/invite-members/invite-members.jade create mode 100644 app/modules/projects/create/invite-members/invite-members.scss create mode 100644 app/modules/projects/create/invite-members/single-member/single-member.directive.coffee create mode 100644 app/modules/projects/create/invite-members/single-member/single-member.jade create mode 100644 app/modules/projects/create/invite-members/single-member/single-member.scss create mode 100644 app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee create mode 100644 app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee create mode 100644 app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.jade create mode 100644 app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.scss create mode 100644 app/modules/projects/create/jira-import/jira-import.controller.coffee create mode 100644 app/modules/projects/create/jira-import/jira-import.controller.spec.coffee create mode 100644 app/modules/projects/create/jira-import/jira-import.directive.coffee create mode 100644 app/modules/projects/create/jira-import/jira-import.jade create mode 100644 app/modules/projects/create/jira-import/jira-import.service.coffee create mode 100644 app/modules/projects/create/jira-import/jira-import.service.spec.coffee create mode 100644 app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee create mode 100644 app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee create mode 100644 app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade create mode 100644 app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss create mode 100644 app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee create mode 100644 app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee create mode 100644 app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.jade create mode 100644 app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.scss create mode 100644 app/modules/projects/create/trello-import/trello-import.controller.coffee create mode 100644 app/modules/projects/create/trello-import/trello-import.controller.spec.coffee create mode 100644 app/modules/projects/create/trello-import/trello-import.directive.coffee create mode 100644 app/modules/projects/create/trello-import/trello-import.jade create mode 100644 app/modules/projects/create/trello-import/trello-import.service.coffee create mode 100644 app/modules/projects/create/trello-import/trello-import.service.spec.coffee create mode 100644 app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee create mode 100644 app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.jade create mode 100644 app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.scss create mode 100644 app/modules/resources/importers-resource.service.coffee delete mode 100644 app/partials/project/wizard-create-project.jade delete mode 100644 app/partials/project/wizard-restrictions.jade create mode 100644 app/styles/dependencies/mixins/btn-group.scss create mode 100644 app/styles/dependencies/mixins/create.scss create mode 100644 app/styles/dependencies/mixins/import.scss create mode 100644 app/styles/dependencies/mixins/radio-group.scss delete mode 100644 app/styles/modules/common/wizard.scss delete mode 100644 e2e/suites/admin/project/create-delete.e2e.js create mode 100644 e2e/suites/create-project/duplicate.e2e.js diff --git a/CHANGELOG.md b/CHANGELOG.md index bbb9a4ac..32421c32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Add thumbnails and preview for PSD files. - Add thumbnails and preview for SVG files. - Improve add-members form: Now users can select between their contacts or type an email. +- New project creation with importing - i18n: - Add japanese (ja) translation. - Add korean (ko) translation. diff --git a/app-loader/app-loader.coffee b/app-loader/app-loader.coffee index 2951fb09..b93e09e7 100644 --- a/app-loader/app-loader.coffee +++ b/app-loader/app-loader.coffee @@ -15,6 +15,7 @@ window.taigaConfig = { "privacyPolicyUrl": null, "termsOfServiceUrl": null, "maxUploadFileSize": null, + "importers": [], "contribPlugins": [] } diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index cca4eae4..1b5f35ca 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -126,6 +126,54 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $tgEven controllerAs: "vm" } ) + + # Project + $routeProvider.when("/project/new", + { + title: "PROJECT.CREATE.TITLE", + templateUrl: "projects/create/create-project.html", + loader: true, + controller: "CreateProjectCtrl", + controllerAs: "vm" + } + ) + + # Project - scrum + $routeProvider.when("/project/new/scrum", + { + title: "PROJECT.CREATE.TITLE", + template: "", + loader: true + } + ) + + # Project - kanban + $routeProvider.when("/project/new/kanban", + { + title: "PROJECT.CREATE.TITLE", + template: "", + loader: true + } + ) + + # Project - duplicate + $routeProvider.when("/project/new/duplicate", + { + title: "PROJECT.CREATE.TITLE", + template: "", + loader: true + } + ) + + # Project - import + $routeProvider.when("/project/new/import/:platform?", + { + title: "PROJECT.CREATE.TITLE", + template: "", + loader: true + } + ) + # Project $routeProvider.when("/project/:pslug/", { diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index d05023c2..ee581f05 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -105,6 +105,7 @@ class AuthService extends taiga.Service return @rootscope.user userData = @storage.get("userInfo") + if userData user = @model.make_model("users", userData) @rootscope.user = user diff --git a/app/coffee/modules/base.coffee b/app/coffee/modules/base.coffee index 5cfa7dd4..c1e4dbed 100644 --- a/app/coffee/modules/base.coffee +++ b/app/coffee/modules/base.coffee @@ -62,7 +62,12 @@ urls = { "cancel-account": "/cancel-account/:token" "register": "/register" "invitation": "/invitation/:token" - "create-project": "/create-project" + "create-project": "/project/new" + "create-project-scrum": "/project/new/scrum" + "create-project-kanban": "/project/new/kanban" + "create-project-duplicate": "/project/new/duplicate" + "create-project-import": "/project/new/import" + "create-project-import-platform": "/project/new/import/:platform" "profile": "/profile" "user-profile": "/profile/:username" diff --git a/app/coffee/modules/base/repository.coffee b/app/coffee/modules/base/repository.coffee index 290bed50..40c4a0be 100644 --- a/app/coffee/modules/base/repository.coffee +++ b/app/coffee/modules/base/repository.coffee @@ -37,19 +37,6 @@ class RepositoryService extends taiga.Service resolveUrlForAttributeModel: (model) -> return @urls.resolve(model.getName(), model.parent) - create: (name, data, dataTypes={}, extraParams={}) -> - defered = @q.defer() - url = @urls.resolve(name) - - promise = @http.post(url, JSON.stringify(data), extraParams) - promise.success (_data, _status) => - defered.resolve(@model.make_model(name, _data, null, dataTypes)) - - promise.error (data, status) => - defered.reject(data) - - return defered.promise - remove: (model, params={}) -> defered = @q.defer() url = @.resolveUrlForModel(model) diff --git a/app/coffee/modules/common.coffee b/app/coffee/modules/common.coffee index 64434411..ae4d6c2d 100644 --- a/app/coffee/modules/common.coffee +++ b/app/coffee/modules/common.coffee @@ -216,6 +216,9 @@ module.directive("tgToggleComment", ToggleCommentDirective) ProjectUrl = ($navurls) -> get = (project) -> + if project.toJS + project = project.toJS() + ctx = {project: project.slug} if project.is_backlog_activated and project.my_permissions.indexOf("view_us") > -1 @@ -353,12 +356,18 @@ module.directive("tgCapslock", [Capslock]) LightboxClose = () -> template = """ - + """ + link = (scope, elm, attrs) -> + return { + scope: { + onClose: '&' + }, + link: link, template: template } diff --git a/app/coffee/modules/common/confirm.coffee b/app/coffee/modules/common/confirm.coffee index 04e80a62..6c37e262 100644 --- a/app/coffee/modules/common/confirm.coffee +++ b/app/coffee/modules/common/confirm.coffee @@ -207,13 +207,16 @@ class ConfirmService extends taiga.Service return defered.promise - loader: (title, message) -> + loader: (title, message, spin=false) -> el = angular.element(".lightbox-generic-loading") # Render content el.find(".title").html(title) if title el.find(".message").html(message) if message + if spin + el.find(".spin").removeClass("hidden") + return { start: => @lightboxService.open(el) stop: => @lightboxService.close(el) diff --git a/app/coffee/modules/common/importer.coffee b/app/coffee/modules/common/importer.coffee deleted file mode 100644 index 4ff587c1..00000000 --- a/app/coffee/modules/common/importer.coffee +++ /dev/null @@ -1,153 +0,0 @@ -### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -# File: modules/common/importer.coffee -### - -module = angular.module("taigaCommon") - - -ImportProjectButtonDirective = ($rs, $confirm, $location, $navUrls, $translate, $lightboxFactory, currentUserService, $tgAuth) -> - link = ($scope, $el, $attrs) -> - getRestrictionError = (result) -> - if result.headers - errorKey = '' - - user = currentUserService.getUser() - maxMemberships = 0 - - if result.headers.isPrivate - privateError = !currentUserService.canCreatePrivateProjects().valid - maxMemberships = null - - if user.get('max_memberships_private_projects') != null && result.headers.memberships >= user.get('max_memberships_private_projects') - membersError = true - else - membersError = false - - if privateError && membersError - errorKey = 'private-space-members' - maxMemberships = user.get('max_memberships_private_projects') - else if privateError - errorKey = 'private-space' - else if membersError - errorKey = 'private-members' - maxMemberships = user.get('max_memberships_private_projects') - - else - publicError = !currentUserService.canCreatePublicProjects().valid - - if user.get('max_memberships_public_projects') != null && result.headers.memberships >= user.get('max_memberships_public_projects') - membersError = true - else - membersError = false - - if publicError && membersError - errorKey = 'public-space-members' - maxMemberships = user.get('max_memberships_public_projects') - else if publicError - errorKey = 'public-space' - else if membersError - errorKey = 'public-members' - maxMemberships = user.get('max_memberships_public_projects') - - return { - key: errorKey, - values: { - max_memberships: maxMemberships, - members: result.headers.memberships - } - } - else - return false - - $el.on "click", ".import-project-button", (event) -> - event.preventDefault() - $el.find("input.import-file").val("") - $el.find("input.import-file").trigger("click") - - $el.on "change", "input.import-file", (event) -> - event.preventDefault() - file = event.target.files[0] - return if not file - - loader = $confirm.loader($translate.instant("PROJECT.IMPORT.UPLOADING_FILE")) - - onSuccess = (result) -> - currentUserService.loadProjects().then () -> - loader.stop() - - if result.status == 202 # Async mode - title = $translate.instant("PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE") - message = $translate.instant("PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE") - $confirm.success(title, message) - - else # result.status == 201 # Sync mode - ctx = {project: result.data.slug} - $location.path($navUrls.resolve("project-admin-project-profile-details", ctx)) - msg = $translate.instant("PROJECT.IMPORT.SYNC_SUCCESS") - $confirm.notify("success", msg) - - onError = (result) -> - $tgAuth.refresh().then () -> - restrictionError = getRestrictionError(result) - - loader.stop() - - if restrictionError - $lightboxFactory.create('tg-lb-import-error', { - class: 'lightbox lightbox-import-error' - }, restrictionError) - - else - errorMsg = $translate.instant("PROJECT.IMPORT.ERROR") - - if result.status == 429 # TOO MANY REQUESTS - errorMsg = $translate.instant("PROJECT.IMPORT.ERROR_TOO_MANY_REQUEST") - else if result.data?._error_message - errorMsg = $translate.instant("PROJECT.IMPORT.ERROR_MESSAGE", {error_message: result.data._error_message}) - $confirm.notify("error", errorMsg) - - loader.start() - $rs.projects.import(file, loader.update).then(onSuccess, onError) - - return {link: link} - -module.directive("tgImportProjectButton", -["$tgResources", "$tgConfirm", "$location", "$tgNavUrls", "$translate", "tgLightboxFactory", "tgCurrentUserService", "$tgAuth", - ImportProjectButtonDirective]) - -LbImportErrorDirective = (lightboxService) -> - link = (scope, el, attrs) -> - lightboxService.open(el) - - scope.close = () -> - lightboxService.close(el) - return - - return { - templateUrl: "common/lightbox/lightbox-import-error.html", - link: link - } - -LbImportErrorDirective.$inject = ["lightboxService"] - -module.directive("tgLbImportError", LbImportErrorDirective) diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index dc10423f..0507e99d 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -38,7 +38,7 @@ trim = @.taiga.trim class LightboxService extends taiga.Service constructor: (@animationFrame, @q, @rootScope) -> - open: ($el, onClose) -> + open: ($el, onClose, onEsc) -> @.onClose = onClose if _.isString($el) @@ -68,7 +68,12 @@ class LightboxService extends taiga.Service docEl = angular.element(document) docEl.on "keydown.lightbox", (e) => code = if e.keyCode then e.keyCode else e.which - @.close($el) if code == 27 + if code == 27 + if onEsc + @rootScope.$applyAsync(onEsc) + else + @.close($el) + return defered.promise @@ -171,9 +176,11 @@ module.service("lightboxKeyboardNavigationService", LightboxKeyboardNavigationSe LightboxDirective = (lightboxService) -> link = ($scope, $el, $attrs) -> - $el.on "click", ".close", (event) -> - event.preventDefault() - lightboxService.close($el) + + if !$attrs.$attr.visible + $el.on "click", ".close", (event) -> + event.preventDefault() + lightboxService.close($el) return {restrict: "C", link: link} diff --git a/app/coffee/modules/projects/create-project-restriction.directive.coffee b/app/coffee/modules/projects/create-project-restriction.directive.coffee deleted file mode 100644 index 66564563..00000000 --- a/app/coffee/modules/projects/create-project-restriction.directive.coffee +++ /dev/null @@ -1,8 +0,0 @@ -module = angular.module("taigaProject") - -createProjectRestrictionDirective = () -> - return { - templateUrl: "project/wizard-restrictions.html" - } - -module.directive('tgCreateProjectRestriction', [createProjectRestrictionDirective]) diff --git a/app/coffee/modules/projects/lightboxes.coffee b/app/coffee/modules/projects/lightboxes.coffee index eca7121f..4d904933 100644 --- a/app/coffee/modules/projects/lightboxes.coffee +++ b/app/coffee/modules/projects/lightboxes.coffee @@ -29,94 +29,6 @@ debounce = @.taiga.debounce module = angular.module("taigaProject") -CreateProject = ($rootscope, $repo, $confirm, $location, $navurls, $rs, $projectUrl, $loading, lightboxService, $cacheFactory, $translate, currentUserService, $auth) -> - link = ($scope, $el, attrs) -> - $scope.data = {} - $scope.templates = [] - currentLoading = null - - form = $el.find("form").checksley({"onlyOneErrorElement": true}) - - onSuccessSubmit = (response) -> - # remove all $http cache - # This is necessary when a project is created with the same name - # than another deleted in the same session - $cacheFactory.get('$http').removeAll() - - currentLoading.finish() - $rootscope.$broadcast("projects:reload") - - $confirm.notify("success", $translate.instant("COMMON.SAVE")) - - $location.url($projectUrl.get(response)) - lightboxService.close($el) - currentUserService.loadProjects() - - onErrorSubmit = (response) -> - currentLoading.finish() - form.setErrors(response) - selectors = [] - for error_field in _.keys(response) - selectors.push("[name=#{error_field}]") - - submit = (event) => - event.preventDefault() - - if not form.validate() - return - - currentLoading = $loading() - .target(submitButton) - .start() - - promise = $repo.create("projects", $scope.data) - promise.then(onSuccessSubmit, onErrorSubmit) - - openLightbox = -> - $scope.data = { - is_private: false - } - - if !$scope.templates.length - $rs.projects.templates().then (result) => - $scope.templates = result - $scope.data.creation_template = _.head(_.filter($scope.templates, (x) -> x.slug == "scrum")).id - else - $scope.data.creation_template = _.head(_.filter($scope.templates, (x) -> x.slug == "scrum")).id - - $scope.canCreatePrivateProjects = currentUserService.canCreatePrivateProjects() - $scope.canCreatePublicProjects = currentUserService.canCreatePublicProjects() - - lightboxService.open($el) - - submitButton = $el.find(".submit-button") - - $el.on "submit", "form", submit - - $el.on "click", ".close", (event) -> - event.preventDefault() - lightboxService.close($el) - - $scope.$on "$destroy", -> - $el.off() - - $auth.refresh().then () -> - openLightbox() - - directive = { - link: link, - templateUrl: "project/wizard-create-project.html" - scope: {} - } - - return directive - - -module.directive("tgLbCreateProject", ["$rootScope", "$tgRepo", "$tgConfirm", - "$location", "$tgNavUrls", "$tgResources", "$projectUrl", "$tgLoading", - "lightboxService", "$cacheFactory", "$translate", "tgCurrentUserService", "$tgAuth", CreateProject]) - - ############################################################################# ## Delete Project Lightbox Directive ############################################################################# diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index adc6daed..c7742a1b 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -203,6 +203,31 @@ urls = { # Stats "stats-discover": "/stats/discover" + + # Importers + "importers-trello-auth-url": "/importers/trello/auth_url" + "importers-trello-authorize": "/importers/trello/authorize" + "importers-trello-list-projects": "/importers/trello/list_projects" + "importers-trello-list-users": "/importers/trello/list_users" + "importers-trello-import-project": "/importers/trello/import_project" + + "importers-jira-auth-url": "/importers/jira/auth_url" + "importers-jira-authorize": "/importers/jira/authorize" + "importers-jira-list-projects": "/importers/jira/list_projects" + "importers-jira-list-users": "/importers/jira/list_users" + "importers-jira-import-project": "/importers/jira/import_project" + + "importers-github-auth-url": "/importers/github/auth_url" + "importers-github-authorize": "/importers/github/authorize" + "importers-github-list-projects": "/importers/github/list_projects" + "importers-github-list-users": "/importers/github/list_users" + "importers-github-import-project": "/importers/github/import_project" + + "importers-asana-auth-url": "/importers/asana/auth_url" + "importers-asana-authorize": "/importers/asana/authorize" + "importers-asana-list-projects": "/importers/asana/list_projects" + "importers-asana-list-users": "/importers/asana/list_users" + "importers-asana-import-project": "/importers/asana/import_project" } # Initialize api urls service diff --git a/app/images/import-logos/asana.png b/app/images/import-logos/asana.png new file mode 100644 index 0000000000000000000000000000000000000000..1de82ae57b5f67e63c3a72a1eb4a66d3ae795125 GIT binary patch literal 5087 zcmY+IRaDcD!-v1yh>?zv76wSyMvoj_g2X_iJ4B>QflXQv7>&|kP$H?)h@gOklN6~D zA|Q;E6yEc@crX6vb3T{P^>fbi#MDHOj+%oS0024zeQk390NnmNlmY+%|K%JE003m3 z8pav`(2!1Z;Y^# z;bNqx4P5=V($3de002-18yM?QE>W`5Kox%6?%f9f#uWo?4NUm#wtd8h>-{-bMVmX1 zcx-1hF_`k30XKOhf8UaoBp@GDP`pQ0c$wM-%$agklz*T|6%2q%mO7i6$)r)F+7<@r zdX$d}YYTjUrzLqM(MX&9*x9ZN+W)e>V{1PjMT$yK{Fga*5Oox?SnhbI=s>wUsJgwH zqg2Az+sJnId+xjDmlD3GO{}7AkfQ5X-;IneMw7dBVHb4T?d{H1+(iC7#RsPby zh+H=KE32Wxf~iQ`SW$*L75bv!@>%%D-hVK%m7YL0?X&4e4{G2?5CVtrL#{ey+imI1 z#SR*wKth{r7B`)~|G}FVCFdnt3}km=-7%qgO&I(kicsS}FE){;e9_y!%BOKHhnq&< z{f~&Pi`JSv0xR^xQd3Qt4{6O9%fx;CpR(cF_}3s$2`QT|;u{$_%;%>+dAhJtI9@8a zx%~sM{<2EI1;j4w{%IE~o%v0TMD=g_8FSRmDid+*3rLR4AAh&9KlAw56aw4r7z$Xq z%y6_dZyuuBFr%&F3fnw}kp%&jHq+2j;~p48-`;S@sOX}?!MpMhzgL8H$sFWsQVKkr z5iLT&FNuD?2GehZ%Bmdi?svXdw`!*2@IGuc44FeYW`=CBYSc$iKi%<2vc{o--h08p zf9$#reubsH(;=eb7Hz5SIu=ow6?pzi+!^J)JDtQ4m#nU(eh^9cC0xv#!!-JX)$(eC zgGt&jj}5%~w62kzaV;nFxM+XQJDtTlU6Z|ctee)WOLT37>YCNeD(#a^ImfldK+iIh zO_m=Yuv_!(G2SE&Cgw(V@QMO{BwIXVmr?9lN&r1*zzKRFd2#Xe9LRUfHl`*g1C>An zDj*c zVFqqOT<0#@O&|hJ!TXudZ+VQ2@IkUa4bR{L{sg^hfQit<)}qaM)+%LTNYlzh?&Y?` ztc}xGaaew0RNUq|QeQVec}EP%1`wOdhs|$lSxr54mbs~vkYHhV?2&mN-TPGs7m3D% zb8{2nGFT|&Mf9C)%VbDjKpu`?%F+OylxprtA;1Qnc~XETRz=)QsyyMU)imv8gfL0R zLE)A&vM$azQ_=#>YE}qXxcc#9Je{37V1u#WL4aLSS37bNbzEi+{wPs9M@Jqm>S;=4MTD!#dQo~+{x(TU-!Tn1_ z?PV^3+54u>e}zNU$bg&;>XVON!rOd_0@=uALx@Y#j6o+woVF7ltT@bmvn41AzvWeeS;iM-ccYKTFqq@ZbJ0I~~ez1|KDT85%ovB(&P2#2gT3K=2SH2DV+vTZ$ zbk3TJuD?W?KSZkrZwz}fDZ6EWl3xG~#i->AGuNb~b_$a(YA<;fPFx7`l^fq<`??S3 zqIx*FAscEDRK<+EVzc*Pohr>)Z83diqB0qGN{93wTD(#%SUkn_)_Az1Y%_v?lxNh_^v0L)J7eLEUPZY3Td zWoeDar=tBZWjo~L3=H&%9=>B<>F^~yZ|uyM&^G&>9|XcJy&8Yy{O`(6lLvD3FHPQT!qeXe0ekcThN z#7-9!u)eY2-`K+eILx%>m`XI;h1??KRF5I1NTZffYe~N-ywZqo zmqlwX!vB2kWm<>xvsst(a!YSfEF*5FoTPRSF@U=4U zADu~57j1j{|2m3v`2NPgzI&JAQ1z-azSdTTacD6iTb=EJY0SQue~jhsVc_N+hd)nI zds=cAJ~~?qrr~St-KwojAxUNUhM26H`->Pilr7|oxp+%STuj+&c z>qd;`&?tz&FX@_+Si3{$o96(my^A%5 zNIeXut(LwqyOlSR@KotsDMJ>{2srUjXH5?H`t3@pwX9i+OGrVgiiKLS4VJ7_2VKqdHpp%AOIXa2cfpXpK~XH#{sPVTQN?=jdCd(61f+4fl_xgV zKws)LDcV_8*XoLRxf#b3{>E;B8TPM-34g49L6!eSw!26!C=X`nD4I?5Cu{{paYVmg zx_9?4=KZXm!}BNxMMZVGn0fVk#_6{>tqmKvC3xzd6CKq%MfQzBRKHXsz~HC{b5<6q z+tEK7o_r6{{1G2(a8Z&)PwM#5q%$@bh4n`WG(?L@PLVL!jM|j94c*ik(;v9Mq&V_) zo8d6Gm9S!Dmm_qk#UZk(+{crcxs%jF^8zQndTe4>5Q&$Q?(_WlVPf5A0-ou%!&*yG zRV=xK<|4~|2%xcBG4zC~Yt|k8!n~CMf9Wmdg`thDh|e@_R=Xy-caMPsjGezG&jQ0t z-J%$`+PipI-YF=+DlSVQB++SBWs+mb6UL1nnrYJ0*dm1*pV#8??%_V}`Yzlm&$ojB ziIu~`&bAI2tHsu7D<_m#CtcY>opsbbx=QF16Xq%Gogzd8$pixKRzm){yUv+9J@G1M zz-kVW-QcOESQkXRGfEPLS6Ypd*97`bmS_F2YRpf|Boi*PNNLuO@L6)45kXh42+_w) z>4p6O^qb(11Rjq5dgc}3*-<(Il1&>|SFaB9eAIhjvR{gn?@Es#c@y~ zOTd&G(SJR|Z;Gtb`?AAM563?N8^5{4p1QiQTG$v2I>l=f2f>;%pc(S!ah{Usa3@bt zhUM2T@;CCap`RY1LPG2NwY@R-?QwH{esVk^t&I=nGbAA3DN1>6gS&v6V5n<<1UG;A zWZd3!kqR~WV&?&z5*-wbf(Kkn5eVqK{+aPfiA-S8U|O7nO??g&9*H)>?fMu2#CaR7 zP6KXYA?!Lkns&v=Dqk8+kkqc3S4v6rYAL91I!I!f-^Ww_N$I zLX7gS7u?JixZjD~+rYs)d!t`gGehq2(ke0=Et!aX&MwQ4iu#tK=nIb5mWY!#>(E(t zhDH9aydSyOdl`u`QqyJq{*ygrcl}1+cBy^a3A(2oBX0XH!uU~qLc;5(u93#g>jlef z#)Pn{xD{iWfT%kiCo;U>H zaRB+b49dzc_QWqoG8E@&Q&sJ2}!>VNP| zE4e13>MO%faA2-p_B#$uIEoM-tY@t+q@XX%nx3{p8>(NL0n@F3)8K12mUzx!wU9cW zV;RSrx>TwZL#~x+R6B$Ua(iaENKSN!9k6|h6uaf$n_+okqq40S&>aHNm93Nk1s2g5 zjr)zSh}Lu1av0k4QzYJ$ z)fOT`*+eHDwY;o5*5J`X?nQc69u9excPg47req zb+Zpqiwo0_Xi(L>w`tv`p+A1aKX@)2@hFefdVcl%= zg<_imOCCsIm{`i^8uU(!+Z}vc{EBS$9ou|H&t-#C{w-D3@Y?x$dlgW{tvzd5tHxvi=MU)3>&H@VTNW$7wn&>? z3pvSQGT{cP=Yw+zIP;Cd%q*GZGet));bTy?QPz-*P-jckjpJWQ^(G@ueub8k>G`tNku_z* zmPS@>5*d*QyW~q!?y)0xlS|5j>{D|c)y{fskuS95o$4I7|4&i+FD~tS!m(sK91HX< zD0_DR00e?{tb^U0gWZ)}1Kpj2-2rI?Qb7WNlt3zCka9|Lib~Q5F$7Wxfw(#91N$Gq w*U!z{BjP_mUIL*YAuWSJB9#z|N^){y2x%n*LIM}t3jhFMpktz4r|A^)e-2+ixBvhE literal 0 HcmV?d00001 diff --git a/app/images/import-logos/github.png b/app/images/import-logos/github.png new file mode 100644 index 0000000000000000000000000000000000000000..77aaf337650bae95bcbe9dd194b7fd9403588b9a GIT binary patch literal 3617 zcmV++4&L#JP)~Kl653!8aD7zV}oNf_DspM=TH2s1ZD(7-EbXk1FGVAs!W@Ni-U( zykb1ccvMp6u%hA>BgP{d!BP|xO+ZQOtz}vuF;5B9RtMwu^nf@jt3c^vq$-o3)1h5s*)<;cg2bKX# zfEmD4W%Q!{Bqh_ABmhYw4hDV(93%v^_OrI=6oO^}*D0fC7Hju_CnTO}(y=yRJn(Da zYt%RXD-&i0&>r`p*2HA`NG%Nmz9Ajlmw|MYX-s_9tZ4B!|BHXaB5 zq>O&Fma43l5;7dP9ykivl*Yg(z>~mFmC;M01aiOPzC@JQfxU^|)~qo1m_Ag@}R5e4C?ztnV9T^edGZ`j&E~LVlhs zp40{u$G5V+uX6d^Y?-{NNh#Z?M?rY9cvC|*jC-&60ys+2r8~RKdGQ@xn1KtF--Z0i>;X`1wGWz2*YZNc7-2fh|kc_qR8R)3AA6v`VC66J> zH|hmO{CeP|3L5hc@K@|nsR2Hh@3RAhgyp~jU=A=7cm)`WJMlb7OOvYeO5i41a&jltb zqnGq#Pm0Oj1TqkI6{t`$QkK zI5(AGEHEVs!c0%by|owHu@`Vw6`foNtSm-$0Xdz@=;wg#q9D8!_$4;pstf3l&lf`Q zYruQJV&H#LeolTLyP7_*8SoWgTkIa&o+6DyfI;$U!NzZ0ql~^PZclRN_AqEG#I77# z;kcY7c6D|!DQWFNWeoz(myT76#meZ8-u{P#(||G>W%RXC5IzoECI)v__qPPDRYuP(;!*b2=8h-`7gsSZn*rxXL3oBtww`TBLQn1o{Huye zJAreR(Ra8C2&kqU*KLS`@Eox<)r2nXuZ(`Fux&l9LvF6J?d?Fm7qRbkN1)ihs~ON@ zHms+Arz|HYeXIsIms}VM`xAhD92m;(Y6h-a5^7vWw}Yna69wVnh4mMckgFV2)`EnC zR&!WWZ%Fi|4F~ZE#m3r8Rul!{0kUwb78}KWdOd~uJCv@Fo+Izea)V{e*Kyz#RCK1e zgf1{#t`#&Cq))CQ@(0P7uj9Z=R5Vg-hpSkvT`OG8);mJ!n+s&bmW*7dvJ!gn0PJ-D zSJ)TWrU41r2DkCaBV_D}f)GzUt5#VsZS1h3zX9_bkdXP(H&@sgI3NnbR%P@$l{FmL z+hHYhfJ>FppEjD8rHuX*xJ3Hs3VX+PDJEoVN8S~(2X(nJdU3s7sC40FNuQPgm&=ZX z3yc*G@WgA_!;xPN@Q^b42^t*I$A=sh*8=Pj1)=AO>ov|{ThC4I`!paC$pzwh4vQWK z42lWa&rzXwDx+64Dj7vo*9zcHN5$?J6EXxFo9Y6$HQMSt#j5=_M@5bThIkGaIrD*e zjpS9O@w$L{z`L#%(;hI!QDM&lYnwqj3Z!JM^xXx;R^#kP$Y)KCi2=aG(z``n{QKy-x|)ud{x#UUXpJ#0|33+xHBHsR)C zEB2;<3oQ4r2_RiyKVVQ3ZZ5XrE(&FdhrMs%0z-gZnowo!g1gir?|Ik+!>({jLX?|9 zU4cz;>k4mWTJ!~p&R~RfegBn^&62a+b;5HM|`yO_e zcDBPpe;!|IY(!ELx2Qa9z?>`020CLxUUFFQcEH6=psg;#U2q7(L8pg3TzbJ_!5(mS z6ojK2O-d5du^TWMcYA>d2koBt(hD4}*ug$8aak0En>1i3=_c4)!Y)%9t^^h&gRPf3 zwj%&1V6XoU_^WLRBi;sF0DRAJ6|Z8ia@)P9Tt1i2`u@(i&pmP|kk9)5E6V7uCHj|X5+Mm6 z`!3+L5(OQTyp$6K;ZWfF!12I=lo#;uIxr2JLwz|m+s?|u7u4dJTaA}gkYb|^d-S>m zHWAGs*i=!w_Mu=-RYsqhoFthdjUOSlq_^wQ?*SLYq(nh@1ok}SYHa$U8>uV`V<9$* zei8PZW;yVoGJ1w1={OpDb!(C7)u=w}=eawPUamU_VL%INdbW&^s4(!md#V>8Y@4GdF8e=a0V zkwvBp7xC(tjB1R3LS;RLef6imkpr$Q_KQppjc<{ee?!U&9stf(Mt_zlXB%-BD?M*s z3hV^rT^V-in=dN2Ki#{FvFVw*N@fF+#ZZ^1qt{bba3Xd?F(VzHfPGKo4&bv28~qz> z3O?6ZP4)S}s=*xK0cCVo>Li##%u?VM=|CD>i+wH?-~%DzNh&)tSdD$AuFIv{o0x3R z(La}qRs**r-P}}!B=q$?Vk6R^O{4A>B+ z*~H$`#3E~f$+Cb+gF~Vq++P{pEvwHRu{mxhVqf-rJ7qaD0ae3+S%tgsr*i6?tc+gU z+k&?@l@*hs%ADa>CdzmRdu@2NGWsoS`i@h8M`gfQ$>#%+#0!B@%IFJ~(W`5?t&*#; z1Qx?-%IM{#b|1V_I#k^5u2n`q)>{JQRD{T&bjwV=f^<302LabaK{zz=xA8{WENuGO z%_KDBOXO|bwkQZ&N~n=Ofh=G*s$mrxo7jJTxsFLC5)vEx-GN6)e>Y;TtZQCj zeG>f+?CsrFYy_Y$TN+9kJ*UQm+=AQmN-^FCj#oy{uH-zY?2DQScX*B*$=(TkJ;k4n zW&O$9hcb)uV(bTF55+?48O3eb#{dQzUIk9?>CKdy5K=(O8&MFRh<(#=d>KV-P4Dkn ztrZt>Af@Vf2Kb>edOKEVcAKd6jeQ_I~1=iW>a@m-^go{9~%xd|HxQEKyWFttx+ zQ;PI1Y3q%^Hp=L`lPcJyno6SPnHS=xMwQVWxqNPV*7xs~#o$nE=ulgcKb!6<7OST= zWqtoZY*1ez@?x;>l11LbxqPmpuW}J*`by>tMLY_^Er7$Z4>}&q`W@ui*ps!_Y8grz z1>v5+?^z!evj`jX{493I+0;@s^*bTO21R}zjNK252)N z6=YL!gHgr>Wn5>z85EEriwG2&pG7Dbxvzg;r|FJY*>nhZZzwJG35bvY~E0ZjEjyB zUpfA8Wt)q=8mGLm!-LU1tSA2e=<4DgvdVuSRM>dG%qZsoA%ICk50eMJD3Uz^MI@wd zAsT`BBuer!4C1>p2Rl~8K7Z*OH^yCSyV%R;A+Hvc;lW<%0DxJWN(UYCMgAO7`EXg~ zZ5e>tT`y1q@TPQibFam%ORHkZ#V~$j5%2WOA{{et`TU>bjx{QmxeHO_( zRE1$3QcwJU@htTL0j1};Dl%z>qnDVZ z=hhwZzjZ^7kx%NIp~k-3Rvf@JZ4DPJ2n)A+Ft+DOdU}0(8P$nYcep$}+!a)2`9kb+ za`qy)P9%rA+4Z*&0H_Mf`X|@Bo~;P0_k>k$s_$VAfOEj4rGA4*-;gNzZ+eRG!^A%J zk_#1#5B8Shk6ljc+WA}D>4$vb9GyUKt_Z7t4Jj;JVNrcipNNzM3=;ih(TJ=E2qAtl ze~Sx$tD&MNzAPS55n)sPGRsvM$JxLk0JH+(0wtS`8d{L5p{u9&w|^xHw7Rv=o;P=T zaPQS8X9ee+Jh{H)`tp!EB%<V;_c*JRrz4CDqydc-2muHxbOQ0|B)TSDFMjY;|BSVS5Y}3N*jgMw z?^6cY>jj?v2g^f$EDN%MDq}Vdq%(f*vN#7Mfxu=EUhQnv%^K6gS_}Z*paP3ttRKji zwz{v{=MFEeil|rM+<>1ZT9JmWI$=#liuk_F_$Tgwq8c><&&|@~SDn)8{`UDogeU%@ z**kvoaX1U5p+8XBsmtT1}qA~|R4{&(RUmSo*OCeFR zN2DarsG(n1hS@=bL@L{xHC1DJSbc<$CI?{Ep(+foWgXR~qBnPXQ;$^0snxP-GHb=0 zfT9krj|0�a z`eC~?Y4PN~_B{ab%-5xu+TVW0=gwKjJG;I3OLq%6=j4gC&W-_@|0O7^ll?L$G{FJR z0Z;&x5>SEwV<@Kt0YVVeP*RzyrR8B2`_pu^qAJ7>cCu<10WT@4RE`YDNueFh8g#N~ zPb>E)pNt>9VH7w6T;<$qOA$L4y2ElCjnK)jsOe#a+Zo5DA%z)L4jm;(Q#lL*fhnT$ z(+rw;gmFMC5@e=`Z*$<~IfEU$VvO+VcRu{~3Uj^BHmJ_on_ZaDCu*Th`>KRiN0^au zKHD2oM@Ljn8;g8M4Fi&>Zsg=7Bl2@KzLvfv1RymXOlnbZqj4q$LAFW!;>rx&qjz?- zd>{M#`OPj&?32-;_fEh@_vLJN2A(UamIv2Z9^!@SuTTOmP~tU+bakI>!-P@YEJvfB zya)GOWj*h~7?;#W{lmS!OEw?(-w{yQa7E?0A(d+zbttv~iBX$IAhJNoHoZW;yv(9q z`slT`{ijBQ<6($|Wd0U6{&roo^2Iy7mYpTR%k>hur6R1}7FKwN7)KM*I)I3wVbTa5 zy+oD*Sk~UG-8-&#`iZEfYZcAOca1Er zl1KT%YTt;;4FGiDka!CPf)Xek2uXxQOj;p7+a!JRM6T_}>Agdi-Ag9NcVqSDCvQ292YK=f()KJKb|0GdzlyU4$)6%0s zh5w)tNYSMx>DVK^ZFQpFO&wTmHj4jnuMf9(Ib9ikyw9iIbj&XrwSvAZAPa4DqCO{0 z>ayDvO35^eJ-tC@td6KUdy3dSC^IR-I3jB8;3$wHQRpQi{p5>mu;@kAq8EYzneFRp z(}hwt)Zpn?N2)QPo$=?T{JcR0w|#mT0Pt#oTX=u3 zkH)@RxZRVKI`+DQNpJTzMgF9fH8o2AwIE8i6P_3sz@+6x3dg9^{G=!CpfE!{b}ubnpw zeSNgA+_w5q_10>cuNAnv?{kL- zgjL>OX1o{U$dMUGnpP;&iKN4VVOdqp0?OiDo*UO6@qeN+UWa@IN;m<$8cK>xI$=d_ zmSOqtuQYG`IRSC%8V3NpyT^NFp)2$UUr7B`P+{2|Xu~+9I`2*h2w;8hHQ+C#pG+|{mQ_jI@NnVVdg+_&Xq$Go%0i;uta z(Ro80x)lei1{GB)BLfk2WL1P^oQ;z>2h2JFI+0jk8kQ9|C^V7A&lq6$NCHtCg1jfF zO75UCI{$cJ`M2&+Fs$;82fdM-Ip?GyfE@OP6EYH3960y#%%UAp1LaV8IJZNZX5+m4 zGXHjG@N;LCd~d}$0ExY*!njjmNGQ8BZcx@7t^y$>oT?F=4bf;Z|AG>rI>O)!sngL9tFIj1*WW;$mZ$Mmp*b1pfnl{|Mq z%?&85PTL#em8NLup^OwkO$3y<12sc(qD!fwfYk)JIv&o9sLbLGDI+-N+s~F{@$5hc z7HoA{_qoH%|N7Z63*!jhx$I~#nqn(}qwcVXs2tT1#z!qXrV|MCqCm>#Y<4~VM4yZ; z_0ipdG+0mk)!rR7Ek2V@D82Rdr*~^-R zzGCv|wYIfJi6UO3JgoAr0>O|mJ*{}Hpse2C2_(9D81KlV1VlK;7@V-i`9M(NnF++y zj!;T|N;nvr$iv%;0{{TCj(!raBdahDPf(rrO_AStrp%6*TyD|Mk>cbOi4rCf@_%D{ zrk^%T-r5ya?*G{BvA6=ty@~XRMj+o0Zf88)tf0h#beTqJzD6K%kK&-h9RDoz%>jUC zHEujwSE{1jN_PuKyxtG&DOXS6Z|YgGd%8Vl{9;+FlZvv+7`V>e!xEOkV3e z@m-Et3vWr1DCe?zS^Ik2&Vw0suB0_mA}i)!$JPx2*z7fNYcWBmj(0!oHoPfC2!s2Rpte zz{iOsNH7jmN7%S|yF51n(Y626LOa*ni|i@l6oHV)*#OZB1Z`8LJMZslbxv7dg4)jG z6zl6=NGYr>uA4xq*&JmzbngXTrrG(iPn@bPFE3#-^U?wLd@DfqD7v zl)dio0)_L-5@{<3&_*XL{O~iD5?X7bxawp7fDqjmKY&`H>kEB zv$E*DJ*EDXNqy~@_EkxpunRB~bA~u>GHZnuq=rVK+YE#~L)#l48`C4*_tb{E8_Whw zDgfu49;=Ex6;jy9L>38abe6}FD!%m2$V+)LcTOh_6abjRG*j+JuUztp249GksR`oClAuKypy2GLu-mn^k(o_xoxNC;~_TOD;{$Xyu3r}Bv z@|nk07ZLn(Af|p*GQBLIjF(wr%eDdmj2dC#q&^w@kYq_JDAW2!J7GwNv?Xng(#izi z8=M24fc(I}zVl4uoYRT5%;cEaIiB zg%^fq@ri4TA3W@fJjrxyP4lPd#ARI7i=nST(@z6tZoUhD>2AUDA1ia0 zAFNvIS6EVPRh>v87M=L`vja1KoW7x?&VdF$3;L=pFKu;WTyGm@ZYurrK6iMDnuH8O z9$gFfw>65n&kS^Y8*>c*^?e0i9-f7#HU9IABi^R}XA&y!F=3Y1LEKJ8Pl|tq7EuJhH0jaA`nkm#oTl0%ekb!l2AA zS2))uqs*Gbx;<@l!k}4$9p2gbE=*J5!!NU>0h8>_ zMMe!ho@J6oOz)pr*wllTHf3ec4|ZV59xtp0$$P0u)7PXCerjo>i$_B!rI|+Qp6UHF z3-OD8qg8_f0HeBDFmbIDPhD>>x*}aW${^9>Xd%KlkgB1$)TFuNnE{!r0N|_T!h4JwxcFufSwNhO%L`;Um0^w$M#Hb{WGPuOjuitX9qeqTlB(k ziBhFG+aggYS*hah9_*FAGPVre9DuZlnKE|eaV#8>jW>6A$K)6JUkJ!d-_!>o2n4}2 zo$&B$H)bzx2{cNZy8#PFWaH(nW#rx-mPMVd+R+Ay`kQKRJ+E;@bt1hl2FQ%BoBue> z7Iy%|jIT>a9Vid~T~@iSkpbZvfsiY#+A)**+W!s!53ef1%fquS&XiLC!L__=ng`NIycD)53PEp#ANjHV|e42m*BD0 z#gCQv<>&b++oR(ZokaKb%TBrR?yD@v&UE6^MNk?j&u%Jx{d;$KjKXAqndP5zeluC%3t5z8f>(${`}wn=(MN+dnLmiWTz9qW%)-vtX(Wx3?RWfLzT4uKKYl=UPeYRwe_aZ2te&@pzxfyt+psZ7Mgnbm08LGkz z?tt>i)b%A}fs+}LkMy=-$sR8VAyxNSma3r}9Y*Pvrw3$~ zUC=Y-#c!f?^yGTy{hnZ5KmZ`Da;>vkeqmf*(SX{P*z`dRhL)8-^jMtk?MF>zH zQgz#%fln9i@LWE%pB;Z&T?_!2J;Z@O{r4DV4|aT*ZV+Ed#3HNN)|W1;d=3!3O5=j0 zuPN(FI#h<$+s<r4J^3dBm+(F%weeEao%S$!7 zDbpzZK20kWC6cZjQ91UOg%$w73pM3lFra+8&u8!k)Vt5O|NJul^^%?5@q0>xLhRI| z*bS`{`(*etjp83Afh0s@F2CI8?cLsPk6mj!0r&+0idioX3M#D2`F5YeIV!?z#y|J^ zx}19I(ULu0^mG`uw$TX-6SR=c+lm9X*9N>*gAy}?JwauT!r~jr0hz%dk<*gIM|HDc zWM@-2BSm^aBa$QWwvlnrkiu_xd8^ye90Rt=L3#9A8{Yr6yn9(d`JZ^LB}xE+kc0Ia z5dAU^*!0pn1c>{dNe+I^kL8iBtsazDwncToHfP{3Dv!6bfHbXeup+|pmKN5(#cj@z z%$Zt|#2u3l${Yrf{A%TaN=>Tt;N9Pmc05tUyO@5rTu_^0)^e+mF+JDIh%SPf#eRwQ}xwmYP-Tp;mtAzLhcy}QSo zCNmz_p;*!LAccK|knpPo4PWxOv#U9%6UfGRUsP7PopY{l%3Ft;6ci4gArQpvBAd0s z8UT2(SHsgxFSF=Wnd4g_4yT9!2&)_mws|@=Wj{43DAf^`$~aQuRq`^!ig=ziX{cMG z#1rR80wughs|BSjs8CtuG|s-kq`tO5JkLfL$`sDy%TXnOH=w4sT2LG*64eMq!)slY z-H<9zk7FVgPnBapwOs>7h^|Qs6<7ofLmec9;S*WZKch&I~M;KaIwaFc>a2`$@4w(|WaB z;j6#xPdv1{ zC&B=jEIPdU&HG`~_0fr!r$Mxe)H3xbEt1yJ_VnTLo(ZE4rw$bvA1zo1HshlOP8}-t zl-AD`9e#XxPt}%%@ifGm>DCFa=xcaLas0q&&*v8Qj}@3I7O;ND-vL{1#dzqJ4_w+AvSrFj?t? z>QdWmfa8^#3W@DAqaszufC?~GDwx(xXtZhOuF&2UMPFPdk}X;IX>EQL32B!Bn(@;d z-X|xP;h9npiO!QGWA;a4UIW@Y_Pvmd^s*h3k+#V)h|U;5#+-WH_9`0Tr0O7a>-LD- z_H|9PN|e9MfQE>HPp|Rc@kEE)6LcAlB9(wN^(@RTD-73ndT3$e_$qa$-i;N^Zgx5RFc}RRBtL;+zJm|mw=e(#%a~>i_No0N^NtFrS#?z{NW>}h| zEMrTRgFHlhK}uFfPk_SbEDsTOIygaV2$`KE6_rE5h!syABcG|VGDz!*mTI-Zf&N3X zWntrX)Kz^*fLi!h4aLS&^)L^SfN~lM%Iee73<>9H3tyGrWMysL!^V$D#xq$HdL)NV zedqi1dLAN8MFYN^MEOiv+M%RKL?NKx?53SFNjy(|{C7MRe}P&i`O%n`70wJzXvOhV z@@TU9G7rf-QzU1!CbeQHIU1CCq19lUyyK1KBZ`B!H_BvS#W2tYheeqw=S)%j5|5|H zSKBKYSO2`4EV~>E--;yPij zhz_7Nil@@-)Wb8!9kFt#;k6rU?0NPre(;q~^Yzac**#oHl#+%2-s2~)e!xF&tiq6v zameA$-N|L1)h-QMadv*0v-8U+trDxQ5tqgylcPK0krQ2#9aPeo?3OUrv~5(oWbr%U72>KjOp9Bz@0C+m2GSA}lVaM|W^JW2 z{JK5$lZ=|A{Cjx=f#jho-ZY7`JwGJrBr+bqJBK{vBT1n?KOG;)nD_^}9jml`kI8Ts4rNRzrbC20fttE}-~Tf(!Y z8$B1uzdpRjyDRH(e)@GlL&ePfwlzrNg4fgFG79o9Cs>}a*Uq)Tlr z?%7`DVnOk}m;cT07gpHlvOjshyw1bFe2ayft9@~byW;e`gqk&jBf`J1Zho=XI%{NBZvmd14EG+C_5mFz{73F*6q%EsxGw6KmJ9HPzs#~ z3o@r+yR<@flm)hpx@SM*7fKrBg6Euzs9mj|c^3%XRT?($V{*@a#*bXkz-3^`JRLT5 zeC_IT-{M~aby@Sw;T7Qgz@MfL=Xqv!rD4sUy0i#tD*nhLT8~FcC=53{a%o56zrx&+ z>1w9_)GPHbk0Nphkl1R==AvtxlTYKyg`4l$ANU2hgW@Ovr%Jxy>*S?b;3BYVU_p8U zcYw#3J5s8Dp__z3^#?f!awYlo$-(8juAt-~b4N;?ywqalTH)kh&H#@C6N7{ 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", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "Like", "LIKED": "Liked", @@ -966,6 +925,152 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Create Project", + "FRESH": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Import project", + "IMPORT_DESC": "Import from Taiga, Trello, Jira, Github...", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator.", + "PRIVATE_PROJECT": "Private Project" + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "IMPORT": "Import", + "ARCHIVED": "Archived", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Assign", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "Importing Project", + "DESCRIPTION": "This process can take a while, please keep the window open." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Issues", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1518,20 +1623,7 @@ "THEME_DEFAULT": "-- use default theme --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" - }, + "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}", diff --git a/app/modules/components/click-input-file.directive.coffee b/app/modules/components/click-input-file.directive.coffee new file mode 100644 index 00000000..bce23fbc --- /dev/null +++ b/app/modules/components/click-input-file.directive.coffee @@ -0,0 +1,39 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/click-input-file.directive.coffee +### + +ClickInputFile = () -> + return { + link: (scope, el) -> + el.on 'click', (e) -> + if !$(e.target).is('input') + e.preventDefault() + inputFile = el.find('input[type="file"]') + inputFile.val('') + inputFile.trigger('click') + + scope.$on "$destroy", -> el.off() + } + +angular.module("taigaComponents") + .directive("tgClickInputFile", [ClickInputFile]) diff --git a/app/modules/components/file-change/file-change.directive.coffee b/app/modules/components/file-change/file-change.directive.coffee index 3c94f94a..bbd90bfa 100644 --- a/app/modules/components/file-change/file-change.directive.coffee +++ b/app/modules/components/file-change/file-change.directive.coffee @@ -27,7 +27,6 @@ FileChangeDirective = ($parse) -> scope.$on "$destroy", -> el.off() return { - require: "ngModel", restrict: "A", link: link } diff --git a/app/modules/home/projects/home-project-list-directive.spec.coffee b/app/modules/home/projects/home-project-list-directive.spec.coffee index d19de5ee..877d575c 100644 --- a/app/modules/home/projects/home-project-list-directive.spec.coffee +++ b/app/modules/home/projects/home-project-list-directive.spec.coffee @@ -40,12 +40,6 @@ describe "homeProjectListDirective", () -> provide.value "tgCurrentUserService", mocks.currentUserService - _mockTgProjectsService = () -> - mocks.projectsService = { - newProject: sinon.stub() - } - provide.value "tgProjectsService", mocks.projectsService - _mockTranslateFilter = () -> mockTranslateFilter = (value) -> return value @@ -55,7 +49,6 @@ describe "homeProjectListDirective", () -> module ($provide) -> provide = $provide _mockTgCurrentUserService() - _mockTgProjectsService() _mockTranslateFilter() return null @@ -82,11 +75,3 @@ describe "homeProjectListDirective", () -> elm = createDirective() scope.$apply() expect(elm.isolateScope().vm.projects.size).to.be.equal(3) - - it "home project list directive newProject", () -> - elm = createDirective() - scope.$apply() - - expect(mocks.projectsService.newProject.callCount).to.be.equal(0) - elm.isolateScope().vm.newProject() - expect(mocks.projectsService.newProject.callCount).to.be.equal(1) diff --git a/app/modules/home/projects/home-project-list.directive.coffee b/app/modules/home/projects/home-project-list.directive.coffee index d59a28e3..f6506f68 100644 --- a/app/modules/home/projects/home-project-list.directive.coffee +++ b/app/modules/home/projects/home-project-list.directive.coffee @@ -17,15 +17,12 @@ # File: home-project-list.directive.coffee ### -HomeProjectListDirective = (currentUserService, projectsService) -> +HomeProjectListDirective = (currentUserService) -> link = (scope, el, attrs, ctrl) -> scope.vm = {} taiga.defineImmutableProperty(scope.vm, "projects", () -> currentUserService.projects.get("recents")) - scope.vm.newProject = -> - projectsService.newProject() - directive = { templateUrl: "home/projects/home-project-list.html" scope: {} @@ -35,8 +32,7 @@ HomeProjectListDirective = (currentUserService, projectsService) -> return directive HomeProjectListDirective.$inject = [ - "tgCurrentUserService", - "tgProjectsService" + "tgCurrentUserService" ] angular.module("taigaHome").directive("tgHomeProjectList", HomeProjectListDirective) diff --git a/app/modules/home/projects/home-project-list.jade b/app/modules/home/projects/home-project-list.jade index beecb13c..73cf4ca6 100644 --- a/app/modules/home/projects/home-project-list.jade +++ b/app/modules/home/projects/home-project-list.jade @@ -84,14 +84,7 @@ section.projects-empty(ng-if="vm.projects != undefined && vm.projects.size === 0 p(translate="HOME.EMPTY_PROJECT_LIST") a.create-project-button.button-green( href="#" - ng-click="vm.newProject()" + tg-nav="create-project" title="{{'PROJECT.NAVIGATION.TITLE_CREATE_PROJECT' | translate}}" translate="PROJECT.NAVIGATION.ACTION_CREATE_PROJECT" ) - span(tg-import-project-button) - a.import-project-button.button-blackish( - href="#" - title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}" - translate="PROJECT.NAVIGATION.ACTION_IMPORT_PROJECT" - ) - input.import-file.hidden(type="file") diff --git a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade index 7940b928..b273ae62 100644 --- a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade +++ b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.jade @@ -29,14 +29,6 @@ div.navbar-dropdown.dropdown-project-list div.create-options a.create-project-btn.button-green( href="#", - ng-click="vm.newProject()", + tg-nav="create-project" title="{{'PROJECT.NAVIGATION.ACTION_CREATE_PROJECT' | translate}}", translate="PROJECT.NAVIGATION.ACTION_CREATE_PROJECT") - - span(tg-import-project-button) - a.button-blackish.import-project-button( - href="" - title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}" - ) - tg-svg(svg-icon="icon-upload") - input.import-file.hidden(type="file") diff --git a/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee new file mode 100644 index 00000000..d108f026 --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee @@ -0,0 +1,55 @@ +### +# Copyright (C) 2014-2016 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: asana-import-project-form.controller.coffee +### + +class AsanaImportProjectFormController + @.$inject = [ + "tgCurrentUserService" + ] + + constructor: (@currentUserService) -> + @.canCreatePublicProjects = @currentUserService.canCreatePublicProjects() + @.canCreatePrivateProjects = @currentUserService.canCreatePrivateProjects() + + @.projectForm = @.project.toJS() + + @.platformName = "Asana" + @.projectForm.is_private = false + @.projectForm.keepExternalReference = false + @.projectForm.project_type = "scrum" + + if !@.canCreatePublicProjects.valid && @.canCreatePrivateProjects.valid + @.projectForm.is_private = true + + checkUsersLimit: () -> + @.limitMembersPrivateProject = @currentUserService.canAddMembersPrivateProject(@.members.size) + @.limitMembersPublicProject = @currentUserService.canAddMembersPublicProject(@.members.size) + + saveForm: () -> + @.onSaveProjectDetails({project: Immutable.fromJS(@.projectForm)}) + + canCreateProject: () -> + if @.projectForm.is_private + return @.canCreatePrivateProjects.valid + else + return @.canCreatePublicProjects.valid + + isDisabled: () -> + return !@.canCreateProject() + +angular.module('taigaProjects').controller('AsanaImportProjectFormCtrl', AsanaImportProjectFormController) diff --git a/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee new file mode 100644 index 00000000..5c3879ca --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee @@ -0,0 +1,40 @@ +### +# Copyright (C) 2014-2016 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: asana-import-project-form.directive.coffee +### + +AsanaImportProjectFormDirective = () -> + return { + link: (scope, elm, attr, ctrl) -> + scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl)) + + templateUrl:"projects/create/asana-import/asana-import-project-form/asana-import-project-form.html", + controller: "AsanaImportProjectFormCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + members: '<', + project: '<', + onSaveProjectDetails: '&', + onCancelForm: '&', + fetchingUsers: '<' + } + } + +AsanaImportProjectFormDirective.$inject = [] + +angular.module("taigaProjects").directive("tgAsanaImportProjectForm", AsanaImportProjectFormDirective) diff --git a/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.jade b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.jade new file mode 100644 index 00000000..681f9f1c --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.jade @@ -0,0 +1,63 @@ +.import-project-asana-form + div(ng-include="'projects/create/import/import-header.html'") + + .spin(tg-loading="vm.fetchingUsers") + + form( + ng-if="!vm.fetchingUsers", + name="projectForm", + ng-submit="vm.saveForm()" + ) + div(ng-include="'projects/create/import-project-form-common/name.html'") + div(ng-include="'projects/create/import-project-form-common/description.html'") + .create-project-import-type(role="group") + fieldset + input( + type="radio" + name="project_type" + id="template-scrum" + data-required="true" + aria-hidden="true" + ng-value="'scrum'" + ng-model="vm.projectForm.project_type" + required + ) + label(for="template-scrum") + tg-svg(svg-icon="icon-scrum") + span(translate="PROJECT.IMPORT.ASANA.SCRUM_PROJECT") + fieldset + input( + type="radio" + name="project_type" + id="template-kanban" + data-required="true" + aria-hidden="true" + ng-value="'kanban'" + ng-model="vm.projectForm.project_type" + required + ) + label(for="template-kanban") + tg-svg(svg-icon="icon-kanban") + span(translate="PROJECT.IMPORT.ASANA.KANBAN_PROJECT") + + p.create-project-import-type-info( + ng-if="vm.projectForm.project_type == 'scrum'" + translate='PROJECT.IMPORT.ASANA.CREATE_AS_SCRUM_DESCRIPTION' + ) + p.create-project-import-type-info( + ng-if="vm.projectForm.project_type == 'kanban'" + translate='PROJECT.IMPORT.ASANA.CREATE_AS_KANBAN_DESCRIPTION' + ) + div(ng-include="'projects/create/import-project-form-common/project-privacy.html'") + tg-create-project-restrictions( + is-private="vm.projectForm.is_private" + can-create-public-projects="vm.canCreatePublicProjects" + can-create-private-projects="vm.canCreatePrivateProjects" + ) + tg-create-project-members-restrictions( + is-private="vm.projectForm.is_private" + limit-members-private-project="vm.limitMembersPrivateProject" + limit-members-public-project="vm.limitMembersPublicProject" + ) + div(ng-include="'projects/create/import-project-form-common/links.html'") + div(ng-include="'projects/create/import-project-form-common/actions.html'") diff --git a/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.scss b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.scss new file mode 100644 index 00000000..e31c798c --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.scss @@ -0,0 +1,57 @@ +.import-project-asana-form { + @include create-project; +} + +.create-project-asana-import-type { + margin-bottom: 1rem; + text-align: center; + + &-question { + align-content: stretch; + align-items: stretch; + display: flex; + } + + fieldset { + background: $white; + border-right: 1px solid $whitish; + transition: background .2s linear; + + &:last-child { + border: 0; + } + } + + input { + display: none; + + &:checked { + +label { + background: rgba($primary, .1); + } + } + } + + label { + background: $white; + height: 100%; + padding: 1rem; + transition: background .2s ease-in; + + &:hover { + background: rgba($primary, .1); + cursor: pointer; + } + } + + &-name { + @include font-type(normal); + display: inline-block; + margin-bottom: .5rem; + } + + &-description { + @include font-type(light); + @include font-size(small); + } +} diff --git a/app/modules/projects/create/asana-import/asana-import.controller.coffee b/app/modules/projects/create/asana-import/asana-import.controller.coffee new file mode 100644 index 00000000..51e61a5a --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import.controller.coffee @@ -0,0 +1,73 @@ +### +# Copyright (C) 2014-2016 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: asana-import.controller.coffee +### + +class AsanaImportController + @.$inject = [ + 'tgAsanaImportService', + '$tgConfirm', + '$translate', + 'tgImportProjectService', + ] + + constructor: (@asanaImportService, @confirm, @translate, @importProjectService) -> + @.step = 'autorization-asana' + @.project = null + taiga.defineImmutableProperty @, 'projects', () => return @asanaImportService.projects + taiga.defineImmutableProperty @, 'members', () => return @asanaImportService.projectUsers + + startProjectSelector: () -> + @.step = 'project-select-asana' + @asanaImportService.fetchProjects() + + onSelectProject: (project) -> + @.step = 'project-form-asana' + @.project = project + @.fetchingUsers = true + + @asanaImportService.fetchUsers(@.project.get('id')).then () => @.fetchingUsers = false + + onSaveProjectDetails: (project) -> + @.project = project + @.step = 'project-members-asana' + + onCancelMemberSelection: () -> + @.step = 'project-form-asana' + + startImport: (users) -> + loader = @confirm.loader(@translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), @translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true) + + loader.start() + + promise = @asanaImportService.importProject( + @.project.get('name'), + @.project.get('description'), + @.project.get('id'), + users, + @.project.get('keepExternalReference'), + @.project.get('is_private') + @.project.get('project_type') + ) + + @importProjectService.importPromise(promise).then () => loader.stop() + + submitUserSelection: (users) -> + @.startImport(users) + return null + +angular.module('taigaProjects').controller('AsanaImportCtrl', AsanaImportController) diff --git a/app/modules/projects/create/asana-import/asana-import.controller.spec.coffee b/app/modules/projects/create/asana-import/asana-import.controller.spec.coffee new file mode 100644 index 00000000..49720ae1 --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import.controller.spec.coffee @@ -0,0 +1,172 @@ +### +# Copyright (C) 2014-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: asana-import.controller.spec.coffee +### + +describe "AsanaImportCtrl", -> + $provide = null + $controller = null + mocks = {} + + _mockCurrentUserService = -> + mocks.currentUserService = { + canAddMembersPrivateProject: sinon.stub() + canAddMembersPublicProject: sinon.stub() + } + + $provide.value("tgCurrentUserService", mocks.currentUserService) + + _mockAsanaImportService = -> + mocks.asanaService = { + fetchProjects: sinon.stub(), + fetchUsers: sinon.stub(), + importProject: sinon.stub() + } + + $provide.value("tgAsanaImportService", mocks.asanaService) + + _mockImportProjectService = -> + mocks.importProjectService = { + importPromise: sinon.stub() + } + + $provide.value("tgImportProjectService", mocks.importProjectService) + + _mockConfirm = -> + mocks.confirm = { + loader: sinon.stub() + } + + $provide.value("$tgConfirm", mocks.confirm) + + _mockTranslate = -> + mocks.translate = { + instant: sinon.stub() + } + + $provide.value("$translate", mocks.translate) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockAsanaImportService() + _mockConfirm() + _mockTranslate() + _mockImportProjectService() + _mockCurrentUserService() + + return null + + _inject = -> + inject (_$controller_) -> + $controller = _$controller_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "start project selector", () -> + ctrl = $controller("AsanaImportCtrl") + ctrl.startProjectSelector() + + expect(ctrl.step).to.be.equal('project-select-asana') + expect(mocks.asanaService.fetchProjects).have.been.called + + it "on select project reload projects", (done) -> + project = Immutable.fromJS({ + id: 1, + name: "project-name" + }) + + mocks.asanaService.fetchUsers.promise().resolve() + + ctrl = $controller("AsanaImportCtrl") + + promise = ctrl.onSelectProject(project) + + expect(ctrl.fetchingUsers).to.be.true + + promise.then () -> + expect(ctrl.fetchingUsers).to.be.false + expect(ctrl.step).to.be.equal('project-form-asana') + expect(ctrl.project).to.be.equal(project) + done() + + it "on save project details reload users", () -> + project = Immutable.fromJS({ + id: 1, + name: "project-name" + }) + + ctrl = $controller("AsanaImportCtrl") + ctrl.onSaveProjectDetails(project) + + expect(ctrl.step).to.be.equal('project-members-asana') + expect(ctrl.project).to.be.equal(project) + + it "on select user init import", (done) -> + users = Immutable.fromJS([ + { + id: 0 + }, + { + id: 1 + }, + { + id: 2 + } + ]) + + loaderObj = { + start: sinon.spy(), + update: sinon.stub(), + stop: sinon.spy() + } + + projectResult = { + id: 3, + name: "name" + } + + mocks.confirm.loader.returns(loaderObj) + + mocks.importProjectService.importPromise.promise().resolve() + + ctrl = $controller("AsanaImportCtrl") + ctrl.project = Immutable.fromJS({ + id: 1, + name: 'project-name', + description: 'project-description', + keepExternalReference: false, + is_private: true + }) + + + mocks.asanaService.importProject.promise().resolve(projectResult) + + ctrl.startImport(users).then () -> + expect(loaderObj.start).have.been.called + expect(loaderObj.stop).have.been.called + expect(mocks.asanaService.importProject).have.been.calledWith('project-name', 'project-description', 1, users, false, true) + + done() diff --git a/app/modules/projects/create/asana-import/asana-import.directive.coffee b/app/modules/projects/create/asana-import/asana-import.directive.coffee new file mode 100644 index 00000000..18a8308e --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import.directive.coffee @@ -0,0 +1,35 @@ +### +# Copyright (C) 2014-2016 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: asana-import.directive.coffee +### + +AsanaImportDirective = () -> + return { + link: (scope, elm, attrs, ctrl) -> + ctrl.startProjectSelector() + templateUrl:"projects/create/asana-import/asana-import.html", + controller: "AsanaImportCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + onCancel: '&' + } + } + +AsanaImportDirective.$inject = [] + +angular.module("taigaProjects").directive("tgAsanaImport", AsanaImportDirective) diff --git a/app/modules/projects/create/asana-import/asana-import.jade b/app/modules/projects/create/asana-import/asana-import.jade new file mode 100644 index 00000000..ac684194 --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import.jade @@ -0,0 +1,31 @@ +.create-project.import-project(ng-if="vm.step == 'autorization-asana'") + p autorization... + + +tg-import-project-selector( + logo="/#{v}/images/import-logos/asana.png" + search="{{ 'PROJECT.IMPORT.ASANA.CHOOSE_BOARD' | translate }}" + projects="vm.projects" + on-cancel="vm.onCancel()" + on-select-project="vm.onSelectProject(project)" + ng-if="vm.step == 'project-select-asana'" +) + +tg-asana-import-project-form( + ng-if="vm.step == 'project-form-asana'" + project="vm.project" + members="vm.members" + fetching-users="vm.fetchingUsers" + on-save-project-details="vm.onSaveProjectDetails(project)" + on-cancel-form="vm.step = 'project-select-asana'" +) + +tg-import-project-members( + ng-if="vm.step == 'project-members-asana'" + platform="Asana" + logo="/#{v}/images/import-logos/asana.png" + project="vm.project" + members="vm.members" + on-submit="vm.submitUserSelection(users)" + on-cancel="vm.onCancelMemberSelection()" +) diff --git a/app/modules/projects/create/asana-import/asana-import.service.coffee b/app/modules/projects/create/asana-import/asana-import.service.coffee new file mode 100644 index 00000000..e3723fec --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import.service.coffee @@ -0,0 +1,57 @@ +### +# Copyright (C) 2014-2016 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: asana-import.service.coffee +### + +class AsanaImportService extends taiga.Service + @.$inject = [ + 'tgResources', + '$location' + ] + + constructor: (@resources, @location) -> + @.projects = Immutable.List() + @.projectUsers = Immutable.List() + @.token = null + + setToken: (token) -> + @.token = token + + fetchProjects: () -> + @resources.asanaImporter.listProjects(@.token).then (projects) => @.projects = projects + + fetchUsers: (projectId) -> + @resources.asanaImporter.listUsers(@.token, projectId).then (users) => @.projectUsers = users + + importProject: (name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) -> + return @resources.asanaImporter.importProject(@.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) + + getAuthUrl: () -> + return new Promise (resolve) => + @resources.asanaImporter.getAuthUrl().then (response) => + @.authUrl = response.data.url + resolve(@.authUrl) + + authorize: (code) -> + return new Promise (resolve, reject) => + @resources.asanaImporter.authorize(code).then ((response) => + @.token = response.data.token + resolve(@.token) + ), (error) -> + reject(new Error(error.status)) + +angular.module("taigaProjects").service("tgAsanaImportService", AsanaImportService) diff --git a/app/modules/projects/create/asana-import/asana-import.service.spec.coffee b/app/modules/projects/create/asana-import/asana-import.service.spec.coffee new file mode 100644 index 00000000..0574e582 --- /dev/null +++ b/app/modules/projects/create/asana-import/asana-import.service.spec.coffee @@ -0,0 +1,128 @@ +### +# Copyright (C) 2014-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: asana-import.controller.spec.coffee +### + +describe "tgAsanaImportService", -> + $provide = null + service = null + mocks = {} + + _mockResources = -> + mocks.resources = { + asanaImporter: { + listProjects: sinon.stub(), + listUsers: sinon.stub(), + importProject: sinon.stub(), + getAuthUrl: sinon.stub(), + authorize: sinon.stub() + } + } + + $provide.value("tgResources", mocks.resources) + + _mockLocation = -> + mocks.location = { + search: sinon.stub() + } + + mocks.location.search.returns({ + from: 'asana' + token: 123 + }) + + $provide.value("$location", mocks.location) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockResources() + _mockLocation() + + return null + + _inject = -> + inject (_tgAsanaImportService_) -> + service = _tgAsanaImportService_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "fetch projects", (done) -> + service.setToken(123) + mocks.resources.asanaImporter.listProjects.withArgs(123).promise().resolve('projects') + + service.fetchProjects().then () -> + service.projects = "projects" + done() + + it "fetch user", (done) -> + service.setToken(123) + projectId = 3 + mocks.resources.asanaImporter.listUsers.withArgs(123, projectId).promise().resolve('users') + + service.fetchUsers(projectId).then () -> + service.projectUsers = 'users' + done() + + it "import project", () -> + service.setToken(123) + projectId = 2 + + service.importProject(projectId, true, true ,true) + + expect(mocks.resources.asanaImporter.importProject).to.have.been.calledWith(123, projectId, true, true, true) + + it "get auth url", (done) -> + service.setToken(123) + projectId = 3 + + response = { + data: { + url: "url123" + } + } + + mocks.resources.asanaImporter.getAuthUrl.promise().resolve(response) + + service.getAuthUrl().then (url) -> + expect(url).to.be.equal("url123") + done() + + it "authorize", (done) -> + service.setToken(123) + projectId = 3 + verifyCode = 12345 + + response = { + data: { + token: "token123" + } + } + + mocks.resources.asanaImporter.authorize.withArgs(verifyCode).promise().resolve(response) + + service.authorize(verifyCode).then (token) -> + expect(token).to.be.equal("token123") + done() diff --git a/app/modules/projects/create/create-project-form/create-project-form.controller.coffee b/app/modules/projects/create/create-project-form/create-project-form.controller.coffee new file mode 100644 index 00000000..1a4c235d --- /dev/null +++ b/app/modules/projects/create/create-project-form/create-project-form.controller.coffee @@ -0,0 +1,63 @@ +### +# Copyright (C) 2014-2016 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: create-project-form.controller.coffee +### + +class CreatetProjectFormController + @.$inject = [ + "tgCurrentUserService", + "tgProjectsService", + "$projectUrl", + "$location", + "$tgNavUrls" + ] + + constructor: (@currentUserService, @projectsService, @projectUrl, @location, @navUrls) -> + @.projectForm = { + is_private: false + } + + @.canCreatePublicProjects = @currentUserService.canCreatePublicProjects() + @.canCreatePrivateProjects = @currentUserService.canCreatePrivateProjects() + + if !@.canCreatePublicProjects.valid && @.canCreatePrivateProjects.valid + @.projectForm.is_private = true + + if @.type == 'scrum' + @.projectForm.creation_template = 1 + else + @.projectForm.creation_template = 2 + + submit: () -> + @.formSubmitLoading = true + + @projectsService.create(@.projectForm).then (project) => + @location.url(@projectUrl.get(project)) + + onCancelForm: () -> + @location.path(@navUrls.resolve("create-project")) + + canCreateProject: () -> + if @.projectForm.is_private + return @.canCreatePrivateProjects.valid + else + return @.canCreatePublicProjects.valid + + isDisabled: () -> + return @.formSubmitLoading || !@.canCreateProject() + +angular.module('taigaProjects').controller('CreateProjectFormCtrl', CreatetProjectFormController) diff --git a/app/modules/projects/create/create-project-form/create-project-form.controller.spec.coffee b/app/modules/projects/create/create-project-form/create-project-form.controller.spec.coffee new file mode 100644 index 00000000..bc68c788 --- /dev/null +++ b/app/modules/projects/create/create-project-form/create-project-form.controller.spec.coffee @@ -0,0 +1,139 @@ +### +# Copyright (C) 2014-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: create-project-form.controller.spec.coffee +### + +describe "CreateProjectFormCtrl", -> + $provide = null + $controller = null + mocks = {} + + _mockNavUrlsService = -> + mocks.navUrls = { + resolve: sinon.stub() + } + + $provide.value("$tgNavUrls", mocks.navUrls) + + _mockCurrentUserService = -> + mocks.currentUserService = { + canCreatePublicProjects: sinon.stub().returns({valid: true}), + canCreatePrivateProjects: sinon.stub().returns({valid: true}) + } + + $provide.value("tgCurrentUserService", mocks.currentUserService) + + _mockProjectsService = -> + mocks.projectsService = { + create: sinon.stub() + } + + $provide.value("tgProjectsService", mocks.projectsService) + + _mockProjectUrl = -> + mocks.projectUrl = { + get: sinon.stub() + } + + $provide.value("$projectUrl", mocks.projectUrl) + + _mockLocation = -> + mocks.location = { + url: sinon.stub() + } + + $provide.value("$location", mocks.location) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockCurrentUserService() + _mockProjectsService() + _mockProjectUrl() + _mockLocation() + _mockNavUrlsService() + + return null + + _inject = -> + inject (_$controller_) -> + $controller = _$controller_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "submit project form", () -> + ctrl = $controller("CreateProjectFormCtrl") + + ctrl.projectForm = 'form' + + mocks.projectsService.create.withArgs('form').promise().resolve('project1') + mocks.projectUrl.get.returns('project-url') + + ctrl.submit().then () -> + expect(ctrl.formSubmitLoading).to.be.true + + expect(mocks.location.url).to.have.been.calledWith('project-url') + + it 'check if the user can create a private projects', () -> + mocks.currentUserService.canCreatePrivateProjects = sinon.stub().returns({valid: true}) + + ctrl = $controller("CreateProjectFormCtrl") + + ctrl.projectForm = { + is_private: true + } + + expect(ctrl.canCreateProject()).to.be.true + + mocks.currentUserService.canCreatePrivateProjects = sinon.stub().returns({valid: false}) + + ctrl = $controller("CreateProjectFormCtrl") + + ctrl.projectForm = { + is_private: true + } + + expect(ctrl.canCreateProject()).to.be.false + + it 'check if the user can create a public projects', () -> + mocks.currentUserService.canCreatePublicProjects = sinon.stub().returns({valid: true}) + + ctrl = $controller("CreateProjectFormCtrl") + + ctrl.projectForm = { + is_private: false + } + + expect(ctrl.canCreateProject()).to.be.true + + mocks.currentUserService.canCreatePublicProjects = sinon.stub().returns({valid: false}) + + ctrl = $controller("CreateProjectFormCtrl") + + ctrl.projectForm = { + is_private: false + } + + expect(ctrl.canCreateProject()).to.be.false diff --git a/app/modules/projects/create/create-project-form/create-project-form.directive.coffee b/app/modules/projects/create/create-project-form/create-project-form.directive.coffee new file mode 100644 index 00000000..c3853d83 --- /dev/null +++ b/app/modules/projects/create/create-project-form/create-project-form.directive.coffee @@ -0,0 +1,31 @@ +### +# Copyright (C) 2014-2016 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: create-project-form.directive.coffee +### + +CreateProjectFormDirective = () -> + return { + templateUrl:"projects/create/create-project-form/create-project-form.html", + controller: "CreateProjectFormCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + type: '@' + } + } + +angular.module("taigaProjects").directive("tgCreateProjectForm", CreateProjectFormDirective) diff --git a/app/modules/projects/create/create-project-form/create-project-form.jade b/app/modules/projects/create/create-project-form/create-project-form.jade new file mode 100644 index 00000000..c5a29054 --- /dev/null +++ b/app/modules/projects/create/create-project-form/create-project-form.jade @@ -0,0 +1,32 @@ +.create-project + h1.create-project-title(ng-if="vm.type == 'scrum'") + tg-svg(svg-icon="icon-scrum") + span(translate="PROJECT.CREATE.TEMPLATE_SCRUM") + h3.create-project-description( + ng-if="vm.type == 'scrum'" + translate="PROJECT.CREATE.TEMPLATE_SCRUM_DESC" + ) + + h1.create-project-title(ng-if="vm.type == 'kanban'") + tg-svg(svg-icon="icon-kanban") + span(translate="PROJECT.CREATE.TEMPLATE_KANBAN") + h3.create-project-description( + ng-if="vm.type == 'kanban'" + translate="PROJECT.CREATE.TEMPLATE_KANBAN_DESC" + ) + + form( + name="projectForm", + ng-submit="vm.submit()" + ) + div(ng-include="'projects/create/import-project-form-common/name.html'") + div(ng-include="'projects/create/import-project-form-common/description.html'") + div(ng-include="'projects/create/import-project-form-common/project-privacy.html'") + + tg-create-project-restrictions( + is-private="vm.projectForm.is_private" + can-create-public-projects="vm.canCreatePublicProjects" + can-create-private-projects="vm.canCreatePrivateProjects" + ) + + div(ng-include="'projects/create/import-project-form-common/actions.html'") \ No newline at end of file diff --git a/app/modules/projects/create/create-project-members-restrictions/create-project-members-restrictions.directive.coffee b/app/modules/projects/create/create-project-members-restrictions/create-project-members-restrictions.directive.coffee new file mode 100644 index 00000000..da6d0c90 --- /dev/null +++ b/app/modules/projects/create/create-project-members-restrictions/create-project-members-restrictions.directive.coffee @@ -0,0 +1,13 @@ +module = angular.module("taigaProject") + +createProjectMembersRestrictionsDirective = () -> + return { + scope: { + isPrivate: '=', + limitMembersPrivateProject: '=', + limitMembersPublicProject: '=' + }, + templateUrl: "projects/create/create-project-members-restrictions/create-project-members-restrictions.html" + } + +module.directive('tgCreateProjectMembersRestrictions', [createProjectMembersRestrictionsDirective]) diff --git a/app/modules/projects/create/create-project-members-restrictions/create-project-members-restrictions.jade b/app/modules/projects/create/create-project-members-restrictions/create-project-members-restrictions.jade new file mode 100644 index 00000000..c65b9d6e --- /dev/null +++ b/app/modules/projects/create/create-project-members-restrictions/create-project-members-restrictions.jade @@ -0,0 +1,13 @@ +div.create-project-warning(ng-if="!limitMembersPublicProject.valid && !isPrivate") + tg-svg(svg-icon="icon-exclamation") + span( + translate="PROJECT.IMPORT.PROJECT_RESTRICTIONS.PROJECT_MEMBERS_DESC_PUBLIC", + translate-values="{'members': limitMembersPublicProject.current, 'max_memberships': limitMembersPublicProject.max}" + ) + +div.create-project-warning(ng-if="!limitMembersPrivateProject.valid && isPrivate") + tg-svg(svg-icon="icon-exclamation") + span( + translate="PROJECT.IMPORT.PROJECT_RESTRICTIONS.PROJECT_MEMBERS_DESC_PRIVATE", + translate-values="{'members': limitMembersPrivateProject.current, 'max_memberships': limitMembersPrivateProject.max}" + ) \ No newline at end of file diff --git a/app/modules/projects/create/create-project-restrictions/create-project-restrictions.directive.coffee b/app/modules/projects/create/create-project-restrictions/create-project-restrictions.directive.coffee new file mode 100644 index 00000000..e825a916 --- /dev/null +++ b/app/modules/projects/create/create-project-restrictions/create-project-restrictions.directive.coffee @@ -0,0 +1,13 @@ +module = angular.module("taigaProject") + +createProjectRestrictionsDirective = () -> + return { + scope: { + isPrivate: '=', + canCreatePrivateProjects: '=', + canCreatePublicProjects: '=' + }, + templateUrl: "projects/create/create-project-restrictions/create-project-restrictions.html" + } + +module.directive('tgCreateProjectRestrictions', [createProjectRestrictionsDirective]) diff --git a/app/modules/projects/create/create-project-restrictions/create-project-restrictions.jade b/app/modules/projects/create/create-project-restrictions/create-project-restrictions.jade new file mode 100644 index 00000000..1943527b --- /dev/null +++ b/app/modules/projects/create/create-project-restrictions/create-project-restrictions.jade @@ -0,0 +1,11 @@ +div.create-project-warning( + ng-if="isPrivate && !canCreatePrivateProjects.valid && canCreatePrivateProjects.reason == 'max_private_projects'" +) + tg-svg(svg-icon="icon-exclamation") + span {{ 'PROJECT.CREATE.MAX_PRIVATE_PROJECTS' | translate }} + +div.create-project-warning( + ng-if="!isPrivate && !canCreatePublicProjects.valid && canCreatePublicProjects.reason == 'max_public_projects'" +) + tg-svg(svg-icon="icon-exclamation") + span {{ 'PROJECT.CREATE.MAX_PUBLIC_PROJECTS' | translate }} \ No newline at end of file diff --git a/app/modules/projects/create/create-project.controller.coffee b/app/modules/projects/create/create-project.controller.coffee new file mode 100644 index 00000000..7678aa68 --- /dev/null +++ b/app/modules/projects/create/create-project.controller.coffee @@ -0,0 +1,56 @@ +### +# Copyright (C) 2014-2016 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: project.controller.coffee +### + +class CreateProjectController + @.$inject = [ + "tgAppMetaService", + "$translate", + "tgProjectService", + "$location" + ] + + constructor: (@appMetaService, @translate, @projectService, @location) -> + taiga.defineImmutableProperty @, "project", () => return @projectService.project + + @appMetaService.setfn @._setMeta.bind(this) + + @.displayScrumDesc = false + @.displayKanbanDesc = false + + _setMeta: () -> + return null if !@.project + + ctx = {projectName: @.project.get("name")} + + return { + title: @translate.instant("PROJECT.PAGE_TITLE", ctx) + description: @.project.get("description") + } + + displayHelp: (type, $event) -> + $event.stopPropagation() + $event.preventDefault() + + if type == 'scrum' + @.displayScrumDesc = !@.displayScrumDesc + if type == 'kanban' + @.displayKanbanDesc = !@.displayKanbanDesc + + +angular.module("taigaProjects").controller("CreateProjectCtrl", CreateProjectController) diff --git a/app/modules/projects/create/create-project.controller.spec.coffee b/app/modules/projects/create/create-project.controller.spec.coffee new file mode 100644 index 00000000..385e5652 --- /dev/null +++ b/app/modules/projects/create/create-project.controller.spec.coffee @@ -0,0 +1,45 @@ +### +# Copyright (C) 2014-2016 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: create-project.controller.spec.coffee +### + +describe "CreateProjectController", -> + provide = null + controller = null + mocks = {} + + _inject = (callback) -> + inject (_$controller_, _$q_, _$rootScope_) -> + controller = _$controller_ + + beforeEach -> + module "taigaProjects" + _inject() + + # it "get Home Step", () -> + # ctrl = controller "CreateProjectCtrl" + # ctrl.inDefaultStep = true + # ctrl.getStep('home') + # expect(ctrl.inDefaultStep).to.be.true + # expect(ctrl.inStepDuplicateProject).to.be.false + # + # it "get Duplicate Project Step", () -> + # ctrl = controller "CreateProjectCtrl" + # ctrl.inDefaultStep = true + # ctrl.getStep('duplicate') + # expect(ctrl.inDefaultStep).to.be.false + # expect(ctrl.inStepDuplicateProject).to.be.true diff --git a/app/modules/projects/create/create-project.jade b/app/modules/projects/create/create-project.jade new file mode 100644 index 00000000..2fdc47de --- /dev/null +++ b/app/modules/projects/create/create-project.jade @@ -0,0 +1,69 @@ +.create-project + .create-project-wrapper + h1.create-project-title(translate="PROJECT.CREATE.TITLE") + h3.create-project-description(translate="PROJECT.CREATE.CHOOSE_TEMPLATE") + ul.create-project-selector.e2e-create-project-selector + li + a.e2e-create-project-scrum( + title="{{'PROJECT.CREATE.TEMPLATE_SCRUM' | translate}}", + tg-nav="create-project-scrum" + href="" + ) + .create-project-selector-icon + tg-svg(svg-icon="icon-scrum") + .create-project-selector-template-wrapper + p.create-project-selector-template(translate="PROJECT.CREATE.TEMPLATE_SCRUM") + p.create-project-selector-description(translate="PROJECT.CREATE.TEMPLATE_SCRUM_DESC") + .create-project-selector-question + tg-svg( + svg-icon="icon-question" + ng-click="vm.displayHelp('scrum', $event)" + ) + .create-project-selector-long-description(ng-show="vm.displayScrumDesc") + p(translate="PROJECT.CREATE.TEMPLATE_SCRUM_LONGDESC") + li + a.e2e-create-project-kanban( + tg-nav="create-project-kanban" + title="{{'PROJECT.CREATE.TEMPLATE_KANBAN' | translate}}", + href="" + ) + .create-project-selector-icon + tg-svg(svg-icon="icon-kanban") + + .create-project-selector-template-wrapper + p.create-project-selector-template(translate="PROJECT.CREATE.TEMPLATE_KANBAN") + p.create-project-selector-description(translate="PROJECT.CREATE.TEMPLATE_KANBAN_DESC") + .create-project-selector-question + tg-svg( + svg-icon="icon-question" + ng-click="vm.displayHelp('kanban', $event)" + ) + .create-project-selector-long-description(ng-show="vm.displayKanbanDesc") + p(translate="PROJECT.CREATE.TEMPLATE_KANBAN_LONGDESC") + li + a.e2e-duplicate-project( + tg-nav="create-project-duplicate" + title="{{'PROJECT.CREATE.DUPLICATE' | translate}}", + href="" + ) + .create-project-selector-icon + tg-svg(svg-icon="icon-duplicate") + .create-project-selector-template-wrapper + p.create-project-selector-template(translate="PROJECT.CREATE.DUPLICATE") + p.create-project-selector-description(translate="PROJECT.CREATE.DUPLICATE_DESC") + + li + a( + tg-nav="create-project-import" + title="{{'PROJECT.CREATE.IMPORT' | translate}}", + href="" + ) + .create-project-selector-icon + tg-svg(svg-icon="icon-upload") + .create-project-selector-template-wrapper + p.create-project-selector-template( + href="#" + title="{{'PROJECT.CREATE.IMPORT' | translate}}", + translate="PROJECT.CREATE.IMPORT" + ) + p.create-project-selector-description(translate="PROJECT.CREATE.IMPORT_DESC") diff --git a/app/modules/projects/create/create-project.scss b/app/modules/projects/create/create-project.scss new file mode 100644 index 00000000..9d120830 --- /dev/null +++ b/app/modules/projects/create/create-project.scss @@ -0,0 +1,3 @@ +.create-project { + @include create-project; +} diff --git a/app/modules/projects/create/duplicate/duplicate-project.controller.coffee b/app/modules/projects/create/duplicate/duplicate-project.controller.coffee new file mode 100644 index 00000000..f84bc340 --- /dev/null +++ b/app/modules/projects/create/duplicate/duplicate-project.controller.coffee @@ -0,0 +1,85 @@ +### +# Copyright (C) 2014-2016 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: project.controller.coffee +### + +class DuplicateProjectController + @.$inject = [ + "tgCurrentUserService", + "tgProjectsService", + "$tgLocation", + "$tgNavUrls" + ] + + constructor: (@currentUserService, @projectsService, @location, @navUrls) -> + @.user = @currentUserService.getUser() + @.members = Immutable.List() + + @.canCreatePublicProjects = @currentUserService.canCreatePublicProjects() + @.canCreatePrivateProjects = @currentUserService.canCreatePrivateProjects() + + taiga.defineImmutableProperty @, 'projects', () => @currentUserService.projects.get("all") + + @.projectForm = { + is_private: false + } + + if !@.canCreatePublicProjects.valid && @.canCreatePrivateProjects.valid + @.projectForm.is_private = true + + refreshReferenceProject: (slug) -> + @projectsService.getProjectBySlug(slug).then (project) => + @.referenceProject = project + @.members = project.get('members') + @.invitedMembers = @.members.map (it) -> return it.get('id') + @.checkUsersLimit() + + toggleInvitedMember: (member) -> + if @.invitedMembers.includes(member) + @.invitedMembers = @.invitedMembers.filter (it) -> it != member + else + @.invitedMembers = @.invitedMembers.push(member) + + @.checkUsersLimit() + + checkUsersLimit: () -> + @.limitMembersPrivateProject = @currentUserService.canAddMembersPrivateProject(@.invitedMembers.size + 1) + @.limitMembersPublicProject = @currentUserService.canAddMembersPublicProject(@.invitedMembers.size + 1) + + submit: () -> + projectId = @.referenceProject.get('id') + data = @.projectForm + + @.formSubmitLoading = true + @projectsService.duplicate(projectId, data).then (newProject) => + @.formSubmitLoading = false + @location.path(@navUrls.resolve("project", {project: newProject.data.slug})) + @currentUserService.loadProjects() + + canCreateProject: () -> + if @.projectForm.is_private + return @.canCreatePrivateProjects.valid && @.limitMembersPrivateProject.valid + else + return @.canCreatePublicProjects.valid && @.limitMembersPublicProject.valid + + isDisabled: () -> + return @.formSubmitLoading || !@.canCreateProject() + + onCancelForm: () -> + @location.path(@navUrls.resolve("create-project")) + +angular.module("taigaProjects").controller("DuplicateProjectCtrl", DuplicateProjectController) diff --git a/app/modules/projects/create/duplicate/duplicate-project.controller.spec.coffee b/app/modules/projects/create/duplicate/duplicate-project.controller.spec.coffee new file mode 100644 index 00000000..92c35ebe --- /dev/null +++ b/app/modules/projects/create/duplicate/duplicate-project.controller.spec.coffee @@ -0,0 +1,222 @@ +### +# Copyright (C) 2014-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: home.controller.spec.coffee +### + +describe "DuplicateProjectController", -> + ctrl = null + provide = null + controller = null + mocks = {} + + _mockCurrentUserService = () -> + mocks.currentUserService = {} + mocks.currentUserService.getUser = sinon.stub() + mocks.currentUserService.canCreatePublicProjects = sinon.stub().returns(true) + mocks.currentUserService.canCreatePrivateProjects = sinon.stub().returns(true) + + mocks.currentUserService.projects = {} + mocks.currentUserService.projects.get = sinon.stub().returns([]) + + mocks.currentUserService.loadProjects = sinon.stub() + + mocks.currentUserService.canAddMembersPrivateProject = sinon.stub() + mocks.currentUserService.canAddMembersPublicProject = sinon.stub() + + provide.value "tgCurrentUserService", mocks.currentUserService + + _mockProjectService = () -> + mocks.projectsService = {} + mocks.projectsService.getProjectBySlug = sinon.stub() + mocks.projectsService.duplicate = sinon.stub() + + provide.value "tgProjectsService", mocks.projectsService + + _mockLocation = () -> + mocks.location = { + path: sinon.stub() + } + provide.value "$tgLocation", mocks.location + + _mockTgNav = () -> + mocks.urlservice = { + resolve: sinon.stub() + } + provide.value "$tgNavUrls", mocks.urlservice + + _mocks = () -> + module ($provide) -> + provide = $provide + _mockCurrentUserService() + _mockProjectService() + _mockLocation() + _mockTgNav() + + return null + + beforeEach -> + module "taigaProjects" + + _mocks() + + inject ($controller) -> + controller = $controller + + ctrl = controller "DuplicateProjectCtrl" + + ctrl.projects = Immutable.fromJS([ + { + id: 1 + }, + { + id: 2 + } + ]) + + + + ctrl.canCreatePublicProjects = mocks.currentUserService.canCreatePublicProjects() + ctrl.canCreatePrivateProjects = mocks.currentUserService.canCreatePublicProjects() + ctrl.projectForm = {} + + it "toggle invited Member", () -> + ctrl = controller "DuplicateProjectCtrl" + + ctrl.invitedMembers = Immutable.List([1, 2, 3]) + ctrl.checkUsersLimit = sinon.spy() + + ctrl.toggleInvitedMember(2) + + expect(ctrl.invitedMembers.toJS()).to.be.eql([1, 3]) + + ctrl.toggleInvitedMember(5) + + expect(ctrl.invitedMembers.toJS()).to.be.eql([1, 3, 5]) + + expect(ctrl.checkUsersLimit).to.have.been.called + + it "get project to duplicate", () -> + project = Immutable.fromJS({ + members: [ + {id: 1}, + {id: 2}, + {id: 3} + ] + }) + + slug = 'slug' + ctrl._getInvitedMembers = sinon.stub() + + promise = mocks.projectsService.getProjectBySlug.withArgs(slug).promise().resolve(project) + + ctrl.refreshReferenceProject(slug).then () -> + expect(ctrl.referenceProject).to.be.equal(project) + expect(ctrl.members).to.be.equal(project.get('members')) + expect(ctrl.invitedMembers.toJS()).to.be.eql([1, 2, 3]) + + it 'check users limits', () -> + mocks.currentUserService.canAddMembersPrivateProject.withArgs(4).returns(1) + mocks.currentUserService.canAddMembersPublicProject.withArgs(4).returns(2) + + members = Immutable.fromJS([ + {id: 1}, + {id: 2}, + {id: 3} + ]) + size = members.size #3 + + ctrl.user = Immutable.fromJS({ + max_memberships_public_projects: 1 + max_memberships_private_projects: 1 + }) + + ctrl.projectForm = {} + ctrl.projectForm.is_private = false + ctrl.invitedMembers = members + + ctrl.checkUsersLimit() + expect(ctrl.limitMembersPrivateProject).to.be.equal(1) + expect(ctrl.limitMembersPublicProject).to.be.equal(2) + + it 'duplicate project', (done) -> + ctrl.referenceProject = Immutable.fromJS({ + id: 1 + }) + ctrl.projectForm = Immutable.fromJS({ + id: 1 + }) + projectId = ctrl.referenceProject.get('id') + data = ctrl.projectForm + + newProject = {} + newProject.data = { + slug: 'slug' + } + + mocks.urlservice.resolve.withArgs("project", {project: newProject.data.slug}).returns("/project/slug/") + + promise = mocks.projectsService.duplicate.withArgs(projectId, data).promise().resolve(newProject) + + ctrl.submit().then () -> + expect(ctrl.formSubmitLoading).to.be.false + expect(mocks.location.path).to.be.calledWith("/project/slug/") + expect(mocks.currentUserService.loadProjects).to.have.been.called + done() + + it 'check if the user can create a private projects', () -> + mocks.currentUserService.canCreatePrivateProjects = sinon.stub().returns({valid: true}) + + ctrl = controller "DuplicateProjectCtrl" + ctrl.limitMembersPrivateProject = {valid: true} + + ctrl.projectForm = { + is_private: true + } + + expect(ctrl.canCreateProject()).to.be.true + + mocks.currentUserService.canCreatePrivateProjects = sinon.stub().returns({valid: false}) + + ctrl = controller "DuplicateProjectCtrl" + + ctrl.projectForm = { + is_private: true + } + + expect(ctrl.canCreateProject()).to.be.false + + it 'check if the user can create a public projects', () -> + mocks.currentUserService.canCreatePublicProjects = sinon.stub().returns({valid: true}) + + ctrl = controller "DuplicateProjectCtrl" + ctrl.limitMembersPublicProject = {valid: true} + + ctrl.projectForm = { + is_private: false + } + + expect(ctrl.canCreateProject()).to.be.true + + mocks.currentUserService.canCreatePublicProjects = sinon.stub().returns({valid: false}) + + ctrl = controller "DuplicateProjectCtrl" + + ctrl.projectForm = { + is_private: false + } + + expect(ctrl.canCreateProject()).to.be.false diff --git a/app/modules/projects/create/duplicate/duplicate-project.directive.coffee b/app/modules/projects/create/duplicate/duplicate-project.directive.coffee new file mode 100644 index 00000000..c19d2f59 --- /dev/null +++ b/app/modules/projects/create/duplicate/duplicate-project.directive.coffee @@ -0,0 +1,35 @@ +### +# Copyright (C) 2014-2016 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: duplicate-project.directive.coffee +### + +DuplicateProjectDirective = () -> + + link = (scope, el, attr, ctrl) -> + + return { + link: link, + templateUrl:"projects/create/duplicate/duplicate-project.html", + controller: "DuplicateProjectCtrl", + controllerAs: "vm", + bindToController: true, + scope: {} + } + +DuplicateProjectDirective.$inject = [] + +angular.module("taigaProjects").directive("tgDuplicateProject", DuplicateProjectDirective) diff --git a/app/modules/projects/create/duplicate/duplicate-project.jade b/app/modules/projects/create/duplicate/duplicate-project.jade new file mode 100644 index 00000000..d90643fb --- /dev/null +++ b/app/modules/projects/create/duplicate/duplicate-project.jade @@ -0,0 +1,57 @@ +.create-project + h1.create-project-title(translate="PROJECT.DUPLICATE.TITLE") + h3.create-project-description(translate="PROJECT.DUPLICATE.DESCRIPTION") + form.duplicate-project.e2e-duplicate-project( + name="projectForm" + ng-submit="vm.submit()" + ) + fieldset.duplicate-project-reference.e2e-duplicate-project-reference + select( + ng-model="vm.projectForm.project" + ng-change="vm.refreshReferenceProject(vm.projectForm.project)" + data-required="true" + ng-options="p.slug as p.name for p in vm.projects | toMutable| filter:{blocked_code: '!'}" + id="project-selector-dropdown" + autofocus + ) + option( + value="" + disabled + selected + translate="PROJECT.DUPLICATE.SELECT_PLACEHOLDER" + ) + + div(ng-include="'projects/create/import-project-form-common/name.html'") + div(ng-include="'projects/create/import-project-form-common/description.html'") + + div(ng-include="'projects/create/import-project-form-common/project-privacy.html'") + tg-create-project-restrictions( + is-private="vm.projectForm.is_private" + can-create-public-projects="vm.canCreatePublicProjects" + can-create-private-projects="vm.canCreatePrivateProjects" + ) + + + label(ng-if="vm.invitedMembers") + span(translate="PROJECT.CREATE.INVITE") + span.mumble( + ng-if="vm.displayUserWarning" + translate="PROJECT.CREATE.SOLO_PROJECT" + ) + span.mumble(translate="PROJECT.CREATE.INVITE_LATER") + + tg-invite-members( + ng-if="vm.members.size" + members="vm.members" + invited-members="vm.invitedMembers" + on-toggle-invited-member="vm.toggleInvitedMember(member)" + ) + + tg-create-project-members-restrictions( + ng-if="vm.referenceProject" + is-private="vm.projectForm.is_private" + limit-members-private-project="vm.limitMembersPrivateProject" + limit-members-public-project="vm.limitMembersPublicProject" + ) + + div(ng-include="'projects/create/import-project-form-common/actions.html'") diff --git a/app/modules/projects/create/duplicate/duplicate-project.scss b/app/modules/projects/create/duplicate/duplicate-project.scss new file mode 100644 index 00000000..63384b32 --- /dev/null +++ b/app/modules/projects/create/duplicate/duplicate-project.scss @@ -0,0 +1,5 @@ +.duplicate-project { + &-reference { + margin-bottom: 2rem; + } +} diff --git a/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee new file mode 100644 index 00000000..30256e31 --- /dev/null +++ b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee @@ -0,0 +1,56 @@ +### +# Copyright (C) 2014-2016 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: github-import-project-form.controller.coffee +### + +class GithubImportProjectFormController + @.$inject = [ + "tgCurrentUserService" + ] + + constructor: (@currentUserService) -> + @.canCreatePublicProjects = @currentUserService.canCreatePublicProjects() + @.canCreatePrivateProjects = @currentUserService.canCreatePrivateProjects() + + @.projectForm = @.project.toJS() + + @.platformName = "Github" + @.projectForm.is_private = false + @.projectForm.keepExternalReference = false + @.projectForm.project_type = "kanban" + + if !@.canCreatePublicProjects.valid && @.canCreatePrivateProjects.valid + @.projectForm.is_private = true + + checkUsersLimit: () -> + @.limitMembersPrivateProject = @currentUserService.canAddMembersPrivateProject(@.members.size) + @.limitMembersPublicProject = @currentUserService.canAddMembersPublicProject(@.members.size) + + saveForm: () -> + @.onSaveProjectDetails({project: Immutable.fromJS(@.projectForm)}) + + canCreateProject: () -> + if @.projectForm.is_private + return @.canCreatePrivateProjects.valid + else + return @.canCreatePublicProjects.valid + + isDisabled: () -> + return !@.canCreateProject() + + +angular.module('taigaProjects').controller('GithubImportProjectFormCtrl', GithubImportProjectFormController) diff --git a/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee new file mode 100644 index 00000000..2761e649 --- /dev/null +++ b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee @@ -0,0 +1,40 @@ +### +# Copyright (C) 2014-2016 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: github-import-project-form.directive.coffee +### + +GithubImportProjectFormDirective = () -> + return { + link: (scope, elm, attr, ctrl) -> + scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl)) + + templateUrl:"projects/create/github-import/github-import-project-form/github-import-project-form.html", + controller: "GithubImportProjectFormCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + members: '<', + project: '<', + onSaveProjectDetails: '&', + onCancelForm: '&', + fetchingUsers: '<' + } + } + +GithubImportProjectFormDirective.$inject = [] + +angular.module("taigaProjects").directive("tgGithubImportProjectForm", GithubImportProjectFormDirective) diff --git a/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.jade b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.jade new file mode 100644 index 00000000..936cb685 --- /dev/null +++ b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.jade @@ -0,0 +1,71 @@ +.import-project-github-form + div(ng-include="'projects/create/import/import-header.html'") + + .spin(tg-loading="vm.fetchingUsers") + + form( + ng-if="!vm.fetchingUsers", + name="projectForm", + ng-submit="vm.saveForm()" + ) + div(ng-include="'projects/create/import-project-form-common/name.html'") + div(ng-include="'projects/create/import-project-form-common/description.html'") + + .create-project-github-import-type(role="group") + p.question(translate="PROJECT.IMPORT.GITHUB.HOW_DO_YOU_WANT_TO_IMPORT") + .create-project-github-import-type-question + fieldset + input( + type="radio" + name="project_type" + id="template-issues" + data-required="true" + aria-hidden="true" + ng-value="'issues'" + ng-model="vm.projectForm.project_type" + required + ) + label(for="template-issues") + span.create-project-github-import-type-name(translate="PROJECT.IMPORT.GITHUB.ISSUES_PROJECT") + p.create-project-github-import-type-description(translate="PROJECT.IMPORT.GITHUB.ISSUES_PROJECT_DESCRIPTION") + fieldset + input( + type="radio" + name="project_type" + id="template-scrum" + data-required="true" + aria-hidden="true" + ng-value="'scrum'" + ng-model="vm.projectForm.project_type" + required + ) + label(for="template-scrum") + span.create-project-github-import-type-name(translate="PROJECT.IMPORT.GITHUB.SCRUM_PROJECT") + p.create-project-github-import-type-description(translate="PROJECT.IMPORT.GITHUB.SCRUM_PROJECT_DESCRIPTION") + fieldset + input( + type="radio" + name="project_type" + id="template-kanban" + data-required="true" + aria-hidden="true" + ng-value="'kanban'" + ng-model="vm.projectForm.project_type" + required + ) + label(for="template-kanban") + span.create-project-github-import-type-name(translate="PROJECT.IMPORT.GITHUB.KANBAN_PROJECT") + p.create-project-github-import-type-description(translate="PROJECT.IMPORT.GITHUB.KANBAN_PROJECT_DESCRIPTION") + div(ng-include="'projects/create/import-project-form-common/project-privacy.html'") + tg-create-project-restrictions( + is-private="vm.projectForm.is_private" + can-create-public-projects="vm.canCreatePublicProjects" + can-create-private-projects="vm.canCreatePrivateProjects" + ) + tg-create-project-members-restrictions( + is-private="vm.projectForm.is_private" + limit-members-private-project="vm.limitMembersPrivateProject" + limit-members-public-project="vm.limitMembersPublicProject" + ) + div(ng-include="'projects/create/import-project-form-common/links.html'") + div(ng-include="'projects/create/import-project-form-common/actions.html'") diff --git a/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.scss b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.scss new file mode 100644 index 00000000..fe6578ec --- /dev/null +++ b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.scss @@ -0,0 +1,61 @@ +.import-project-github-form { + @include create-project; +} + +.create-project-github-import-type { + margin-bottom: 1rem; + text-align: center; + + p { + margin-bottom: .5rem; + } + + &-question { + align-content: stretch; + align-items: stretch; + display: flex; + } + + fieldset { + background: $white; + border-right: 1px solid $whitish; + transition: background .2s linear; + + &:last-child { + border: 0; + } + } + + input { + display: none; + + &:checked { + +label { + background: rgba($primary, .1); + } + } + } + + label { + background: $white; + height: 100%; + padding: 1rem; + transition: background .2s ease-in; + + &:hover { + background: rgba($primary, .1); + cursor: pointer; + } + } + + &-name { + @include font-type(normal); + display: inline-block; + margin-bottom: .5rem; + } + + &-description { + @include font-type(light); + @include font-size(small); + } +} diff --git a/app/modules/projects/create/github-import/github-import.controller.coffee b/app/modules/projects/create/github-import/github-import.controller.coffee new file mode 100644 index 00000000..d4053093 --- /dev/null +++ b/app/modules/projects/create/github-import/github-import.controller.coffee @@ -0,0 +1,74 @@ +### +# Copyright (C) 2014-2016 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: github-import.controller.coffee +### + +class GithubImportController + @.$inject = [ + 'tgGithubImportService', + '$tgConfirm', + '$translate', + 'tgImportProjectService', + ] + + constructor: (@githubImportService, @confirm, @translate, @importProjectService) -> + @.step = 'autorization-github' + @.project = null + + taiga.defineImmutableProperty @, 'projects', () => return @githubImportService.projects + taiga.defineImmutableProperty @, 'members', () => return @githubImportService.projectUsers + + startProjectSelector: () -> + @.step = 'project-select-github' + @githubImportService.fetchProjects() + + onSelectProject: (project) -> + @.step = 'project-form-github' + @.project = project + @.fetchingUsers = true + + @githubImportService.fetchUsers(@.project.get('id')).then () => @.fetchingUsers = false + + onSaveProjectDetails: (project) -> + @.project = project + @.step = 'project-members-github' + + onCancelMemberSelection: () -> + @.step = 'project-form-github' + + startImport: (users) -> + loader = @confirm.loader(@translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), @translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true) + + loader.start() + + promise = @githubImportService.importProject( + @.project.get('name'), + @.project.get('description'), + @.project.get('id'), + users, + @.project.get('keepExternalReference'), + @.project.get('is_private') + @.project.get('project_type') + ) + + @importProjectService.importPromise(promise).then () => loader.stop() + + submitUserSelection: (users) -> + @.startImport(users) + return null + +angular.module('taigaProjects').controller('GithubImportCtrl', GithubImportController) diff --git a/app/modules/projects/create/github-import/github-import.controller.spec.coffee b/app/modules/projects/create/github-import/github-import.controller.spec.coffee new file mode 100644 index 00000000..5a975f7f --- /dev/null +++ b/app/modules/projects/create/github-import/github-import.controller.spec.coffee @@ -0,0 +1,172 @@ +### +# Copyright (C) 2014-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: github-import.controller.spec.coffee +### + +describe "GithubImportCtrl", -> + $provide = null + $controller = null + mocks = {} + + _mockCurrentUserService = -> + mocks.currentUserService = { + canAddMembersPrivateProject: sinon.stub() + canAddMembersPublicProject: sinon.stub() + } + + $provide.value("tgCurrentUserService", mocks.currentUserService) + + _mockImportProjectService = -> + mocks.importProjectService = { + importPromise: sinon.stub() + } + + $provide.value("tgImportProjectService", mocks.importProjectService) + + _mockGithubImportService = -> + mocks.githubService = { + fetchProjects: sinon.stub(), + fetchUsers: sinon.stub(), + importProject: sinon.stub() + } + + $provide.value("tgGithubImportService", mocks.githubService) + + _mockConfirm = -> + mocks.confirm = { + loader: sinon.stub() + } + + $provide.value("$tgConfirm", mocks.confirm) + + _mockTranslate = -> + mocks.translate = { + instant: sinon.stub() + } + + $provide.value("$translate", mocks.translate) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockGithubImportService() + _mockConfirm() + _mockTranslate() + _mockImportProjectService() + _mockCurrentUserService() + + return null + + _inject = -> + inject (_$controller_) -> + $controller = _$controller_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "start project selector", () -> + ctrl = $controller("GithubImportCtrl") + ctrl.startProjectSelector() + + expect(ctrl.step).to.be.equal('project-select-github') + expect(mocks.githubService.fetchProjects).have.been.called + + it "on select project reload projects", (done) -> + project = Immutable.fromJS({ + id: 1, + name: "project-name" + }) + + mocks.githubService.fetchUsers.promise().resolve() + + ctrl = $controller("GithubImportCtrl") + + promise = ctrl.onSelectProject(project) + + expect(ctrl.fetchingUsers).to.be.true + + promise.then () -> + expect(ctrl.fetchingUsers).to.be.false + expect(ctrl.step).to.be.equal('project-form-github') + expect(ctrl.project).to.be.equal(project) + done() + + it "on save project details reload users", () -> + project = Immutable.fromJS({ + id: 1, + name: "project-name" + }) + + ctrl = $controller("GithubImportCtrl") + ctrl.onSaveProjectDetails(project) + + expect(ctrl.step).to.be.equal('project-members-github') + expect(ctrl.project).to.be.equal(project) + + it "on select user init import", (done) -> + users = Immutable.fromJS([ + { + id: 0 + }, + { + id: 1 + }, + { + id: 2 + } + ]) + + loaderObj = { + start: sinon.spy(), + update: sinon.stub(), + stop: sinon.spy() + } + + projectResult = { + id: 3, + name: "name" + } + + mocks.confirm.loader.returns(loaderObj) + + mocks.importProjectService.importPromise.promise().resolve() + + ctrl = $controller("GithubImportCtrl") + ctrl.project = Immutable.fromJS({ + id: 1, + name: 'project-name', + description: 'project-description', + keepExternalReference: false, + is_private: true + }) + + + mocks.githubService.importProject.promise().resolve(projectResult) + + ctrl.startImport(users).then () -> + expect(loaderObj.start).have.been.called + expect(loaderObj.stop).have.been.called + expect(mocks.githubService.importProject).have.been.calledWith('project-name', 'project-description', 1, users, false, true) + + done() diff --git a/app/modules/projects/create/github-import/github-import.directive.coffee b/app/modules/projects/create/github-import/github-import.directive.coffee new file mode 100644 index 00000000..bb02064f --- /dev/null +++ b/app/modules/projects/create/github-import/github-import.directive.coffee @@ -0,0 +1,35 @@ +### +# Copyright (C) 2014-2016 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: github-import.directive.coffee +### + +GithubImportDirective = () -> + return { + link: (scope, elm, attrs, ctrl) -> + ctrl.startProjectSelector() + templateUrl:"projects/create/github-import/github-import.html", + controller: "GithubImportCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + onCancel: '&' + } + } + +GithubImportDirective.$inject = [] + +angular.module("taigaProjects").directive("tgGithubImport", GithubImportDirective) diff --git a/app/modules/projects/create/github-import/github-import.jade b/app/modules/projects/create/github-import/github-import.jade new file mode 100644 index 00000000..21bfee8b --- /dev/null +++ b/app/modules/projects/create/github-import/github-import.jade @@ -0,0 +1,31 @@ +.create-project.import-project(ng-if="vm.step == 'autorization-github'") + p autorization... + + +tg-import-project-selector( + logo="/#{v}/images/import-logos/github.png" + search="{{ 'PROJECT.IMPORT.GITHUB.CHOOSE_BOARD' | translate }}" + projects="vm.projects" + on-cancel="vm.onCancel()" + on-select-project="vm.onSelectProject(project)" + ng-if="vm.step == 'project-select-github'" +) + +tg-github-import-project-form( + ng-if="vm.step == 'project-form-github'" + project="vm.project" + members="vm.members" + fetching-users="vm.fetchingUsers" + on-save-project-details="vm.onSaveProjectDetails(project)" + on-cancel-form="vm.step = 'project-select-github'" +) + +tg-import-project-members( + ng-if="vm.step == 'project-members-github'" + platform="Github" + logo="/#{v}/images/import-logos/github.png" + project="vm.project" + members="vm.members" + on-submit="vm.submitUserSelection(users)" + on-cancel="vm.onCancelMemberSelection()" +) diff --git a/app/modules/projects/create/github-import/github-import.service.coffee b/app/modules/projects/create/github-import/github-import.service.coffee new file mode 100644 index 00000000..992c3a62 --- /dev/null +++ b/app/modules/projects/create/github-import/github-import.service.coffee @@ -0,0 +1,55 @@ +### +# Copyright (C) 2014-2016 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: github-import.service.coffee +### + +class GithubImportService extends taiga.Service + @.$inject = [ + 'tgResources' + ] + + constructor: (@resources, @location) -> + @.projects = Immutable.List() + @.projectUsers = Immutable.List() + + setToken: (token) -> + @.token = token + + fetchProjects: () -> + @resources.githubImporter.listProjects(@.token).then (projects) => @.projects = projects + + fetchUsers: (projectId) -> + @resources.githubImporter.listUsers(@.token, projectId).then (users) => @.projectUsers = users + + importProject: (name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) -> + return @resources.githubImporter.importProject(@.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) + + getAuthUrl: (callbackUri) -> + return new Promise (resolve) => + @resources.githubImporter.getAuthUrl(callbackUri).then (response) => + @.authUrl = response.data.url + resolve(@.authUrl) + + authorize: (code) -> + return new Promise (resolve, reject) => + @resources.githubImporter.authorize(code).then ((response) => + @.token = response.data.token + resolve(@.token) + ), (error) -> + reject(new Error(error.status)) + +angular.module("taigaProjects").service("tgGithubImportService", GithubImportService) diff --git a/app/modules/projects/create/github-import/github-import.service.spec.coffee b/app/modules/projects/create/github-import/github-import.service.spec.coffee new file mode 100644 index 00000000..be9732f5 --- /dev/null +++ b/app/modules/projects/create/github-import/github-import.service.spec.coffee @@ -0,0 +1,129 @@ +### +# Copyright (C) 2014-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: github-import.controller.spec.coffee +### + +describe "tgGithubImportService", -> + $provide = null + service = null + mocks = {} + + _mockResources = -> + mocks.resources = { + githubImporter: { + listProjects: sinon.stub(), + listUsers: sinon.stub(), + importProject: sinon.stub(), + getAuthUrl: sinon.stub(), + authorize: sinon.stub() + } + } + + $provide.value("tgResources", mocks.resources) + + _mockLocation = -> + mocks.location = { + search: sinon.stub() + } + + mocks.location.search.returns({ + token: 123 + }) + + $provide.value("$location", mocks.location) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockResources() + _mockLocation() + + return null + + _inject = -> + inject (_tgGithubImportService_) -> + service = _tgGithubImportService_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "fetch projects", (done) -> + service.setToken(123) + + mocks.resources.githubImporter.listProjects.withArgs(123).promise().resolve('projects') + + service.fetchProjects().then () -> + service.projects = "projects" + done() + + it "fetch user", (done) -> + service.setToken(123) + + projectId = 3 + mocks.resources.githubImporter.listUsers.withArgs(123, projectId).promise().resolve('users') + + service.fetchUsers(projectId).then () -> + service.projectUsers = 'users' + done() + + it "import project", () -> + service.setToken(123) + projectId = 2 + + service.importProject(projectId, true, true ,true) + + expect(mocks.resources.githubImporter.importProject).to.have.been.calledWith(123, projectId, true, true, true) + + it "get auth url", (done) -> + service.setToken(123) + projectId = 3 + + response = { + data: { + url: "url123" + } + } + + mocks.resources.githubImporter.getAuthUrl.promise().resolve(response) + + service.getAuthUrl().then (url) -> + expect(url).to.be.equal("url123") + done() + + it "authorize", (done) -> + service.setToken(123) + projectId = 3 + verifyCode = 12345 + + response = { + data: { + token: "token123" + } + } + + mocks.resources.githubImporter.authorize.withArgs(verifyCode).promise().resolve(response) + + service.authorize(verifyCode).then (token) -> + expect(token).to.be.equal("token123") + done() diff --git a/app/modules/projects/create/import-project-form-common/actions.jade b/app/modules/projects/create/import-project-form-common/actions.jade new file mode 100644 index 00000000..0ad2f57a --- /dev/null +++ b/app/modules/projects/create/import-project-form-common/actions.jade @@ -0,0 +1,13 @@ +.create-project-action + button.trans-button.create-project-action-cancel( + type="button" + ng-click="vm.onCancelForm()" + title="{{'PROJECT.CREATE.BACK' | translate}}" + translate="PROJECT.CREATE.BACK" + ) + button.button-green.create-project-action-submit.e2e-create-project-action-submit( + type="submit" + ng-disabled="projectForm.$invalid || vm.isDisabled()" + tg-loading="vm.formSubmitLoading" + translate="PROJECT.CREATE.TITLE" + ) diff --git a/app/modules/projects/create/import-project-form-common/description.jade b/app/modules/projects/create/import-project-form-common/description.jade new file mode 100644 index 00000000..72105418 --- /dev/null +++ b/app/modules/projects/create/import-project-form-common/description.jade @@ -0,0 +1,7 @@ +fieldset + textarea.e2e-create-project-description( + ng-model="vm.projectForm.description" + placeholder="{{'PROJECT.COMMON.PROJECT_DESCRIPTION' | translate}}" + data-required="true" + required + ) diff --git a/app/modules/projects/create/import-project-form-common/links.jade b/app/modules/projects/create/import-project-form-common/links.jade new file mode 100644 index 00000000..05e3f94c --- /dev/null +++ b/app/modules/projects/create/import-project-form-common/links.jade @@ -0,0 +1,20 @@ +fieldset.create-project-check + label(for="links") + span.title( + translate="PROJECT.IMPORT.LINKS" + translate-values="{platform: vm.platformName}" + ) + span.description( + translate="PROJECT.IMPORT.LINKS_DESCRIPTION" + translate-values="{platform: vm.platformName}" + ) + + .check + input.activate-input( + ng-model="vm.projectForm.keepExternalReference" + name="links" + type="checkbox" + ) + div + span.check-text.check-yes(translate="COMMON.YES") + span.check-text.check-no(translate="COMMON.NO") \ No newline at end of file diff --git a/app/modules/projects/create/import-project-form-common/name.jade b/app/modules/projects/create/import-project-form-common/name.jade new file mode 100644 index 00000000..8d329172 --- /dev/null +++ b/app/modules/projects/create/import-project-form-common/name.jade @@ -0,0 +1,13 @@ +fieldset + label( + translate="PROJECT.COMMON.DETAILS" + for="project-name" + ) + input.e2e-create-project-title( + type="text" + ng-model="vm.projectForm.name" + placeholder="{{'PROJECT.COMMON.PROJECT_TITLE' | translate}}" + name="project-name" + data-required="true" + required + ) \ No newline at end of file diff --git a/app/modules/projects/create/import-project-form-common/project-privacy.jade b/app/modules/projects/create/import-project-form-common/project-privacy.jade new file mode 100644 index 00000000..aebbd5f4 --- /dev/null +++ b/app/modules/projects/create/import-project-form-common/project-privacy.jade @@ -0,0 +1,30 @@ +.create-project-privacity(role="group") + fieldset + input( + type="radio" + name="is_private" + id="template-public" + data-required="true" + aria-hidden="true" + ng-value="false" + ng-model="vm.projectForm.is_private" + required + ng-checked="vm.canCreatePublicProjects" + ) + label(for="template-public") + tg-svg(svg-icon="icon-discover") + span(translate="PROJECT.CREATE.PUBLIC_PROJECT") + fieldset + input( + type="radio" + name="is_private" + id="template-private" + data-required="true" + ng-value="true" + ng-model="vm.projectForm.is_private" + aria-hidden="true" + required + ) + label(for="template-private") + tg-svg(svg-icon="icon-lock") + span(translate="PROJECT.CREATE.PRIVATE_PROJECT") diff --git a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee new file mode 100644 index 00000000..77922f41 --- /dev/null +++ b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee @@ -0,0 +1,150 @@ +### +# Copyright (C) 2014-2016 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: import-project-members.controller.coffee +### + +class ImportProjectMembersController + @.$inject = [ + 'tgCurrentUserService', + 'tgUserService' + ] + + constructor: (@currentUserService, @userService) -> + @.selectImportUserLightbox = false + @.warningImportUsers = false + @.cancelledUsers = Immutable.List() + @.selectedUsers = Immutable.List() + @.selectableUsers = Immutable.List() + @.userContacts = Immutable.List() + + fetchUser: () -> + @.currentUser = @currentUserService.getUser() + + @userService.getContacts(@.currentUser.get('id')).then (userContacts) => + @.userContacts = userContacts + @.refreshSelectableUsers() + + searchUser: (user) -> + @.selectImportUserLightbox = true + @.searchingUser = user + + beforeSubmitUsers: () -> + if @.selectedUsers.size != @.members.size + @.warningImportUsers = true + else + @.submit() + + confirmUser: (externalUser, taigaUser) -> + @.selectImportUserLightbox = false + + user = Immutable.Map() + user = user.set('user', externalUser) + user = user.set('taigaUser', taigaUser) + + @.selectedUsers = @.selectedUsers.push(user) + @.discardSuggestedUser(externalUser) + + @.refreshSelectableUsers() + + unselectUser: (user) -> + index = @.selectedUsers.findIndex (it) -> it.getIn(['user', 'id']) == user.get('id') + + @.selectedUsers = @.selectedUsers.delete(index) + @.refreshSelectableUsers() + + discardSuggestedUser: (member) -> + @.cancelledUsers = @.cancelledUsers.push(member.get('id')) + + getSelectedMember: (member) -> + return @.selectedUsers.find (it) -> + return it.getIn(['user', 'id']) == member.get('id') + + isMemberSelected: (member) -> + return !!@.getSelectedMember(member) + + getUser: (user) -> + userSelected = @.getSelectedMember(user) + + if userSelected + return userSelected.get('taigaUser') + else + return null + + submit: () -> + @.warningImportUsers = false + + users = Immutable.Map() + + @.selectedUsers.map (it) -> + id = '' + + if _.isString(it.get('taigaUser')) + id = it.get('taigaUser') + else + id = it.getIn(['taigaUser', 'id']) + + users = users.set(it.getIn(['user', 'id']), id) + + @.onSubmit({users: users}) + + checkUsersLimit: () -> + @.limitMembersPrivateProject = @currentUserService.canAddMembersPrivateProject(@.members.size + 1) + @.limitMembersPublicProject = @currentUserService.canAddMembersPublicProject(@.members.size + 1) + + showSuggestedMatch: (member) -> + return member.get('user') && @.cancelledUsers.indexOf(member.get('id')) == -1 && !@.isMemberSelected(member) + + getDistinctSelectedTaigaUsers: () -> + ids = [] + + users = @.selectedUsers.filter (it) -> + id = it.getIn(['taigaUser', 'id']) + + if ids.indexOf(id) == -1 + ids.push(id) + return true + + return false + + return users.filter (it) => + return it.getIn(['taigaUser', 'id']) != @.currentUser.get('id') + + refreshSelectableUsers: () -> + @.importMoreUsersDisabled = @.isImportMoreUsersDisabled() + + if @.importMoreUsersDisabled + users = @.getDistinctSelectedTaigaUsers() + + @.selectableUsers = users.map (it) -> return it.get('taigaUser') + else + @.selectableUsers = @.userContacts + + @.selectableUsers = @.selectableUsers.push(@.currentUser) + + isImportMoreUsersDisabled: () -> + users = @.getDistinctSelectedTaigaUsers() + + # currentUser + newUser = +2 + total = users.size + 2 + + + if @.project.get('is_private') + return !@currentUserService.canAddMembersPrivateProject(total).valid + else + return !@currentUserService.canAddMembersPublicProject(total).valid + +angular.module('taigaProjects').controller('ImportProjectMembersCtrl', ImportProjectMembersController) diff --git a/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee b/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee new file mode 100644 index 00000000..88fe51b3 --- /dev/null +++ b/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee @@ -0,0 +1,367 @@ +### +# Copyright (C) 2014-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: import.controller.spec.coffee +### + +describe "ImportProjectMembersCtrl", -> + $provide = null + $controller = null + mocks = {} + + _mockCurrentUserService = -> + mocks.currentUserService = { + getUser: sinon.stub().returns(Immutable.fromJS({ + id: 1 + })), + canAddMembersPrivateProject: sinon.stub(), + canAddMembersPublicProject: sinon.stub() + } + + $provide.value("tgCurrentUserService", mocks.currentUserService) + + _mockUserService = -> + mocks.userService = { + getContacts: sinon.stub() + } + + $provide.value("tgUserService", mocks.userService) + + _inject = -> + inject (_$controller_) -> + $controller = _$controller_ + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockCurrentUserService() + _mockUserService() + + return null + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "fetch user info", (done) -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.refreshSelectableUsers = sinon.spy() + + mocks.userService.getContacts.withArgs(1).promise().resolve('contacts') + + ctrl.fetchUser().then () -> + expect(ctrl.userContacts).to.be.equal('contacts') + expect(ctrl.refreshSelectableUsers).have.been.called + done() + + it "search user", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + user = { + id: 1, + name: "username" + } + + ctrl.searchUser(user) + + expect(ctrl.selectImportUserLightbox).to.be.true + expect(ctrl.searchingUser).to.be.equal(user) + + it "prepare submit users, warning if needed", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + user = { + id: 1, + name: "username" + } + + ctrl.selectedUsers = Immutable.fromJS([ + {id: 1}, + {id: 2} + ]) + + ctrl.members = Immutable.fromJS([ + {id: 1} + ]) + + ctrl.beforeSubmitUsers() + + expect(ctrl.warningImportUsers).to.be.true + + it "prepare submit users, submit", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + user = { + id: 1, + name: "username" + } + + ctrl.selectedUsers = Immutable.fromJS([ + {id: 1} + ]) + + ctrl.members = Immutable.fromJS([ + {id: 1} + ]) + + + ctrl.submit = sinon.spy() + ctrl.beforeSubmitUsers() + + expect(ctrl.warningImportUsers).to.be.false + expect(ctrl.submit).have.been.called + + it "confirm user", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.discardSuggestedUser = sinon.spy() + ctrl.refreshSelectableUsers = sinon.spy() + + ctrl.confirmUser('user', 'taiga-user') + + expect(ctrl.selectedUsers.size).to.be.equal(1) + + expect(ctrl.selectedUsers.get(0).get('user')).to.be.equal('user') + expect(ctrl.selectedUsers.get(0).get('taigaUser')).to.be.equal('taiga-user') + expect(ctrl.discardSuggestedUser).have.been.called + expect(ctrl.refreshSelectableUsers).have.been.called + + it "discard suggested user", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.discardSuggestedUser(Immutable.fromJS({ + id: 3 + })) + + expect(ctrl.cancelledUsers.get(0)).to.be.equal(3) + + it "clean member selection", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.refreshSelectableUsers = sinon.spy() + + ctrl.selectedUsers = Immutable.fromJS([ + { + user: { + id: 1 + } + }, + { + user: { + id: 2 + } + } + ]) + + ctrl.unselectUser(Immutable.fromJS({ + id: 2 + })) + + expect(ctrl.selectedUsers.size).to.be.equal(1) + expect(ctrl.refreshSelectableUsers).have.been.called + + + it "get a selected member", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + member = Immutable.fromJS({ + id: 3 + }) + + ctrl.selectedUsers = ctrl.selectedUsers.push(Immutable.fromJS({ + user: { + id: 3 + } + })) + + user = ctrl.getSelectedMember(member) + + expect(user.getIn(['user', 'id'])).to.be.equal(3) + + it "submit", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.selectedUsers = ctrl.selectedUsers.push(Immutable.fromJS({ + user: { + id: 3 + }, + taigaUser: { + id: 2 + } + })) + + ctrl.selectedUsers = ctrl.selectedUsers.push(Immutable.fromJS({ + user: { + id: 3 + }, + taigaUser: "xx@yy.com" + })) + + + ctrl.onSubmit = sinon.stub() + + ctrl.submit() + + user = Immutable.Map() + user = user.set(3, 2) + + expect(ctrl.onSubmit).have.been.called + expect(ctrl.warningImportUsers).to.be.false + + it "show suggested match", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.isMemberSelected = sinon.stub().returns(false) + ctrl.cancelledUsers = [ + 3 + ] + + member = Immutable.fromJS({ + id: 1, + user: { + id: 10 + } + }) + + expect(ctrl.showSuggestedMatch(member)).to.be.true + + it "doesn't show suggested match", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.isMemberSelected = sinon.stub().returns(false) + ctrl.cancelledUsers = [ + 3 + ] + + member = Immutable.fromJS({ + id: 3, + user: { + id: 10 + } + }) + + expect(ctrl.showSuggestedMatch(member)).to.be.false + + it "check users limit", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.members = Immutable.fromJS([ + 1, 2, 3 + ]) + + mocks.currentUserService.canAddMembersPrivateProject.withArgs(4).returns('xx') + mocks.currentUserService.canAddMembersPublicProject.withArgs(4).returns('yy') + + ctrl.checkUsersLimit() + + expect(ctrl.limitMembersPrivateProject).to.be.equal('xx') + expect(ctrl.limitMembersPublicProject).to.be.equal('yy') + + + it "get distict select taiga users excluding the current user", () -> + ctrl = $controller("ImportProjectMembersCtrl") + ctrl.selectedUsers = Immutable.fromJS([ + { + taigaUser: { + id: 1 + } + }, + { + taigaUser: { + id: 1 + } + }, + { + taigaUser: { + id: 3 + } + }, + { + taigaUser: { + id: 5 + } + } + ]) + + ctrl.currentUser = Immutable.fromJS({ + id: 5 + }) + + users = ctrl.getDistinctSelectedTaigaUsers() + + expect(users.size).to.be.equal(2) + + it "refresh selectable users array with all users available", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.isImportMoreUsersDisabled = sinon.stub().returns(false) + + ctrl.userContacts = Immutable.fromJS([1]) + ctrl.currentUser = 2 + + ctrl.refreshSelectableUsers() + + expect(ctrl.selectableUsers.toJS()).to.be.eql([1, 2]) + + + it "refresh selectable users array with the selected ones", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.getDistinctSelectedTaigaUsers = sinon.stub().returns(Immutable.fromJS([ + {taigaUser: 1} + ])) + + ctrl.isImportMoreUsersDisabled = sinon.stub().returns(true) + + ctrl.userContacts = Immutable.fromJS([1]) + ctrl.currentUser = 2 + + ctrl.refreshSelectableUsers() + + expect(ctrl.selectableUsers.toJS()).to.be.eql([1, 2]) + + it "import more user disable in private project", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.project = Immutable.fromJS({ + is_private: true + }) + + ctrl.getDistinctSelectedTaigaUsers = sinon.stub().returns(Immutable.fromJS([1,2,3])) + + mocks.currentUserService.canAddMembersPrivateProject.withArgs(5).returns({valid: true}) + + expect(ctrl.isImportMoreUsersDisabled()).to.be.false + + it "import more user disable in public project", () -> + ctrl = $controller("ImportProjectMembersCtrl") + + ctrl.project = Immutable.fromJS({ + is_private: false + }) + + ctrl.getDistinctSelectedTaigaUsers = sinon.stub().returns(Immutable.fromJS([1,2,3])) + + mocks.currentUserService.canAddMembersPublicProject.withArgs(5).returns({valid: true}) + + expect(ctrl.isImportMoreUsersDisabled()).to.be.false diff --git a/app/modules/projects/create/import-project-members/import-project-members.directive.coffee b/app/modules/projects/create/import-project-members/import-project-members.directive.coffee new file mode 100644 index 00000000..122b4fb6 --- /dev/null +++ b/app/modules/projects/create/import-project-members/import-project-members.directive.coffee @@ -0,0 +1,43 @@ +### +# Copyright (C) 2014-2016 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: import-project-form.directive.coffee +### + +ImportProjectMembersDirective = () -> + return { + link: (scope, elm, attr, ctrl) -> + ctrl.fetchUser() + + scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl)) + + templateUrl:"projects/create/import-project-members/import-project-members.html", + controller: "ImportProjectMembersCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + members: '<', + project: '<', + onSubmit: '&', + platform: '@', + logo: '@', + onCancel: '&' + } + } + +ImportProjectMembersDirective.$inject = [] + +angular.module("taigaProjects").directive("tgImportProjectMembers", ImportProjectMembersDirective) diff --git a/app/modules/projects/create/import-project-members/import-project-members.jade b/app/modules/projects/create/import-project-members/import-project-members.jade new file mode 100644 index 00000000..ccde76ac --- /dev/null +++ b/app/modules/projects/create/import-project-members/import-project-members.jade @@ -0,0 +1,85 @@ +.import-project-members + div(ng-include="'projects/create/import/import-header.html'") + + h2.import-project-members-title(translate="PROJECT.IMPORT.PROJECT_MEMBERS") + p( + translate="PROJECT.IMPORT.PROCESS_DESCRIPTION", + translate-values="{'platform': vm.platform}" + ) + + tg-create-project-members-restrictions( + is-private="vm.project.get('is_private')" + limit-members-private-project="vm.limitMembersPrivateProject" + limit-members-public-project="vm.limitMembersPublicProject" + ) + + .import-project-members-system(ng-if="vm.members.size") + .import-project-members-logo + img(ng-src="{{vm.logo}}") + .import-project-members-logo + img( + src="/#{v}/images/logo-color.png" + alt="Taiga Logo" + ) + + ul(ng-if="vm.members.size") + li.import-project-members-row(tg-repeat="member in vm.members track by member.get('id')") + .import-project-members-single + .avatar.empty(ng-if="!member.get('avatar')") {{member.get('full_name')[0].toUpperCase()}} + .avatar(ng-if="member.get('avatar')") + img(ng-src="{{member.get('avatar')}}") + span.import-project-members-username {{member.get('full_name') || member.get('username') }} + + .import-project-members-actions + .import-project-members-match(ng-if="vm.showSuggestedMatch(member)") + span( + translate="PROJECT.IMPORT.MATCH" + translate-values="{user_external:member.get('full_name'), user_internal: member.getIn(['user', 'full_name'])}" + ) + button.import-project-members-match-true(ng-click="vm.confirmUser(member, member.get('user'))") + tg-svg(svg-icon="icon-check-empty") + button.import-project-members-match-false(ng-click="vm.discardSuggestedUser(member)") + tg-svg(svg-icon="icon-close") + + .import-project-members-selected(ng-if="vm.getUser(member) && !vm.showSuggestedMatch(member)") + button.import-project-members-delete(ng-click="vm.unselectUser(member)") + tg-svg(svg-icon="icon-close") + span {{vm.getUser(member).get('full_name') || vm.getUser(member)}} + span.import-project-members-selected-img + img(tg-avatar="vm.getUser(member)") + + button.button.button-trans.import-project-members-choose.ng-animate-disabled( + ng-if="!vm.getUser(member) && !vm.showSuggestedMatch(member)" + ng-click="vm.searchUser(member)" + translate="PROJECT.IMPORT.CHOOSE" + ) + + .create-project-action + button.trans-button.create-project-action-cancel( + type="button" + ng-click="vm.onCancel()" + title="{{'PROJECT.CREATE.BACK' | translate}}" + translate="PROJECT.CREATE.BACK" + ) + button.button.button-green.create-project-action-submit( + ng-if="vm.members.size > 0" + ng-click="vm.beforeSubmitUsers()" + translate="PROJECT.IMPORT.IMPORT" + ) + + tg-select-import-user-lightbox.lightbox( + is-private="vm.project.get('is_private')" + limit-members-private-project="vm.limitMembersPrivateProject" + limit-members-public-project="vm.limitMembersPublicProject" + visible="vm.selectImportUserLightbox" + user="vm.searchingUser" + selectable-users="vm.selectableUsers" + on-close="vm.selectImportUserLightbox = false" + on-select-user="vm.confirmUser(user, taigaUser)" + ) + + tg-warning-user-import-lightbox.lightbox( + visible="vm.warningImportUsers" + on-confirm="vm.submit()" + on-close="vm.warningImportUsers = false" + ) diff --git a/app/modules/projects/create/import-project-members/import-project-members.scss b/app/modules/projects/create/import-project-members/import-project-members.scss new file mode 100644 index 00000000..a343b3ea --- /dev/null +++ b/app/modules/projects/create/import-project-members/import-project-members.scss @@ -0,0 +1,3 @@ +.import-project-members { + @include import-members; +} diff --git a/app/modules/projects/create/import-project-selector/import-project-selector.controller.coffee b/app/modules/projects/create/import-project-selector/import-project-selector.controller.coffee new file mode 100644 index 00000000..28628852 --- /dev/null +++ b/app/modules/projects/create/import-project-selector/import-project-selector.controller.coffee @@ -0,0 +1,24 @@ +### +# Copyright (C) 2014-2016 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: import-project-selector.controller.coffee +### + +class ImportProjectSelectorController + selectProject: (project) -> + @.onSelectProject({project: Immutable.fromJS(project)}) + +angular.module('taigaProjects').controller('ImportProjectSelectorCtrl', ImportProjectSelectorController) diff --git a/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee b/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee new file mode 100644 index 00000000..c13dadb5 --- /dev/null +++ b/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee @@ -0,0 +1,36 @@ +### +# Copyright (C) 2014-2016 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: import-project-selector.directive.coffee +### + +ImportProjectSelectorDirective = () -> + return { + templateUrl:"projects/create/import-project-selector/import-project-selector.html", + controller: "ImportProjectSelectorCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + projects: '<', + onCancel: '&', + onSelectProject: '&', + platfrom: '@', + logo: '@', + search: '@' + } + } + +angular.module("taigaProjects").directive("tgImportProjectSelector", ImportProjectSelectorDirective) diff --git a/app/modules/projects/create/import-project-selector/import-project-selector.jade b/app/modules/projects/create/import-project-selector/import-project-selector.jade new file mode 100644 index 00000000..5a6d0baf --- /dev/null +++ b/app/modules/projects/create/import-project-selector/import-project-selector.jade @@ -0,0 +1,34 @@ +.import-project-selector + div(ng-include="'projects/create/import/import-header.html'") + + .import-project-selector + + .import-project-selector-service + img( + ng-src="{{vm.logo}}" + ) + + .import-project-selector-boards + form.import-project-selector-filter(ng-if="vm.projects.size > 5") + input( + ng-model="vm.searchText" + placeholder="{{ vm.search }}" + ) + tg-svg( + svg-icon="icon-search" + title="{{'SEARCH.TITLE_ACTION_SEARCH' | translate}}" + ) + + ul.import-project-board-list + li.import-project-selector-title( + ng-repeat="project in vm.projects | toMutable | orderBy:'name' | filter:vm.searchText track by project.id" + ng-click="vm.selectProject(project)" + ) {{project.name}} + + .create-project-action + button.trans-button.create-project-action-cancel( + type="button" + ng-click="vm.onCancel()" + title="{{'COMMON.CANCEL' | translate}}" + translate="COMMON.CANCEL" + ) diff --git a/app/modules/projects/create/import-project-selector/import-project-selector.scss b/app/modules/projects/create/import-project-selector/import-project-selector.scss new file mode 100644 index 00000000..ac0fbf17 --- /dev/null +++ b/app/modules/projects/create/import-project-selector/import-project-selector.scss @@ -0,0 +1,3 @@ +.import-project-selector { + @include import-project-selector; +} diff --git a/app/modules/projects/create/import-taiga/import-taiga.controller.coffee b/app/modules/projects/create/import-taiga/import-taiga.controller.coffee new file mode 100644 index 00000000..47b0a84a --- /dev/null +++ b/app/modules/projects/create/import-taiga/import-taiga.controller.coffee @@ -0,0 +1,43 @@ +### +# Copyright (C) 2014-2016 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: import-project.controller.coffee +### + +class ImportTaigaController + @.$inject = [ + '$tgConfirm', + '$tgResources', + 'tgImportProjectService', + '$translate' + ] + + constructor: (@confirm, @rs, @importProjectService, @translate) -> + + importTaiga: (files) -> + file = files[0] + + loader = @confirm.loader(@translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), @translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true) + + loader.start() + + promise = @rs.projects.import(file, loader.update) + + @importProjectService.importPromise(promise).finally () => loader.stop() + + return + +angular.module("taigaProjects").controller("ImportTaigaCtrl", ImportTaigaController) diff --git a/app/modules/projects/create/import-taiga/import-taiga.directive.coffee b/app/modules/projects/create/import-taiga/import-taiga.directive.coffee new file mode 100644 index 00000000..fb6684d9 --- /dev/null +++ b/app/modules/projects/create/import-taiga/import-taiga.directive.coffee @@ -0,0 +1,29 @@ +### +# Copyright (C) 2014-2016 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: import-taiga.directive.coffee +### + +ImportTaigaDirective = () -> + return { + templateUrl:"projects/create/import-taiga/import-taiga.html", + controller: "ImportTaigaCtrl", + controllerAs: "vm", + bindToController: true, + scope: {} + } + +angular.module("taigaProjects").directive("tgImportTaiga", ImportTaigaDirective) diff --git a/app/modules/projects/create/import-taiga/import-taiga.jade b/app/modules/projects/create/import-taiga/import-taiga.jade new file mode 100644 index 00000000..08c0fd20 --- /dev/null +++ b/app/modules/projects/create/import-taiga/import-taiga.jade @@ -0,0 +1,15 @@ +input.hidden( + tg-file-change="vm.importTaiga(files)" + type="file" +) +.import-project-logo + img( + src="/#{v}/images/logo-color.png" + alt="Taiga Logo" + ) +.import-project-name-wrapper + p.import-project-name( + href="#" + title="Taiga" + ) Taiga + p.import-project-description(translate="PROJECT.IMPORT.TAIGA.SELECTOR") diff --git a/app/modules/projects/create/import/import-header.jade b/app/modules/projects/create/import/import-header.jade new file mode 100644 index 00000000..0daaa50e --- /dev/null +++ b/app/modules/projects/create/import/import-header.jade @@ -0,0 +1,2 @@ +section.import-project-from + h1.create-project-title(translate="PROJECT.IMPORT.TITLE") diff --git a/app/modules/projects/create/import/import-project-error-lb.directive.coffee b/app/modules/projects/create/import/import-project-error-lb.directive.coffee new file mode 100644 index 00000000..9c03cc19 --- /dev/null +++ b/app/modules/projects/create/import/import-project-error-lb.directive.coffee @@ -0,0 +1,16 @@ +LbImportErrorDirective = (lightboxService) -> + link = (scope, el, attrs) -> + lightboxService.open(el) + + scope.close = () -> + lightboxService.close(el) + return + + return { + templateUrl: "projects/create/import/import-project-error-lb.html", + link: link + } + +LbImportErrorDirective.$inject = ["lightboxService"] + +angular.module("taigaProjects").directive("tgLbImportError", LbImportErrorDirective) diff --git a/app/partials/common/lightbox/lightbox-import-error.jade b/app/modules/projects/create/import/import-project-error-lb.jade similarity index 100% rename from app/partials/common/lightbox/lightbox-import-error.jade rename to app/modules/projects/create/import/import-project-error-lb.jade diff --git a/app/modules/projects/create/import/import-project.controller.coffee b/app/modules/projects/create/import/import-project.controller.coffee new file mode 100644 index 00000000..88bda138 --- /dev/null +++ b/app/modules/projects/create/import/import-project.controller.coffee @@ -0,0 +1,113 @@ +### +# Copyright (C) 2014-2016 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: import-project.controller.coffee +### + +class ImportProjectController + @.$inject = [ + 'tgTrelloImportService', + 'tgJiraImportService', + 'tgGithubImportService', + 'tgAsanaImportService', + '$location', + '$window', + '$routeParams', + '$tgNavUrls', + '$tgConfig', + ] + + constructor: (@trelloService, @jiraService, @githubService, @asanaService, @location, @window, @routeParams, @tgNavUrls, @config) -> + + start: -> + @.token = null + @.from = @routeParams.platform + + locationSearch = @location.search() + + if @.from == "asana" + asanaOauthToken = locationSearch.code + if locationSearch.code + asanaOauthToken = locationSearch.code + + return @asanaService.authorize(asanaOauthToken).then ((token) => + @location.search({token: encodeURIComponent(JSON.stringify(token))}) + ), @.cancelCurrentImport.bind(this) + else + @.token = JSON.parse(decodeURIComponent(locationSearch.token)) + @asanaService.setToken(@.token) + + if @.from == 'trello' + if locationSearch.oauth_verifier + trelloOauthToken = locationSearch.oauth_verifier + return @trelloService.authorize(trelloOauthToken).then ((token) => + @location.search({token: token}) + ), @.cancelCurrentImport.bind(this) + else if locationSearch.token + @.token = locationSearch.token + @trelloService.setToken(locationSearch.token) + + if @.from == "github" + if locationSearch.code + githubOauthToken = locationSearch.code + + return @githubService.authorize(githubOauthToken).then ((token) => + @location.search({token: token}) + ), @.cancelCurrentImport.bind(this) + else if locationSearch.token + @.token = locationSearch.token + @githubService.setToken(locationSearch.token) + + if @.from == "jira" + jiraOauthToken = locationSearch.oauth_token + + if jiraOauthToken + return @jiraService.authorize().then ((data) => + @location.search({token: data.token, url: data.url}) + ), @.cancelCurrentImport.bind(this) + else + @.token = locationSearch.token + @jiraService.setToken(locationSearch.token, locationSearch.url) + + select: (from) -> + if from == "trello" + @trelloService.getAuthUrl().then (url) => + @window.open(url, "_self") + else if from == "jira" + @jiraService.getAuthUrl(@.jiraUrl).then (url) => + @window.open(url, "_self") + else if from == "github" + callbackUri = @location.absUrl() + "/github" + @githubService.getAuthUrl(callbackUri).then (url) => + @window.open(url, "_self") + else if from == "asana" + @asanaService.getAuthUrl().then (url) => + @window.open(url, "_self") + else + @.from = from + + unfoldOptions: (options) -> + @.unfoldedOptions = options + + isActiveImporter: (importer) -> + if @config.get('importers').indexOf(importer) == -1 + return false + return true + + cancelCurrentImport: () -> + @location.url(@tgNavUrls.resolve('create-project-import')) + +angular.module("taigaProjects").controller("ImportProjectCtrl", ImportProjectController) diff --git a/app/modules/projects/create/import/import-project.controller.spec.coffee b/app/modules/projects/create/import/import-project.controller.spec.coffee new file mode 100644 index 00000000..670b6484 --- /dev/null +++ b/app/modules/projects/create/import/import-project.controller.spec.coffee @@ -0,0 +1,183 @@ +### +# Copyright (C) 2014-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: import-project.controller.spec.coffee +### + +describe "ImportProjectCtrl", -> + $provide = null + $controller = null + mocks = {} + + _mockConfig = -> + mocks.config = Immutable.fromJS({ + importers: ['trello', 'github', 'jira', 'asana'] + }) + + $provide.value("$tgConfig", mocks.config) + + _mockTrelloImportService = -> + mocks.trelloService = { + authorize: sinon.stub(), + getAuthUrl: sinon.stub() + } + + $provide.value("tgTrelloImportService", mocks.trelloService) + + _mockJiraImportService = -> + mocks.jiraService = { + authorize: sinon.stub(), + getAuthUrl: sinon.stub() + } + + $provide.value("tgJiraImportService", mocks.jiraService) + + _mockGithubImportService = -> + mocks.githubService = { + authorize: sinon.stub(), + getAuthUrl: sinon.stub() + } + + $provide.value("tgGithubImportService", mocks.githubService) + + _mockAsanaImportService = -> + mocks.asanaService = { + authorize: sinon.stub(), + getAuthUrl: sinon.stub() + } + + $provide.value("tgAsanaImportService", mocks.asanaService) + + _mockWindow = -> + mocks.window = { + open: sinon.stub() + } + + $provide.value("$window", mocks.window) + + _mockLocation = -> + mocks.location = { + search: sinon.stub() + } + + $provide.value("$location", mocks.location) + + _mockRouteParams = -> + mocks.routeParams = { + platform: null + } + + $provide.value("$routeParams", mocks.routeParams) + + _mockTgNavUrls = -> + mocks.tgNavUrls = { + resolve: sinon.stub() + } + + $provide.value("$tgNavUrls", mocks.tgNavUrls) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockGithubImportService() + _mockTrelloImportService() + _mockJiraImportService() + _mockAsanaImportService() + _mockWindow() + _mockLocation() + _mockTgNavUrls() + _mockRouteParams() + _mockConfig() + + return null + + _inject = -> + inject (_$controller_) -> + $controller = _$controller_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "initialize form with trello", (done) -> + searchResult = { + oauth_verifier: 123, + token: "token" + } + + mocks.location.search.returns(searchResult) + mocks.trelloService.authorize.withArgs(123).promise().resolve("token2") + + ctrl = $controller("ImportProjectCtrl") + + mocks.routeParams.platform = 'trello' + + ctrl.start().then () -> + expect(mocks.location.search).have.been.calledWith({token: "token2"}) + + done() + + it "initialize form with github", (done) -> + searchResult = { + code: 123, + token: "token", + from: "github" + } + + mocks.location.search.returns(searchResult) + mocks.githubService.authorize.withArgs(123).promise().resolve("token2") + + ctrl = $controller("ImportProjectCtrl") + + mocks.routeParams.platform = 'github' + + ctrl.start().then () -> + expect(mocks.location.search).have.been.calledWith({token: "token2"}) + + done() + + it "initialize form with asana", (done) -> + searchResult = { + code: 123, + token: encodeURIComponent("{\"token\": 222}") + from: "asana" + } + + mocks.location.search.returns(searchResult) + mocks.asanaService.authorize.withArgs(123).promise().resolve("token2") + + ctrl = $controller("ImportProjectCtrl") + + mocks.routeParams.platform = 'asana' + + ctrl.start().then () -> + expect(mocks.location.search).have.been.calledWith({token: encodeURIComponent(JSON.stringify("token2"))}) + + done() + + it "select trello import", () -> + ctrl = $controller("ImportProjectCtrl") + + mocks.trelloService.getAuthUrl.promise().resolve("url") + + ctrl.select("trello").then () -> + expect(mocks.window.open).have.been.calledWith("url", "_self") diff --git a/app/modules/projects/create/import/import-project.directive.coffee b/app/modules/projects/create/import/import-project.directive.coffee new file mode 100644 index 00000000..d68a463d --- /dev/null +++ b/app/modules/projects/create/import/import-project.directive.coffee @@ -0,0 +1,38 @@ +### +# Copyright (C) 2014-2016 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: import-project.directive.coffee +### + +ImportProjectDirective = () -> + + link = (scope, el, attr, ctrl) -> + ctrl.start() + + return { + link: link, + templateUrl:"projects/create/import/import-project.html", + controller: "ImportProjectCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + onCancelImport: '&' + } + } + +ImportProjectDirective.$inject = [] + +angular.module("taigaProjects").directive("tgImportProject", ImportProjectDirective) diff --git a/app/modules/projects/create/import/import-project.jade b/app/modules/projects/create/import/import-project.jade new file mode 100644 index 00000000..a2014d45 --- /dev/null +++ b/app/modules/projects/create/import/import-project.jade @@ -0,0 +1,95 @@ +.create-project.import-project(ng-if="!vm.from") + div(ng-include="'projects/create/import/import-header.html'") + + ul.import-project-from + li.import-project-from-site( + tg-click-input-file, + tg-import-taiga + ) + li.import-project-from-site(ng-click="vm.unfoldOptions('jira')", ng-if="vm.isActiveImporter('jira')") + .import-project-logo + img( + src="/#{v}/images/import-logos/jira.png" + alt="Jira Logo" + ) + .import-project-name-wrapper + a.import-project-name( + href="#" + title="Jira" + ) Jira + p.import-project-description(translate="PROJECT.IMPORT.JIRA.SELECTOR") + fieldset.import-project-url(ng-if="vm.unfoldedOptions == 'jira'") + label( + for="jira-host" + translate="PROJECT.IMPORT.JIRA.URL" + ) + input.import-project-input( + ng-keyup="$event.keyCode == 13 && vm.select('jira')" + id="jira-host" + ng-model="vm.jiraUrl" + ) + button.button-green.import-project-button( + ng-click="vm.select('jira')" + title="{{'PROJECT.IMPORT.ACCEEDE' | translate}}" + translate="PROJECT.IMPORT.ACCEEDE" + ) + li.import-project-from-site(ng-click="vm.select('github')", ng-if="vm.isActiveImporter('github')") + .import-project-logo + img( + src="/#{v}/images/import-logos/github.png" + alt="Github Logo" + ) + .import-project-name-wrapper + a.import-project-name( + href="#" + title="Github" + ) Github + p.import-project-description(translate="PROJECT.IMPORT.GITHUB.SELECTOR") + li.import-project-from-site(ng-click="vm.select('trello')", ng-if="vm.isActiveImporter('trello')") + .import-project-logo + img( + src="/#{v}/images/import-logos/trello.png" + alt="Trello Logo" + ) + .import-project-name-wrapper + a.import-project-name( + href="#" + title="Trello" + ) Trello + p.import-project-description(translate="PROJECT.IMPORT.TRELLO.SELECTOR") + li.import-project-from-site(ng-click="vm.select('asana')", ng-if="vm.isActiveImporter('asana')") + .import-project-logo + img( + src="/#{v}/images/import-logos/asana.png" + alt="Asana Logo" + ) + .import-project-name-wrapper + a.import-project-name( + href="#" + title="Asana" + ) Asana + p.import-project-description(translate="PROJECT.IMPORT.ASANA.SELECTOR") + + .create-project-action + a.trans-button.create-project-action-back( + tg-nav="create-project", + title="{{'PROJECT.CREATE.BACK' | translate}}" + translate="PROJECT.CREATE.BACK" + ) + +tg-trello-import( + ng-if="vm.from == 'trello' && vm.token" + on-cancel="vm.cancelCurrentImport()" +) +tg-jira-import( + ng-if="vm.from == 'jira'" + on-cancel="vm.cancelCurrentImport()" +) +tg-github-import( + ng-if="vm.from == 'github' && vm.token" + on-cancel="vm.cancelCurrentImport()" +) +tg-asana-import( + ng-if="vm.from == 'asana' && vm.token" + on-cancel="vm.cancelCurrentImport()" +) diff --git a/app/modules/projects/create/import/import-project.scss b/app/modules/projects/create/import/import-project.scss new file mode 100644 index 00000000..2c84f33c --- /dev/null +++ b/app/modules/projects/create/import/import-project.scss @@ -0,0 +1,55 @@ +.import-project { + &-from-site { + align-items: center; + border-bottom: 1px solid $whitish; + color: $grayer; + cursor: pointer; + display: flex; + padding: 1rem; + position: relative; + + &:hover { + background: rgba($primary, .1); + transition: background .3s ease-in; + } + &:first-child { + border-top: 1px solid $whitish; + .import-project-name { + margin: 0; + } + .import-project-logo img { + padding: 0 .9rem 0 1rem; + width: 5.1rem; + } + } + } + &-logo { + align-self: flex-start; + margin-right: .5rem; + img { + padding: 0 1rem; + width: 5rem; + } + } + &-name-wrapper { + display: flex; + flex: 1; + flex-direction: column; + justify-content: center; + } + &-description { + @include font-type(light); + margin-bottom: 0; + } + &-url { + margin-top: .5rem; + } + &-input { + vertical-align: middle; + } + &-button { + background: $primary; + color: $white; + padding: .25rem 1rem; + } +} diff --git a/app/modules/projects/create/import/import-project.service.coffee b/app/modules/projects/create/import/import-project.service.coffee new file mode 100644 index 00000000..4759fd57 --- /dev/null +++ b/app/modules/projects/create/import/import-project.service.coffee @@ -0,0 +1,121 @@ +### +# Copyright (C) 2014-2016 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: import-project.service.coffee +### + +class ImportProjectService extends taiga.Service + @.$inject = [ + 'tgCurrentUserService', + '$tgAuth', + 'tgLightboxFactory', + '$translate', + '$tgConfirm', + '$location', + '$tgNavUrls' + ] + + constructor: (@currentUserService, @tgAuth, @lightboxFactory, @translate, @confirm, @location, @tgNavUrls) -> + + importPromise: (promise) -> + return promise.then(@.importSuccess.bind(this), @.importError.bind(this)) + + importSuccess: (result) -> + return @currentUserService.loadProjects().then () => + if result.status == 202 # Async mode + title = @translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE') + message = @translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE') + @confirm.success(title, message) + else # result.status == 201 # Sync mode + ctx = {project: result.data.slug} + @location.path(@tgNavUrls.resolve('project-admin-project-profile-details', ctx)) + msg = @translate.instant('PROJECT.IMPORT.SYNC_SUCCESS') + @confirm.notify('success', msg) + + importError: (result) -> + return @tgAuth.refresh().then () => + restrictionError = @.getRestrictionError(result) + + if restrictionError + @lightboxFactory.create('tg-lb-import-error', { + class: 'lightbox lightbox-import-error' + }, restrictionError) + + else + errorMsg = @translate.instant("PROJECT.IMPORT.ERROR") + + if result.status == 429 # TOO MANY REQUESTS + errorMsg = @translate.instant("PROJECT.IMPORT.ERROR_TOO_MANY_REQUEST") + else if result.data?._error_message + errorMsg = @translate.instant("PROJECT.IMPORT.ERROR_MESSAGE", {error_message: result.data._error_message}) + + @confirm.notify("error", errorMsg) + + getRestrictionError: (result) -> + if result.headers + errorKey = '' + + user = @currentUserService.getUser() + maxMemberships = null + + if result.headers.isPrivate + privateError = !@currentUserService.canCreatePrivateProjects().valid + + if user.get('max_memberships_private_projects') != null && result.headers.memberships >= user.get('max_memberships_private_projects') + membersError = true + else + membersError = false + + if privateError && membersError + errorKey = 'private-space-members' + maxMemberships = user.get('max_memberships_private_projects') + else if privateError + errorKey = 'private-space' + else if membersError + errorKey = 'private-members' + maxMemberships = user.get('max_memberships_private_projects') + + else + publicError = !@currentUserService.canCreatePublicProjects().valid + + if user.get('max_memberships_public_projects') != null && result.headers.memberships >= user.get('max_memberships_public_projects') + membersError = true + else + membersError = false + + if publicError && membersError + errorKey = 'public-space-members' + maxMemberships = user.get('max_memberships_public_projects') + else if publicError + errorKey = 'public-space' + else if membersError + errorKey = 'public-members' + maxMemberships = user.get('max_memberships_public_projects') + + if !errorKey + return false + + return { + key: errorKey, + values: { + max_memberships: maxMemberships, + members: result.headers.memberships + } + } + else + return false + +angular.module("taigaProjects").service("tgImportProjectService", ImportProjectService) diff --git a/app/modules/projects/create/import/import-project.service.spec.coffee b/app/modules/projects/create/import/import-project.service.spec.coffee new file mode 100644 index 00000000..78417d7d --- /dev/null +++ b/app/modules/projects/create/import/import-project.service.spec.coffee @@ -0,0 +1,294 @@ +### +# Copyright (C) 2014-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: import-project.service.spec.coffee +### + +describe "tgImportProjectService", -> + $provide = null + importProjectService = null + mocks = {} + + _mockCurrentUserService = -> + mocks.currentUserService = { + loadProjects: sinon.stub(), + getUser: sinon.stub(), + canCreatePrivateProjects: sinon.stub(), + canCreatePublicProjects: sinon.stub() + } + + $provide.value("tgCurrentUserService", mocks.currentUserService) + + _mockAuth = -> + mocks.auth = { + refresh: sinon.stub() + } + + $provide.value("$tgAuth", mocks.auth) + + _mockLightboxFactory = -> + mocks.lightboxFactory = { + create: sinon.stub() + } + + $provide.value("tgLightboxFactory", mocks.lightboxFactory) + + _mockTranslate = -> + mocks.translate = { + instant: sinon.stub() + } + + $provide.value("$translate", mocks.translate) + + _mockConfirm = -> + mocks.confirm = { + success: sinon.stub(), + notify: sinon.stub() + } + + $provide.value("$tgConfirm", mocks.confirm) + + _mockLocation = -> + mocks.location = { + path: sinon.stub() + } + + $provide.value("$location", mocks.location) + + _mockNavUrls = -> + mocks.navUrls = { + resolve: sinon.stub() + } + + $provide.value("$tgNavUrls", mocks.navUrls) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockCurrentUserService() + _mockAuth() + _mockLightboxFactory() + _mockTranslate() + _mockConfirm() + _mockLocation() + _mockNavUrls() + + return null + + _inject = -> + inject (_tgImportProjectService_) -> + importProjectService = _tgImportProjectService_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "import success async mode", (done) -> + result = { + status: 202, + data: { + slug: 'project-slug' + } + } + + mocks.translate.instant.returns('xxx') + + mocks.currentUserService.loadProjects.promise().resolve() + + importProjectService.importSuccess(result).then () -> + expect(mocks.confirm.success).have.been.calledOnce + done() + + it "import success sync mode", (done) -> + result = { + status: 201, + data: { + slug: 'project-slug' + } + } + + mocks.translate.instant.returns('msg') + + mocks.navUrls.resolve.withArgs('project-admin-project-profile-details', {project: 'project-slug'}).returns('url') + + mocks.currentUserService.loadProjects.promise().resolve() + + importProjectService.importSuccess(result).then () -> + expect(mocks.location.path).have.been.calledWith('url') + expect(mocks.confirm.notify).have.been.calledWith('success', 'msg') + done() + + it "private get restriction errors, private & member error", () -> + result = { + headers: { + isPrivate: true, + memberships: 10 + } + } + + mocks.currentUserService.getUser.returns(Immutable.fromJS({ + max_memberships_private_projects: 1 + })) + + mocks.currentUserService.canCreatePrivateProjects.returns({ + valid: false + }) + + error = importProjectService.getRestrictionError(result) + + expect(error).to.be.eql({ + key: 'private-space-members', + values: { + max_memberships: 1, + members: 10 + } + }) + + it "private get restriction errors, private limit error", () -> + result = { + headers: { + isPrivate: true, + memberships: 10 + } + } + + mocks.currentUserService.getUser.returns(Immutable.fromJS({ + max_memberships_private_projects: 20 + })) + + mocks.currentUserService.canCreatePrivateProjects.returns({ + valid: false + }) + + error = importProjectService.getRestrictionError(result) + + expect(error).to.be.eql({ + key: 'private-space', + values: { + max_memberships: null, + members: 10 + } + }) + + it "private get restriction errors, members error", () -> + result = { + headers: { + isPrivate: true, + memberships: 10 + } + } + + mocks.currentUserService.getUser.returns(Immutable.fromJS({ + max_memberships_private_projects: 1 + })) + + mocks.currentUserService.canCreatePrivateProjects.returns({ + valid: true + }) + + error = importProjectService.getRestrictionError(result) + + expect(error).to.be.eql({ + key: 'private-members', + values: { + max_memberships: 1, + members: 10 + } + }) + + it "public get restriction errors, public & member error", () -> + result = { + headers: { + isPrivate: false, + memberships: 10 + } + } + + mocks.currentUserService.getUser.returns(Immutable.fromJS({ + max_memberships_public_projects: 1 + })) + + mocks.currentUserService.canCreatePublicProjects.returns({ + valid: false + }) + + error = importProjectService.getRestrictionError(result) + + expect(error).to.be.eql({ + key: 'public-space-members', + values: { + max_memberships: 1, + members: 10 + } + }) + + it "public get restriction errors, public limit error", () -> + result = { + headers: { + isPrivate: false, + memberships: 10 + } + } + + mocks.currentUserService.getUser.returns(Immutable.fromJS({ + max_memberships_public_projects: 20 + })) + + mocks.currentUserService.canCreatePublicProjects.returns({ + valid: false + }) + + error = importProjectService.getRestrictionError(result) + + expect(error).to.be.eql({ + key: 'public-space', + values: { + max_memberships: null, + members: 10 + } + }) + + it "public get restriction errors, members error", () -> + result = { + headers: { + isPrivate: false, + memberships: 10 + } + } + + mocks.currentUserService.getUser.returns(Immutable.fromJS({ + max_memberships_public_projects: 1 + })) + + mocks.currentUserService.canCreatePublicProjects.returns({ + valid: true + }) + + error = importProjectService.getRestrictionError(result) + + expect(error).to.be.eql({ + key: 'public-members', + values: { + max_memberships: 1, + members: 10 + } + }) diff --git a/app/modules/projects/create/invite-members/invite-members.controller.coffee b/app/modules/projects/create/invite-members/invite-members.controller.coffee new file mode 100644 index 00000000..a1f61385 --- /dev/null +++ b/app/modules/projects/create/invite-members/invite-members.controller.coffee @@ -0,0 +1,26 @@ +### +# Copyright (C) 2014-2016 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: invite-members.controller.coffee +### + +class InviteMembersController + @.$inject = [] + + isDisabled: (id) -> + return @.invitedMembers.indexOf(id) == -1 + +angular.module("taigaProjects").controller("InviteMembersCtrl", InviteMembersController) diff --git a/app/modules/projects/create/invite-members/invite-members.directive.coffee b/app/modules/projects/create/invite-members/invite-members.directive.coffee new file mode 100644 index 00000000..0867cab3 --- /dev/null +++ b/app/modules/projects/create/invite-members/invite-members.directive.coffee @@ -0,0 +1,38 @@ +### +# Copyright (C) 2014-2016 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: invite-members.directive.coffee +### + +InviteMembersDirective = () -> + link = (scope, el, attr, ctrl) -> + + return { + link: link, + templateUrl:"projects/create/invite-members/invite-members.html", + controller: "InviteMembersCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + invitedMembers: '<', + members: '<', + onToggleInvitedMember: '&' + } + } + +InviteMembersDirective.$inject = [] + +angular.module("taigaProjects").directive("tgInviteMembers", InviteMembersDirective) diff --git a/app/modules/projects/create/invite-members/invite-members.jade b/app/modules/projects/create/invite-members/invite-members.jade new file mode 100644 index 00000000..eb5ec521 --- /dev/null +++ b/app/modules/projects/create/invite-members/invite-members.jade @@ -0,0 +1,8 @@ +fieldset.create-project-invite + .create-project-invite-avatars + tg-single-member( + tg-repeat="member in vm.members track by member.get('id')" + disabled="vm.isDisabled(member.get('id'))" + avatar="member" + ng-click="vm.onToggleInvitedMember({member: member.get('id')})" + ) diff --git a/app/modules/projects/create/invite-members/invite-members.scss b/app/modules/projects/create/invite-members/invite-members.scss new file mode 100644 index 00000000..567b51af --- /dev/null +++ b/app/modules/projects/create/invite-members/invite-members.scss @@ -0,0 +1,7 @@ +.create-project-invite { + &-avatars { + display: flex; + flex-wrap: wrap; + } +} + diff --git a/app/modules/projects/create/invite-members/single-member/single-member.directive.coffee b/app/modules/projects/create/invite-members/single-member/single-member.directive.coffee new file mode 100644 index 00000000..ce63d178 --- /dev/null +++ b/app/modules/projects/create/invite-members/single-member/single-member.directive.coffee @@ -0,0 +1,31 @@ +### +# Copyright (C) 2014-2016 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: single-member.directive.coffee +### + +SingleMemberDirective = () -> + return { + templateUrl:"projects/create/invite-members/single-member/single-member.html", + scope: { + disabled: "<", + avatar: "=" + } + } + +SingleMemberDirective.$inject = [] + +angular.module("taigaProjects").directive("tgSingleMember", SingleMemberDirective) diff --git a/app/modules/projects/create/invite-members/single-member/single-member.jade b/app/modules/projects/create/invite-members/single-member/single-member.jade new file mode 100644 index 00000000..1974e4c1 --- /dev/null +++ b/app/modules/projects/create/invite-members/single-member/single-member.jade @@ -0,0 +1,6 @@ +label.create-project-invite-avatar(ng-class="{'disabled': disabled}") + img( + tg-avatar="avatar" + alt="{{avatar.get('full_name_display')}}" + title="{{avatar.get('full_name_display')}}" + ) diff --git a/app/modules/projects/create/invite-members/single-member/single-member.scss b/app/modules/projects/create/invite-members/single-member/single-member.scss new file mode 100644 index 00000000..d0d0c7ec --- /dev/null +++ b/app/modules/projects/create/invite-members/single-member/single-member.scss @@ -0,0 +1,40 @@ +.create-project-invite-avatar { + cursor: pointer; + display: block; + margin-right: .25rem; + &:hover { + @include empty-color(47); + border: 0; + opacity: .9; + transition: all .2s; + transition-delay: .2s; + } + &.disabled { + opacity: .3; + transition: opacity .2s; + &:hover { + @include empty-color(23); + border: 0; + opacity: .6; + transition: all .2s ease-in; + &::after { + background: $grayer; + left: 24px; + top: 8px; + transform: rotate(0); + transform-origin: center; + } + &::before { + background: $grayer; + right: 22px; + top: 8px; + transform: rotate(90deg); + transform-origin: center; + } + } + } + img { + cursor: pointer; + width: 3rem; + } +} diff --git a/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee new file mode 100644 index 00000000..2f99c010 --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee @@ -0,0 +1,58 @@ +### +# Copyright (C) 2014-2016 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: jira-import-project-form.controller.coffee +### + +class JiraImportProjectFormController + @.$inject = [ + "tgCurrentUserService" + ] + + constructor: (@currentUserService) -> + @.canCreatePublicProjects = @currentUserService.canCreatePublicProjects() + @.canCreatePrivateProjects = @currentUserService.canCreatePrivateProjects() + + @.projectForm = @.project.toJS() + + @.projectForm.is_private = false + @.projectForm.keepExternalReference = false + if @.projectForm.importer_type == "agile" + @.projectForm.project_type = null + else + @.projectForm.project_type = "scrum" + @.projectForm.create_subissues = true + + if !@.canCreatePublicProjects.valid && @.canCreatePrivateProjects.valid + @.projectForm.is_private = true + + checkUsersLimit: () -> + @.limitMembersPrivateProject = @currentUserService.canAddMembersPrivateProject(@.members.size) + @.limitMembersPublicProject = @currentUserService.canAddMembersPublicProject(@.members.size) + + saveForm: () -> + @.onSaveProjectDetails({project: Immutable.fromJS(@.projectForm)}) + + canCreateProject: () -> + if @.projectForm.is_private + return @.canCreatePrivateProjects.valid + else + return @.canCreatePublicProjects.valid + + isDisabled: () -> + return !@.canCreateProject() + +angular.module('taigaProjects').controller('JiraImportProjectFormCtrl', JiraImportProjectFormController) diff --git a/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee new file mode 100644 index 00000000..72806f9e --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee @@ -0,0 +1,40 @@ +### +# Copyright (C) 2014-2016 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: jira-import-project-form.directive.coffee +### + +JiraImportProjectFormDirective = () -> + return { + link: (scope, elm, attr, ctrl) -> + scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl)) + + templateUrl:"projects/create/jira-import/jira-import-project-form/jira-import-project-form.html", + controller: "JiraImportProjectFormCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + members: '<', + project: '<', + onSaveProjectDetails: '&', + onCancelForm: '&', + fetchingUsers: '<' + } + } + +JiraImportProjectFormDirective.$inject = [] + +angular.module("taigaProjects").directive("tgJiraImportProjectForm", JiraImportProjectFormDirective) diff --git a/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.jade b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.jade new file mode 100644 index 00000000..864ba248 --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.jade @@ -0,0 +1,126 @@ +.import-project-jira-form + div(ng-include="'projects/create/import/import-header.html'") + + .spin(tg-loading="vm.fetchingUsers") + + form( + ng-if="!vm.fetchingUsers", + name="projectForm", + ng-submit="vm.saveForm()" + ) + div(ng-include="'projects/create/import-project-form-common/name.html'") + div(ng-include="'projects/create/import-project-form-common/description.html'") + + .create-project-import-type(role="group", ng-if="vm.projectForm.importer_type !== 'agile'") + fieldset + input( + type="radio" + name="project_type" + id="template-scrum" + data-required="true" + aria-hidden="true" + ng-value="'scrum'" + ng-model="vm.projectForm.project_type" + required + ) + label(for="template-scrum") + tg-svg(svg-icon="icon-scrum") + span(translate="PROJECT.IMPORT.JIRA.SCRUM_PROJECT") + fieldset + input( + type="radio" + name="project_type" + id="template-kanban" + data-required="true" + aria-hidden="true" + ng-value="'kanban'" + ng-model="vm.projectForm.project_type" + required + ) + label(for="template-kanban") + tg-svg(svg-icon="icon-kanban") + span(translate="PROJECT.IMPORT.JIRA.KANBAN_PROJECT") + fieldset + input( + type="radio" + name="project_type" + id="template-issues" + data-required="true" + aria-hidden="true" + ng-value="'issues'" + ng-model="vm.projectForm.project_type" + required + ) + label(for="template-issues") + tg-svg(svg-icon="icon-issues") + span(translate="PROJECT.IMPORT.JIRA.ISSUES_PROJECT") + + p.create-project-import-type-info( + ng-if="vm.projectForm.project_type == 'scrum'" + translate='PROJECT.IMPORT.JIRA.CREATE_AS_SCRUM_DESCRIPTION' + ) + p.create-project-import-type-info( + ng-if="vm.projectForm.project_type == 'kanban'" + translate='PROJECT.IMPORT.JIRA.CREATE_AS_KANBAN_DESCRIPTION' + ) + .create-project-type-issues-subform(ng-if="vm.projectForm.project_type == 'issues'") + p.create-project-type-issues-subform-title( + translate='PROJECT.IMPORT.JIRA.CREATE_AS_ISSUES_DESCRIPTION' + ) + fieldset.create-project-type-issues-subform-radiogr + label + input( + type="radio" + name="create_subissues" + id="template-issues-create" + data-required="true" + aria-hidden="true" + ng-value="true" + ng-model="vm.projectForm.create_subissues" + required + ) + svg( + viewBox="0 0 16 16" + xmlns="http://www.w3.org/2000/svg" + ) + circle( + cx="7" + cy="7" + r="6" + ) + span.control-indicator(translate="PROJECT.IMPORT.JIRA.CREATE_NEW_ISSUES") + label + input( + type="radio" + name="create_subissues" + id="template-issues-ignore" + data-required="true" + aria-hidden="true" + ng-value="false" + ng-model="vm.projectForm.create_subissues" + required + ) + svg( + viewBox="0 0 16 16" + xmlns="http://www.w3.org/2000/svg" + ) + circle( + cx="7" + cy="7" + r="6" + ) + span.control-indicator(translate="PROJECT.IMPORT.JIRA.NOT_CREATE_NEW_ISSUES") + + div(ng-include="'projects/create/import-project-form-common/project-privacy.html'") + tg-create-project-restrictions( + is-private="vm.projectForm.is_private" + can-create-public-projects="vm.canCreatePublicProjects" + can-create-private-projects="vm.canCreatePrivateProjects" + ) + tg-create-project-members-restrictions( + is-private="vm.projectForm.is_private" + limit-members-private-project="vm.limitMembersPrivateProject" + limit-members-public-project="vm.limitMembersPublicProject" + ) + div(ng-include="'projects/create/import-project-form-common/links.html'") + div(ng-include="'projects/create/import-project-form-common/actions.html'") diff --git a/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.scss b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.scss new file mode 100644 index 00000000..639b5deb --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.scss @@ -0,0 +1,30 @@ +.import-project-jira-form { + @include create-project; +} + +.create-project-import-type-info { + @include font-size(small); + @include font-type(light); + margin-bottom: 1rem; +} + +.create-project-type-issues-subform { + margin: 1rem 0 2rem; + + &-title { + @include font-size(small); + @include font-type(bold); + } + + &-radiogr { + @include radio-group; + } +} + +.create-project-import-type { + margin-bottom: .25rem; + + fieldset { + margin: 0; + } +} diff --git a/app/modules/projects/create/jira-import/jira-import.controller.coffee b/app/modules/projects/create/jira-import/jira-import.controller.coffee new file mode 100644 index 00000000..ec9c0b20 --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import.controller.coffee @@ -0,0 +1,78 @@ +### +# Copyright (C) 2014-2016 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: jira-import.controller.coffee +### + +class JiraImportController + @.$inject = [ + 'tgJiraImportService', + '$tgConfirm', + '$translate', + 'tgImportProjectService', + ] + + constructor: (@jiraImportService, @confirm, @translate, @importProjectService) -> + @.step = 'autorization-jira' + @.project = null + taiga.defineImmutableProperty @, 'projects', () => return @jiraImportService.projects + taiga.defineImmutableProperty @, 'members', () => return @jiraImportService.projectUsers + + startProjectSelector: () -> + @.step = 'project-select-jira' + @jiraImportService.fetchProjects() + + onSelectProject: (project) -> + @.step = 'project-form-jira' + @.project = project + @.fetchingUsers = true + + @jiraImportService.fetchUsers(@.project.get('id')).then () => @.fetchingUsers = false + + onSaveProjectDetails: (project) -> + @.project = project + @.step = 'project-members-jira' + + onCancelMemberSelection: () -> + @.step = 'project-form-jira' + + startImport: (users) -> + loader = @confirm.loader(@translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), @translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true) + + loader.start() + + projectType = @.project.get('project_type') + if projectType == "issues" and @.project.get('create_subissues') + projectType = "issues-with-subissues" + + promise = @jiraImportService.importProject( + @.project.get('name'), + @.project.get('description'), + @.project.get('id'), + users, + @.project.get('keepExternalReference'), + @.project.get('is_private'), + projectType, + @.project.get('importer_type'), + ) + + @importProjectService.importPromise(promise).then () => loader.stop() + + submitUserSelection: (users) -> + @.startImport(users) + return null + +angular.module('taigaProjects').controller('JiraImportCtrl', JiraImportController) diff --git a/app/modules/projects/create/jira-import/jira-import.controller.spec.coffee b/app/modules/projects/create/jira-import/jira-import.controller.spec.coffee new file mode 100644 index 00000000..f4542dd8 --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import.controller.spec.coffee @@ -0,0 +1,171 @@ +### +# Copyright (C) 2014-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: jira-import.controller.spec.coffee +### + +describe "JiraImportCtrl", -> + $provide = null + $controller = null + mocks = {} + + _mockCurrentUserService = -> + mocks.currentUserService = { + canAddMembersPrivateProject: sinon.stub() + canAddMembersPublicProject: sinon.stub() + } + + $provide.value("tgCurrentUserService", mocks.currentUserService) + + _mockJiraImportService = -> + mocks.jiraService = { + fetchProjects: sinon.stub(), + fetchUsers: sinon.stub(), + importProject: sinon.stub() + } + + $provide.value("tgJiraImportService", mocks.jiraService) + + _mockImportProjectService = -> + mocks.importProjectService = { + importPromise: sinon.stub() + } + + $provide.value("tgImportProjectService", mocks.importProjectService) + + _mockConfirm = -> + mocks.confirm = { + loader: sinon.stub() + } + + $provide.value("$tgConfirm", mocks.confirm) + + _mockTranslate = -> + mocks.translate = { + instant: sinon.stub() + } + + $provide.value("$translate", mocks.translate) + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockJiraImportService() + _mockConfirm() + _mockTranslate() + _mockImportProjectService() + _mockCurrentUserService() + + return null + + _inject = -> + inject (_$controller_) -> + $controller = _$controller_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "start project selector", () -> + ctrl = $controller("JiraImportCtrl") + ctrl.startProjectSelector() + + expect(ctrl.step).to.be.equal('project-select-jira') + expect(mocks.jiraService.fetchProjects).have.been.called + + it "on select project reload projects", (done) -> + project = Immutable.fromJS({ + id: 1, + name: "project-name" + }) + + mocks.jiraService.fetchUsers.promise().resolve() + + ctrl = $controller("JiraImportCtrl") + + promise = ctrl.onSelectProject(project) + + expect(ctrl.fetchingUsers).to.be.true + + promise.then () -> + expect(ctrl.fetchingUsers).to.be.false + expect(ctrl.step).to.be.equal('project-form-jira') + expect(ctrl.project).to.be.equal(project) + done() + + it "on save project details reload users", () -> + project = Immutable.fromJS({ + id: 1, + name: "project-name" + }) + + ctrl = $controller("JiraImportCtrl") + ctrl.onSaveProjectDetails(project) + + expect(ctrl.step).to.be.equal('project-members-jira') + expect(ctrl.project).to.be.equal(project) + + it "on select user init import", (done) -> + users = Immutable.fromJS([ + { + id: 0 + }, + { + id: 1 + }, + { + id: 2 + } + ]) + + loaderObj = { + start: sinon.spy(), + update: sinon.stub(), + stop: sinon.spy() + } + + projectResult = { + id: 3, + name: "name" + } + + mocks.confirm.loader.returns(loaderObj) + + mocks.importProjectService.importPromise.promise().resolve() + + ctrl = $controller("JiraImportCtrl") + ctrl.project = Immutable.fromJS({ + id: 1, + name: 'project-name', + description: 'project-description', + keepExternalReference: false, + is_private: true + }) + + + mocks.jiraService.importProject.promise().resolve(projectResult) + + ctrl.startImport(users).then () -> + expect(loaderObj.start).have.been.called + expect(loaderObj.stop).have.been.called + expect(mocks.jiraService.importProject).have.been.calledWith('project-name', 'project-description', 1, users, false, true) + + done() diff --git a/app/modules/projects/create/jira-import/jira-import.directive.coffee b/app/modules/projects/create/jira-import/jira-import.directive.coffee new file mode 100644 index 00000000..70860d9e --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import.directive.coffee @@ -0,0 +1,35 @@ +### +# Copyright (C) 2014-2016 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: jira-import.directive.coffee +### + +JiraImportDirective = () -> + return { + link: (scope, elm, attrs, ctrl) -> + ctrl.startProjectSelector() + templateUrl:"projects/create/jira-import/jira-import.html", + controller: "JiraImportCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + onCancel: '&' + } + } + +JiraImportDirective.$inject = [] + +angular.module("taigaProjects").directive("tgJiraImport", JiraImportDirective) diff --git a/app/modules/projects/create/jira-import/jira-import.jade b/app/modules/projects/create/jira-import/jira-import.jade new file mode 100644 index 00000000..836171c6 --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import.jade @@ -0,0 +1,30 @@ +.create-project.import-project(ng-if="vm.step == 'autorization-jira'") + p autorization... + +tg-import-project-selector( + logo="/#{v}/images/import-logos/jira.png" + search="{{ 'PROJECT.IMPORT.JIRA.CHOOSE_PROJECT' | translate }}" + projects="vm.projects" + on-cancel="vm.onCancel()" + on-select-project="vm.onSelectProject(project)" + ng-if="vm.step == 'project-select-jira'" +) + +tg-jira-import-project-form( + ng-if="vm.step == 'project-form-jira'" + project="vm.project" + members="vm.members" + fetching-users="vm.fetchingUsers" + on-save-project-details="vm.onSaveProjectDetails(project)" + on-cancel-form="vm.step = 'project-select-jira'" +) + +tg-import-project-members( + ng-if="vm.step == 'project-members-jira'" + platform="Jira" + logo="/#{v}/images/import-logos/jira.png" + project="vm.project" + members="vm.members" + on-submit="vm.submitUserSelection(users)" + on-cancel="vm.onCancelMemberSelection()" +) diff --git a/app/modules/projects/create/jira-import/jira-import.service.coffee b/app/modules/projects/create/jira-import/jira-import.service.coffee new file mode 100644 index 00000000..57ed346b --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import.service.coffee @@ -0,0 +1,58 @@ +### +# Copyright (C) 2014-2016 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: jira-import.service.coffee +### + +class JiraImportService extends taiga.Service + @.$inject = [ + 'tgResources', + '$location' + ] + + constructor: (@resources, @location) -> + @.projects = Immutable.List() + @.projectUsers = Immutable.List() + + setToken: (token, url) -> + @.token = token + @.url = url + + fetchProjects: () -> + @resources.jiraImporter.listProjects(@.url, @.token).then (projects) => @.projects = projects + + fetchUsers: (projectId) -> + @resources.jiraImporter.listUsers(@.url, @.token, projectId).then (users) => @.projectUsers = users + + importProject: (name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType) -> + @resources.jiraImporter.importProject(@.url, @.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType) + + getAuthUrl: (url) -> + return new Promise (resolve) => + @resources.jiraImporter.getAuthUrl(url).then (response) => + @.authUrl = response.data.url + resolve(@.authUrl) + + authorize: () -> + return new Promise (resolve, reject) => + @resources.jiraImporter.authorize().then ((response) => + @.token = response.data.token + @.url = response.data.url + resolve(response.data) + ), (error) -> + reject(new Error(error.status)) + +angular.module("taigaProjects").service("tgJiraImportService", JiraImportService) diff --git a/app/modules/projects/create/jira-import/jira-import.service.spec.coffee b/app/modules/projects/create/jira-import/jira-import.service.spec.coffee new file mode 100644 index 00000000..3b5650d0 --- /dev/null +++ b/app/modules/projects/create/jira-import/jira-import.service.spec.coffee @@ -0,0 +1,129 @@ +### +# Copyright (C) 2014-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: jira-import.controller.spec.coffee +### + +describe "tgJiraImportService", -> + $provide = null + service = null + mocks = {} + + _mockResources = -> + mocks.resources = { + jiraImporter: { + listProjects: sinon.stub(), + listUsers: sinon.stub(), + importProject: sinon.stub(), + getAuthUrl: sinon.stub(), + authorize: sinon.stub() + } + } + + $provide.value("tgResources", mocks.resources) + + _mockLocation = -> + mocks.location = { + search: sinon.stub() + } + + mocks.location.search.returns({ + url: "http://test", + token: 123 + }) + + $provide.value("$location", mocks.location) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockResources() + _mockLocation() + + return null + + _inject = -> + inject (_tgJiraImportService_) -> + service = _tgJiraImportService_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "fetch projects", (done) -> + service.setToken(123, 'http://test') + mocks.resources.jiraImporter.listProjects.withArgs("http://test", 123).promise().resolve('projects') + + service.fetchProjects().then () -> + service.projects = "projects" + done() + + it "fetch user", (done) -> + service.setToken(123, 'http://test') + projectId = 3 + mocks.resources.jiraImporter.listUsers.withArgs("http://test", 123, projectId).promise().resolve('users') + + service.fetchUsers(projectId).then () -> + service.projectUsers = 'users' + done() + + it "import project", () -> + service.setToken(123, 'http://test') + service.url = 'url' + projectId = 2 + + service.importProject(projectId, true, true ,true) + + expect(mocks.resources.jiraImporter.importProject).to.have.been.calledWith('url', 123, projectId, true, true, true) + + it "get auth url", (done) -> + service.setToken(123, 'http://test') + projectId = 3 + + response = { + data: { + url: "url123" + } + } + + mocks.resources.jiraImporter.getAuthUrl.promise("http://test").resolve(response) + + service.getAuthUrl().then (url) -> + expect(url).to.be.equal("url123") + done() + + it "authorize", (done) -> + service.setToken(123, 'http://test') + projectId = 3 + + response = { + data: { + url: "http://test", + token: "token123" + } + } + + mocks.resources.jiraImporter.authorize.withArgs().promise().resolve(response) + + service.authorize().then (token) -> + expect(token).to.be.deep.equal({url: "http://test", token: "token123"}) + done() diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee new file mode 100644 index 00000000..f151b175 --- /dev/null +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee @@ -0,0 +1,35 @@ +### +# Copyright (C) 2014-2016 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: trello-import-project-members.controller.coffee +### + +class SelectImportUserLightboxCtrl + @.$inject = [] + + constructor: () -> + + start: () -> + @.mode = 'search' + @.invalid = false + + assignUser: () -> + @.onSelectUser({user: @.user, taigaUser: @.userEmail}) + + selectUser: (taigaUser) -> + @.onSelectUser({user: @.user, taigaUser: Immutable.fromJS(taigaUser)}) + +angular.module('taigaProjects').controller('SelectImportUserLightboxCtrl', SelectImportUserLightboxCtrl) diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee new file mode 100644 index 00000000..342eceb4 --- /dev/null +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee @@ -0,0 +1,54 @@ +### +# Copyright (C) 2014-2016 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: select-import-user-lightbox.directive.coffee +### + +SelectImportUserLightboxDirective = (lightboxService, lightboxKeyboardNavigationService) -> + link = (scope, el, attrs, ctrl) -> + pepe = () -> + scope.$watch 'vm.visible', (visible) -> + if visible && !el.hasClass('open') + ctrl.start() + lightboxService.open(el, null, scope.vm.onClose).then -> + el.find('input').focus() + lightboxKeyboardNavigationService.init(el) + else if !visible && el.hasClass('open') + lightboxService.close(el).then () -> + ctrl.userEmail = '' + ctrl.usersSearch = '' + + return { + controller: "SelectImportUserLightboxCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + user: '<', + visible: '<', + onClose: '&', + onSelectUser: '&', + selectableUsers: '<', + isPrivate: '=', + limitMembersPrivateProject: '=', + limitMembersPublicProject: '=' + }, + templateUrl: 'projects/create/select-import-user-lightbox/select-import-user-lightbox.html' + link: link + } + +SelectImportUserLightboxDirective.$inject = ['lightboxService', 'lightboxKeyboardNavigationService'] + +angular.module("taigaProjects").directive("tgSelectImportUserLightbox", SelectImportUserLightboxDirective) diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade new file mode 100644 index 00000000..1030b1c9 --- /dev/null +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade @@ -0,0 +1,90 @@ +tg-lightbox-close(on-close="vm.onClose()") + +.form(ng-if="vm.visible") + .candidate-user + .avatar.empty(ng-if="!vm.user.get('avatar')") {{vm.user.get('full_name')[0].toUpperCase() || vm.user.get('username')[0].toUpperCase()}} + .avatar(ng-if="vm.user.get('avatar')") + img(ng-src="{{vm.user.get('avatar')}}") + p {{vm.user.get('full_name') || vm.user.get('username')}} + + h2.title(translate="PROJECT.IMPORT.WHO_IS") + + div.create-project-warning(ng-if="!vm.limitMembersPublicProject.valid && !vm.isPrivate") + tg-svg(svg-icon="icon-exclamation") + span( + translate="PROJECT.IMPORT.PROJECT_RESTRICTIONS.ACCOUNT_ALLOW_MEMBERS", + translate-values="{'members': vm.limitMembersPublicProject.max}" + ) + + div.create-project-warning(ng-if="!vm.limitMembersPrivateProject.valid && vm.isPrivate") + tg-svg(svg-icon="icon-exclamation") + span( + translate="PROJECT.IMPORT.PROJECT_RESTRICTIONS.ACCOUNT_ALLOW_MEMBERS", + translate-values="{'members': vm.limitMembersPrivateProject.max}" + ) + + form(ng-if="vm.mode == 'mail'", ng-submit="vm.assignUser()") + div.create-project-warning + tg-svg(svg-icon="icon-exclamation") + span(translate="PROJECT.IMPORT.WARNING_MAIL_USER") + + fieldset + label( + translate="PROJECT.IMPORT.WRITE_EMAIL_LABEL" + for="user-name" + ) + + .group + input( + name="user-name" + type="text", + data-maxlength="500", + ng-model="vm.userEmail" + ) + button.button-green.submit-button( + type="submit", + title="{{'PROJECT.IMPORT.ASSIGN' | translate}}", + translate="PROJECT.IMPORT.ASSIGN" + ) + + .search-user-mode + p + a( + href="" + ng-click="vm.mode = 'search'" + ) {{'PROJECT.IMPORT.SEARCH_CONTACT' | translate}} + + div(ng-if="vm.mode == 'search'") + fieldset + input( + type="text", + data-maxlength="500", + placeholder="{{'LIGHTBOX.ASSIGNED_TO.SEARCH' | translate}}", + ng-model="vm.usersSearch" + ) + + .assigned-to-list + .user-list-single( + ng-repeat="user in vm.selectableUsers | toMutable | filter: vm.usersSearch | orderBy:'full_name_display' | limitTo: 5 as filteredCollection", + ng-click="vm.selectUser(user)" + ) + .user-list-avatar + a( + href="#" + title="{{'COMMON.ASSIGNED_TO.TITLE' | translate}}" + ) + img(tg-avatar="user") + a.user-list-name( + href="" + title="{{user.full_name_display || user.full_name}}" + ) {{user.full_name_display || user.full_name}} + + .more-users(ng-if="filteredCollection.length >= 5") + span(translate="COMMON.ASSIGNED_TO.TOO_MANY") + + .search-user-mode + p + a( + href="" + ng-click="vm.mode = 'mail'" + ) {{'PROJECT.IMPORT.WRITE_EMAIL' | translate}} diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss new file mode 100644 index 00000000..09c29ed2 --- /dev/null +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss @@ -0,0 +1,54 @@ +tg-select-import-user-lightbox { + .form { + flex-basis: 600px; + flex-grow: 0; + width: 600px; + } + .candidate-user { + align-items: center; + display: flex; + justify-content: center; + padding-bottom: 1.5rem; + p { + margin-bottom: 0; + } + .empty { + margin-right: .5rem; + } + .user-list-avatar { + background-color: $red; + height: 32px; + margin-right: .5rem; + width: 32px; + } + } + .error { + color: $red-light; + text-align: center; + } + .more-users { + padding: .5rem; + text-align: center; + } + .group { + display: flex; + input { + flex-grow: 2; + margin-right: .5rem; + } + .submit-button { + flex-grow: 0; + width: auto; + } + } + .search-user-mode { + border-top: 1px solid $gray-light; + margin-top: 1rem; + padding-top: 1rem; + text-align: center; + } + label { + display: block; + padding-bottom: .5rem; + } +} diff --git a/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee new file mode 100644 index 00000000..aba397cd --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee @@ -0,0 +1,54 @@ +### +# Copyright (C) 2014-2016 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: trello-import-project-form.controller.coffee +### + +class TrelloImportProjectFormController + @.$inject = [ + "tgCurrentUserService" + ] + + constructor: (@currentUserService) -> + @.canCreatePublicProjects = @currentUserService.canCreatePublicProjects() + @.canCreatePrivateProjects = @currentUserService.canCreatePrivateProjects() + + @.projectForm = @.project.toJS() + + @.platformName = "Trello" + @.projectForm.is_private = false + @.projectForm.keepExternalReference = false + + if !@.canCreatePublicProjects.valid && @.canCreatePrivateProjects.valid + @.projectForm.is_private = true + + checkUsersLimit: () -> + @.limitMembersPrivateProject = @currentUserService.canAddMembersPrivateProject(@.members.size) + @.limitMembersPublicProject = @currentUserService.canAddMembersPublicProject(@.members.size) + + saveForm: () -> + @.onSaveProjectDetails({project: Immutable.fromJS(@.projectForm)}) + + canCreateProject: () -> + if @.projectForm.is_private + return @.canCreatePrivateProjects.valid + else + return @.canCreatePublicProjects.valid + + isDisabled: () -> + return !@.canCreateProject() + +angular.module('taigaProjects').controller('TrelloImportProjectFormCtrl', TrelloImportProjectFormController) diff --git a/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee new file mode 100644 index 00000000..f4b29e4a --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee @@ -0,0 +1,40 @@ +### +# Copyright (C) 2014-2016 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: trello-import-project-form.directive.coffee +### + +TrelloImportProjectFormDirective = () -> + return { + link: (scope, elm, attr, ctrl) -> + scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl)) + + templateUrl:"projects/create/trello-import/trello-import-project-form/trello-import-project-form.html", + controller: "TrelloImportProjectFormCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + members: '<', + project: '<', + onSaveProjectDetails: '&', + onCancelForm: '&', + fetchingUsers: '<' + } + } + +TrelloImportProjectFormDirective.$inject = [] + +angular.module("taigaProjects").directive("tgTrelloImportProjectForm", TrelloImportProjectFormDirective) diff --git a/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.jade b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.jade new file mode 100644 index 00000000..576cf489 --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.jade @@ -0,0 +1,25 @@ +.import-project-trello-form.create-project + div(ng-include="'projects/create/import/import-header.html'") + + .spin(tg-loading="vm.fetchingUsers") + + form( + ng-if="!vm.fetchingUsers", + name="projectForm", + ng-submit="vm.saveForm()" + ) + div(ng-include="'projects/create/import-project-form-common/name.html'") + div(ng-include="'projects/create/import-project-form-common/description.html'") + div(ng-include="'projects/create/import-project-form-common/project-privacy.html'") + tg-create-project-restrictions( + is-private="vm.projectForm.is_private" + can-create-public-projects="vm.canCreatePublicProjects" + can-create-private-projects="vm.canCreatePrivateProjects" + ) + tg-create-project-members-restrictions( + is-private="vm.projectForm.is_private" + limit-members-private-project="vm.limitMembersPrivateProject" + limit-members-public-project="vm.limitMembersPublicProject" + ) + div(ng-include="'projects/create/import-project-form-common/links.html'") + div(ng-include="'projects/create/import-project-form-common/actions.html'") diff --git a/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.scss b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.scss new file mode 100644 index 00000000..02491eb7 --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.scss @@ -0,0 +1,3 @@ +.import-project-trello-form { + @include create-project; +} diff --git a/app/modules/projects/create/trello-import/trello-import.controller.coffee b/app/modules/projects/create/trello-import/trello-import.controller.coffee new file mode 100644 index 00000000..0d7782b6 --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import.controller.coffee @@ -0,0 +1,71 @@ +### +# Copyright (C) 2014-2016 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: trello-import.controller.coffee +### + +class TrelloImportController + @.$inject = [ + 'tgTrelloImportService', + '$tgConfirm', + '$translate', + 'tgImportProjectService', + ] + + constructor: (@trelloImportService, @confirm, @translate, @importProjectService) -> + @.project = null + taiga.defineImmutableProperty @, 'projects', () => return @trelloImportService.projects + taiga.defineImmutableProperty @, 'members', () => return @trelloImportService.projectUsers + + startProjectSelector: () -> + @trelloImportService.fetchProjects().then () => @.step = 'project-select-trello' + + onSelectProject: (project) -> + @.step = 'project-form-trello' + @.project = project + @.fetchingUsers = true + + @trelloImportService.fetchUsers(@.project.get('id')).then () => @.fetchingUsers = false + + onSaveProjectDetails: (project) -> + @.project = project + @.step = 'project-members-trello' + + onCancelMemberSelection: () -> + @.step = 'project-form-trello' + + startImport: (users) -> + loader = @confirm.loader(@translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), @translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true) + + loader.start() + + promise = @trelloImportService.importProject( + @.project.get('name'), + @.project.get('description'), + @.project.get('id'), + users, + @.project.get('keepExternalReference'), + @.project.get('is_private') + ) + + @importProjectService.importPromise(promise).then () => loader.stop() + + submitUserSelection: (users) -> + @.startImport(users) + + return null + +angular.module('taigaProjects').controller('TrelloImportCtrl', TrelloImportController) diff --git a/app/modules/projects/create/trello-import/trello-import.controller.spec.coffee b/app/modules/projects/create/trello-import/trello-import.controller.spec.coffee new file mode 100644 index 00000000..c93a3274 --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import.controller.spec.coffee @@ -0,0 +1,176 @@ +### +# Copyright (C) 2014-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: trello-import.controller.spec.coffee +### + +describe "TrelloImportCtrl", -> + $provide = null + $controller = null + mocks = {} + + _mockCurrentUserService = -> + mocks.currentUserService = { + canAddMembersPrivateProject: sinon.stub() + canAddMembersPublicProject: sinon.stub() + } + + $provide.value("tgCurrentUserService", mocks.currentUserService) + + + _mockImportProjectService = -> + mocks.importProjectService = { + importPromise: sinon.stub() + } + + $provide.value("tgImportProjectService", mocks.importProjectService) + + _mockTrelloImportService = -> + mocks.trelloService = { + fetchProjects: sinon.stub(), + fetchUsers: sinon.stub(), + importProject: sinon.stub() + } + + $provide.value("tgTrelloImportService", mocks.trelloService) + + _mockConfirm = -> + mocks.confirm = { + loader: sinon.stub() + } + + $provide.value("$tgConfirm", mocks.confirm) + + _mockTranslate = -> + mocks.translate = { + instant: sinon.stub() + } + + $provide.value("$translate", mocks.translate) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockTrelloImportService() + _mockConfirm() + _mockTranslate() + _mockImportProjectService() + _mockCurrentUserService() + + return null + + _inject = -> + inject (_$controller_) -> + $controller = _$controller_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "start project selector", () -> + ctrl = $controller("TrelloImportCtrl") + + mocks.trelloService.fetchProjects.promise().resolve() + + ctrl.startProjectSelector().then () -> + expect(ctrl.step).to.be.equal('project-select-trello') + expect(mocks.trelloService.fetchProjects).have.been.called + + it "on select project reload projects", (done) -> + project = Immutable.fromJS({ + id: 1, + name: "project-name" + }) + + mocks.trelloService.fetchUsers.promise().resolve() + + ctrl = $controller("TrelloImportCtrl") + + promise = ctrl.onSelectProject(project) + + expect(ctrl.fetchingUsers).to.be.true + + promise.then () -> + expect(ctrl.fetchingUsers).to.be.false + expect(ctrl.step).to.be.equal('project-form-trello') + expect(ctrl.project).to.be.equal(project) + done() + + it "on save project details reload users", () -> + project = Immutable.fromJS({ + id: 1, + name: "project-name" + }) + + ctrl = $controller("TrelloImportCtrl") + ctrl.onSaveProjectDetails(project) + + expect(ctrl.step).to.be.equal('project-members-trello') + expect(ctrl.project).to.be.equal(project) + + + it "on select user init import", (done) -> + users = Immutable.fromJS([ + { + id: 0 + }, + { + id: 1 + }, + { + id: 2 + } + ]) + + loaderObj = { + start: sinon.spy(), + update: sinon.stub(), + stop: sinon.spy() + } + + projectResult = { + id: 3, + name: "name" + } + + mocks.confirm.loader.returns(loaderObj) + + mocks.importProjectService.importPromise.promise().resolve() + + ctrl = $controller("TrelloImportCtrl") + ctrl.project = Immutable.fromJS({ + id: 1, + name: 'project-name', + description: 'project-description', + keepExternalReference: false, + is_private: true + }) + + + mocks.trelloService.importProject.promise().resolve(projectResult) + + ctrl.startImport(users).then () -> + expect(loaderObj.start).have.been.called + expect(loaderObj.stop).have.been.called + expect(mocks.trelloService.importProject).have.been.calledWith('project-name', 'project-description', 1, users, false, true) + + done() diff --git a/app/modules/projects/create/trello-import/trello-import.directive.coffee b/app/modules/projects/create/trello-import/trello-import.directive.coffee new file mode 100644 index 00000000..77fca833 --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import.directive.coffee @@ -0,0 +1,35 @@ +### +# Copyright (C) 2014-2016 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: trello-import.directive.coffee +### + +TrelloImportDirective = () -> + return { + link: (scope, elm, attrs, ctrl) -> + ctrl.startProjectSelector() + templateUrl:"projects/create/trello-import/trello-import.html", + controller: "TrelloImportCtrl", + controllerAs: "vm", + bindToController: true, + scope: { + onCancel: '&' + } + } + +TrelloImportDirective.$inject = [] + +angular.module("taigaProjects").directive("tgTrelloImport", TrelloImportDirective) diff --git a/app/modules/projects/create/trello-import/trello-import.jade b/app/modules/projects/create/trello-import/trello-import.jade new file mode 100644 index 00000000..9702988d --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import.jade @@ -0,0 +1,27 @@ +tg-import-project-selector( + logo="/#{v}/images/import-logos/trello.png" + search="{{ 'PROJECT.IMPORT.TRELLO.CHOOSE_BOARD' | translate }}" + projects="vm.projects" + on-cancel="vm.onCancel()" + on-select-project="vm.onSelectProject(project)" + ng-if="vm.step == 'project-select-trello'" +) + +tg-trello-import-project-form( + ng-if="vm.step == 'project-form-trello'" + project="vm.project" + members="vm.members" + fetching-users="vm.fetchingUsers" + on-save-project-details="vm.onSaveProjectDetails(project)" + on-cancel-form="vm.step = 'project-select-trello'" +) + +tg-import-project-members( + ng-if="vm.step == 'project-members-trello'" + platform="Trello" + logo="/#{v}/images/import-logos/trello.png" + project="vm.project" + members="vm.members" + on-submit="vm.submitUserSelection(users)" + on-cancel="vm.onCancelMemberSelection()" +) diff --git a/app/modules/projects/create/trello-import/trello-import.service.coffee b/app/modules/projects/create/trello-import/trello-import.service.coffee new file mode 100644 index 00000000..aa8a2ab3 --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import.service.coffee @@ -0,0 +1,56 @@ +### +# Copyright (C) 2014-2016 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: trello-import.service.coffee +### + +class TrelloImportService extends taiga.Service + @.$inject = [ + 'tgResources' + ] + + constructor: (@resources) -> + @.projects = Immutable.List() + @.projectUsers = Immutable.List() + @.token = null + + setToken: (token) -> + @.token = token + + fetchProjects: () -> + @resources.trelloImporter.listProjects(@.token).then (projects) => @.projects = projects + + fetchUsers: (projectId) -> + @resources.trelloImporter.listUsers(@.token, projectId).then (users) => @.projectUsers = users + + importProject: (name, description, projectId, userBindings, keepExternalReference, isPrivate) -> + return @resources.trelloImporter.importProject(@.token, name, description, projectId, userBindings, keepExternalReference, isPrivate) + + getAuthUrl: () -> + return new Promise (resolve) => + @resources.trelloImporter.getAuthUrl().then (response) => + @.authUrl = response.data.url + resolve(@.authUrl) + + authorize: (verifyCode) -> + return new Promise (resolve, reject) => + @resources.trelloImporter.authorize(verifyCode).then ((response) => + @.token = response.data.token + resolve(@.token) + ), (error) -> + reject(new Error(error.status)) + +angular.module("taigaProjects").service("tgTrelloImportService", TrelloImportService) diff --git a/app/modules/projects/create/trello-import/trello-import.service.spec.coffee b/app/modules/projects/create/trello-import/trello-import.service.spec.coffee new file mode 100644 index 00000000..91bd4c78 --- /dev/null +++ b/app/modules/projects/create/trello-import/trello-import.service.spec.coffee @@ -0,0 +1,115 @@ +### +# Copyright (C) 2014-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: trello-import.controller.spec.coffee +### + +describe "tgTrelloImportService", -> + $provide = null + service = null + mocks = {} + + _mockResources = -> + mocks.resources = { + trelloImporter: { + listProjects: sinon.stub(), + listUsers: sinon.stub(), + importProject: sinon.stub(), + getAuthUrl: sinon.stub(), + authorize: sinon.stub() + } + } + + $provide.value("tgResources", mocks.resources) + + _mocks = -> + module (_$provide_) -> + $provide = _$provide_ + + _mockResources() + + return null + + _inject = -> + inject (_tgTrelloImportService_) -> + service = _tgTrelloImportService_ + + _setup = -> + _mocks() + _inject() + + beforeEach -> + module "taigaProjects" + + _setup() + + it "fetch projects", (done) -> + service.setToken(123) + mocks.resources.trelloImporter.listProjects.withArgs(123).promise().resolve('projects') + + service.fetchProjects().then () -> + service.projects = "projects" + done() + + it "fetch user", (done) -> + service.setToken(123) + projectId = 3 + mocks.resources.trelloImporter.listUsers.withArgs(123, projectId).promise().resolve('users') + + service.fetchUsers(projectId).then () -> + service.projectUsers = 'users' + done() + + it "import project", () -> + service.setToken(123) + projectId = 2 + + service.importProject(projectId, true, true ,true) + + expect(mocks.resources.trelloImporter.importProject).to.have.been.calledWith(123, projectId, true, true, true) + + it "get auth url", (done) -> + service.setToken(123) + projectId = 3 + + response = { + data: { + url: "url123" + } + } + + mocks.resources.trelloImporter.getAuthUrl.promise().resolve(response) + + service.getAuthUrl().then (url) -> + expect(url).to.be.equal("url123") + done() + + it "authorize", (done) -> + service.setToken(123) + projectId = 3 + verifyCode = 12345 + + response = { + data: { + token: "token123" + } + } + + mocks.resources.trelloImporter.authorize.withArgs(verifyCode).promise().resolve(response) + + service.authorize(verifyCode).then (token) -> + expect(token).to.be.equal("token123") + done() diff --git a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee new file mode 100644 index 00000000..7c34379c --- /dev/null +++ b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee @@ -0,0 +1,41 @@ +### +# Copyright (C) 2014-2016 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: warning-user-import.directive.coffee +### + +WarningUserImportDirective = (lightboxService, lightboxKeyboardNavigationService) -> + return { + link: (scope, el, attr) -> + scope.$watch 'visible', (visible) -> + if visible && !el.hasClass('open') + lightboxService.open(el, scope.onClose).then -> + el.find('input').focus() + lightboxKeyboardNavigationService.init(el) + else if !visible && el.hasClass('open') + lightboxService.close(el) + + templateUrl:"projects/create/warning-user-import-lightbox/warning-user-import-lightbox.html", + scope: { + visible: '<', + onClose: '&', + onConfirm: '&' + } + } + +WarningUserImportDirective.$inject = ['lightboxService', 'lightboxKeyboardNavigationService'] + +angular.module("taigaProjects").directive("tgWarningUserImportLightbox", WarningUserImportDirective) diff --git a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.jade b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.jade new file mode 100644 index 00000000..1a280aee --- /dev/null +++ b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.jade @@ -0,0 +1,8 @@ +tg-lightbox-close(on-close="onClose()") + +.create-project.import-project + h1(translate="PROJECT.IMPORT.WARNING.TITLE") + p(translate="PROJECT.IMPORT.WARNING.DESCRIPTION") + .actions + button.button.button-gray(translate="PROJECT.IMPORT.WARNING.CHECK", ng-click="onClose()") + button.button.button-green(type="submit", translate="PROJECT.IMPORT.IMPORT", ng-click="onConfirm()") diff --git a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.scss b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.scss new file mode 100644 index 00000000..7d2a25d5 --- /dev/null +++ b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.scss @@ -0,0 +1,9 @@ +tg-warning-user-import-lightbox { + .actions { + display: flex; + justify-content: center; + button:first-child { + margin-right: .5rem; + } + } +} diff --git a/app/modules/projects/listing/projects-listing.controller.coffee b/app/modules/projects/listing/projects-listing.controller.coffee index d7a60304..a78b765c 100644 --- a/app/modules/projects/listing/projects-listing.controller.coffee +++ b/app/modules/projects/listing/projects-listing.controller.coffee @@ -19,14 +19,10 @@ class ProjectsListingController @.$inject = [ - "tgCurrentUserService", - "tgProjectsService", + "tgCurrentUserService" ] - constructor: (@currentUserService, @projectsService) -> + constructor: (@currentUserService) -> taiga.defineImmutableProperty(@, "projects", () => @currentUserService.projects.get("all")) - newProject: -> - @projectsService.newProject() - angular.module("taigaProjects").controller("ProjectsListing", ProjectsListingController) diff --git a/app/modules/projects/listing/projects-listing.controller.spec.coffee b/app/modules/projects/listing/projects-listing.controller.spec.coffee index d7a3f00d..7331624a 100644 --- a/app/modules/projects/listing/projects-listing.controller.spec.coffee +++ b/app/modules/projects/listing/projects-listing.controller.spec.coffee @@ -43,16 +43,11 @@ describe "ProjectsListingController", -> _mockProjectsService = () -> stub = sinon.stub() - mocks.projectsService = { - newProject: sinon.stub() - } - provide.value "tgProjectsService", mocks.projectsService _mocks = () -> module ($provide) -> provide = $provide - _mockProjectsService() _mockCurrentUserService() return null @@ -70,11 +65,3 @@ describe "ProjectsListingController", -> $scope: {} expect(pageCtrl.projects).to.be.equal(projects.get('all')) - - it "new project", () -> - pageCtrl = controller "ProjectsListing", - $scope: {} - - pageCtrl.newProject() - - expect(mocks.projectsService.newProject).to.be.calledOnce diff --git a/app/modules/projects/listing/projects-listing.jade b/app/modules/projects/listing/projects-listing.jade index 096af8b6..9c72475b 100644 --- a/app/modules/projects/listing/projects-listing.jade +++ b/app/modules/projects/listing/projects-listing.jade @@ -4,17 +4,10 @@ .create-options a.create-project-btn.button-green( href="#" - ng-click="vm.newProject()" + tg-nav="create-project" title="{{'PROJECT.NAVIGATION.ACTION_CREATE_PROJECT' | translate}}" translate="PROJECT.NAVIGATION.ACTION_CREATE_PROJECT" ) - span(tg-import-project-button) - a.button-blackish.import-project-button( - href="" - title="{{'PROJECT.NAVIGATION.TITLE_IMPORT_PROJECT' | translate}}" - ) - tg-svg(svg-icon="icon-upload") - input.import-file.hidden(type="file") section.project-list-section .project-list diff --git a/app/modules/projects/projects.service.coffee b/app/modules/projects/projects.service.coffee index 3c1415d5..c3ce4dae 100644 --- a/app/modules/projects/projects.service.coffee +++ b/app/modules/projects/projects.service.coffee @@ -22,9 +22,15 @@ groupBy = @.taiga.groupBy class ProjectsService extends taiga.Service - @.$inject = ["tgResources", "$projectUrl", "tgLightboxFactory"] + @.$inject = ["tgResources", "$projectUrl"] - constructor: (@rs, @projectUrl, @lightboxFactory) -> + constructor: (@rs, @projectUrl) -> + + create: (data) -> + return @rs.projects.create(data) + + duplicate: (projectId, data) -> + return @rs.projects.duplicate(projectId, data) getProjectBySlug: (projectSlug) -> return @rs.projects.getProjectBySlug(projectSlug) @@ -46,11 +52,6 @@ class ProjectsService extends taiga.Service return project - newProject: -> - @lightboxFactory.create("tg-lb-create-project", { - "class": "wizard-create-project lightbox" - }) - bulkUpdateProjectsOrder: (sortData) -> return @rs.projects.bulkUpdateOrder(sortData) diff --git a/app/modules/projects/projects.service.spec.coffee b/app/modules/projects/projects.service.spec.coffee index 80a98389..11b15c05 100644 --- a/app/modules/projects/projects.service.spec.coffee +++ b/app/modules/projects/projects.service.spec.coffee @@ -46,12 +46,6 @@ describe "tgProjectsService", -> provide.value "$projectUrl", mocks.projectUrl - _mockLightboxFactory = () -> - mocks.lightboxFactory = { - create: sinon.stub() - } - - provide.value "tgLightboxFactory", mocks.lightboxFactory _inject = (callback) -> inject (_$q_, _$rootScope_, _tgProjectsService_) -> @@ -65,7 +59,6 @@ describe "tgProjectsService", -> provide = $provide _mockResources() _mockProjectUrl() - _mockLightboxFactory() _mockAuthService() return null @@ -75,13 +68,6 @@ describe "tgProjectsService", -> _mocks() _inject() - it "newProject, create the wizard lightbox", () -> - projectsService.newProject() - - expect(mocks.lightboxFactory.create).to.have.been.calledWith("tg-lb-create-project", { - "class": "wizard-create-project lightbox" - }) - it "bulkUpdateProjectsOrder and then fetch projects again", () -> projects_order = [ {"id": 8}, diff --git a/app/modules/resources/importers-resource.service.coffee b/app/modules/resources/importers-resource.service.coffee new file mode 100644 index 00000000..ed425544 --- /dev/null +++ b/app/modules/resources/importers-resource.service.coffee @@ -0,0 +1,193 @@ +### +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino Garcia +# Copyright (C) 2014-2016 David Barragán Merino +# Copyright (C) 2014-2016 Alejandro Alonso +# Copyright (C) 2014-2016 Juan Francisco Alcántara +# Copyright (C) 2014-2016 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/resources/importers.coffee +### + + +taiga = @.taiga + +TrelloResource = (urlsService, http) -> + service = {} + + service.getAuthUrl = (url) -> + url = urlsService.resolve("importers-trello-auth-url") + return http.get(url) + + service.authorize = (verifyCode) -> + url = urlsService.resolve("importers-trello-authorize") + return http.post(url, {code: verifyCode}) + + service.listProjects = (token) -> + url = urlsService.resolve("importers-trello-list-projects") + return http.post(url, {token: token}).then (response) -> Immutable.fromJS(response.data) + + service.listUsers = (token, projectId) -> + url = urlsService.resolve("importers-trello-list-users") + return http.post(url, {token: token, project: projectId}).then (response) -> Immutable.fromJS(response.data) + + service.importProject = (token, name, description, projectId, userBindings, keepExternalReference, isPrivate) -> + url = urlsService.resolve("importers-trello-import-project") + data = { + token: token, + name: name, + description: description, + project: projectId, + users_bindings: userBindings.toJS(), + keep_external_reference: keepExternalReference, + is_private: isPrivate, + template: "kanban", + } + return http.post(url, data) + + return () -> + return {"trelloImporter": service} + +TrelloResource.$inject = ["$tgUrls", "$tgHttp"] + +JiraResource = (urlsService, http) -> + service = {} + + service.getAuthUrl = (jira_url) -> + url = urlsService.resolve("importers-jira-auth-url") + "?url=" + jira_url + return http.get(url) + + service.authorize = () -> + url = urlsService.resolve("importers-jira-authorize") + return http.post(url) + + service.listProjects = (jira_url, token) -> + url = urlsService.resolve("importers-jira-list-projects") + return http.post(url, {url: jira_url, token: token}).then (response) -> Immutable.fromJS(response.data) + + service.listUsers = (jira_url, token, projectId) -> + url = urlsService.resolve("importers-jira-list-users") + return http.post(url, {url: jira_url, token: token, project: projectId}).then (response) -> Immutable.fromJS(response.data) + + service.importProject = (jira_url, token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType) -> + url = urlsService.resolve("importers-jira-import-project") + projectTemplate = "kanban" + if projectType != "kanban" + projectTemplate = "scrum" + + data = { + url: jira_url, + token: token, + name: name, + description: description, + project: projectId, + users_bindings: userBindings.toJS(), + keep_external_reference: keepExternalReference, + is_private: isPrivate, + project_type: projectType, + importer_type: importerType, + template: projectTemplate, + } + return http.post(url, data) + + return () -> + return {"jiraImporter": service} + +JiraResource.$inject = ["$tgUrls", "$tgHttp"] + +GithubResource = (urlsService, http) -> + service = {} + + service.getAuthUrl = (callbackUri) -> + url = urlsService.resolve("importers-github-auth-url") + "?uri=" + callbackUri + return http.get(url) + + service.authorize = (code) -> + url = urlsService.resolve("importers-github-authorize") + return http.post(url, {code: code}) + + service.listProjects = (token) -> + url = urlsService.resolve("importers-github-list-projects") + return http.post(url, {token: token}).then (response) -> Immutable.fromJS(response.data) + + service.listUsers = (token, projectId) -> + url = urlsService.resolve("importers-github-list-users") + return http.post(url, {token: token, project: projectId}).then (response) -> Immutable.fromJS(response.data) + + service.importProject = (token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) -> + url = urlsService.resolve("importers-github-import-project") + + data = { + token: token, + name: name, + description: description, + project: projectId, + users_bindings: userBindings.toJS(), + keep_external_reference: keepExternalReference, + is_private: isPrivate, + template: projectType, + } + return http.post(url, data) + + return () -> + return {"githubImporter": service} + +GithubResource.$inject = ["$tgUrls", "$tgHttp"] + +AsanaResource = (urlsService, http) -> + service = {} + + service.getAuthUrl = () -> + url = urlsService.resolve("importers-asana-auth-url") + return http.get(url) + + service.authorize = (code) -> + url = urlsService.resolve("importers-asana-authorize") + return http.post(url, {code: code}) + + service.listProjects = (token) -> + url = urlsService.resolve("importers-asana-list-projects") + return http.post(url, {token: token}).then (response) -> Immutable.fromJS(response.data) + + service.listUsers = (token, projectId) -> + url = urlsService.resolve("importers-asana-list-users") + return http.post(url, {token: token, project: projectId}).then (response) -> Immutable.fromJS(response.data) + + service.importProject = (token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) -> + url = urlsService.resolve("importers-asana-import-project") + + data = { + token: token, + name: name, + description: description, + project: projectId, + users_bindings: userBindings.toJS(), + keep_external_reference: keepExternalReference, + is_private: isPrivate, + template: projectType, + } + return http.post(url, data) + + return () -> + return {"asanaImporter": service} + +AsanaResource.$inject = ["$tgUrls", "$tgHttp"] + +module = angular.module("taigaResources2") +module.factory("tgTrelloImportResource", TrelloResource) +module.factory("tgJiraImportResource", JiraResource) +module.factory("tgGithubImportResource", GithubResource) +module.factory("tgAsanaImportResource", AsanaResource) diff --git a/app/modules/resources/projects-resource.service.coffee b/app/modules/resources/projects-resource.service.coffee index 82942b37..7b306c1b 100644 --- a/app/modules/resources/projects-resource.service.coffee +++ b/app/modules/resources/projects-resource.service.coffee @@ -22,6 +22,28 @@ pagination = () -> Resource = (urlsService, http, paginateResponseService) -> service = {} + service.create = (data) -> + url = urlsService.resolve('projects') + + return http.post(url, JSON.stringify(data)) + .then (result) => return Immutable.fromJS(result.data) + + service.duplicate = (projectId, data) -> + + url = urlsService.resolve("projects") + url = "#{url}/#{projectId}/duplicate" + + members = data.users.map (member) => {"id": member} + + params = { + "name": data.name, + "description": data.description, + "is_private": data.is_private, + "users": members + } + + return http.post(url, params) + service.getProjects = (params = {}, pagination = true) -> url = urlsService.resolve("projects") diff --git a/app/modules/resources/resources.coffee b/app/modules/resources/resources.coffee index f55dd7cc..6c1dabb6 100644 --- a/app/modules/resources/resources.coffee +++ b/app/modules/resources/resources.coffee @@ -28,7 +28,11 @@ services = [ "tgAttachmentsResource", "tgStatsResource", "tgWikiHistory", - "tgEpicsResource" + "tgEpicsResource", + "tgTrelloImportResource", + "tgJiraImportResource", + "tgGithubImportResource", + "tgAsanaImportResource" ] Resources = ($injector) -> @@ -39,7 +43,7 @@ Resources = ($injector) -> for serviceProperty in Object.keys(service) if @[serviceProperty] - console.warm("repeated resource " + serviceProperty) + console.warn("repeated resource " + serviceProperty) @[serviceProperty] = service[serviceProperty] diff --git a/app/modules/services/current-user.service.coffee b/app/modules/services/current-user.service.coffee index 60985801..39d7f3e1 100644 --- a/app/modules/services/current-user.service.coffee +++ b/app/modules/services/current-user.service.coffee @@ -121,7 +121,13 @@ class CurrentUserService canCreatePrivateProjects: () -> user = @.getUser() if user.get('max_private_projects') != null && user.get('total_private_projects') >= user.get('max_private_projects') - return {valid: false, reason: 'max_private_projects', type: 'private_project'} + return { + valid: false, + reason: 'max_private_projects', + type: 'private_project', + current: user.get('total_private_projects'), + max: user.get('max_private_projects') + } return {valid: true} @@ -129,7 +135,41 @@ class CurrentUserService user = @.getUser() if user.get('max_public_projects') != null && user.get('total_public_projects') >= user.get('max_public_projects') - return {valid: false, reason: 'max_public_projects', type: 'public_project'} + return { + valid: false, + reason: 'max_public_projects', + type: 'public_project', + current: user.get('total_public_projects'), + max: user.get('max_public_projects') + } + + return {valid: true} + + canAddMembersPublicProject: (totalMembers) -> + user = @.getUser() + + if user.get('max_memberships_public_projects') != null && totalMembers > user.get('max_memberships_public_projects') + return { + valid: false, + reason: 'max_members_public_projects', + type: 'public_project', + current: totalMembers, + max: user.get('max_memberships_public_projects') + } + + return {valid: true} + + canAddMembersPrivateProject: (totalMembers) -> + user = @.getUser() + + if user.get('max_memberships_private_projects') != null && totalMembers > user.get('max_memberships_private_projects') + return { + valid: false, + reason: 'max_members_private_projects', + type: 'private_project', + current: totalMembers, + max: user.get('max_memberships_private_projects') + } return {valid: true} @@ -139,15 +179,14 @@ class CurrentUserService result = @.canCreatePrivateProjects() return result if !result.valid - if user.get('max_memberships_private_projects') != null && project.get('total_memberships') > user.get('max_memberships_private_projects') - return {valid: false, reason: 'max_members_private_projects', type: 'private_project'} - + membersResult = @.canAddMembersPrivateProject(project.get('total_memberships')) + return membersResult if !membersResult.valid else result = @.canCreatePublicProjects() return result if !result.valid - if user.get('max_memberships_public_projects') != null && project.get('total_memberships') > user.get('max_memberships_public_projects') - return {valid: false, reason: 'max_members_public_projects', type: 'public_project'} + membersResult = @.canAddMembersPublicProject(project.get('total_memberships')) + return membersResult if !membersResult.valid return {valid: true} diff --git a/app/modules/services/current-user.service.spec.coffee b/app/modules/services/current-user.service.spec.coffee index 96f4fff2..b088c255 100644 --- a/app/modules/services/current-user.service.spec.coffee +++ b/app/modules/services/current-user.service.spec.coffee @@ -219,7 +219,9 @@ describe "tgCurrentUserService", -> expect(result).to.be.eql({ valid: false, reason: 'max_private_projects', - type: 'private_project' + type: 'private_project', + current: 1, + max: 1 }) it "the user can create private projects", () -> @@ -254,7 +256,9 @@ describe "tgCurrentUserService", -> expect(result).to.be.eql({ valid: false, reason: 'max_public_projects', - type: 'public_project' + type: 'public_project', + current: 1, + max: 1 }) it "the user can create public projects", () -> @@ -321,7 +325,9 @@ describe "tgCurrentUserService", -> expect(result).to.be.eql({ valid: false reason: 'max_public_projects' - type: 'public_project' + type: 'public_project', + current: 1, + max: 1 }) @@ -348,7 +354,9 @@ describe "tgCurrentUserService", -> expect(result).to.be.eql({ valid: false reason: 'max_members_public_projects' - type: 'public_project' + type: 'public_project', + current: 5, + max: 4 }) it "the user can own private project", () -> @@ -398,7 +406,9 @@ describe "tgCurrentUserService", -> expect(result).to.be.eql({ valid: false reason: 'max_private_projects' - type: 'private_project' + type: 'private_project', + current: 1, + max: 1 }) @@ -425,5 +435,7 @@ describe "tgCurrentUserService", -> expect(result).to.be.eql({ valid: false reason: 'max_members_private_projects' - type: 'private_project' + type: 'private_project', + current: 5, + max: 4 }) diff --git a/app/partials/project/wizard-create-project.jade b/app/partials/project/wizard-create-project.jade deleted file mode 100644 index 9015795a..00000000 --- a/app/partials/project/wizard-create-project.jade +++ /dev/null @@ -1,84 +0,0 @@ -tg-lightbox-close -form - header - h1.title(translate="WIZARD.SECTION_TITLE_CREATE_PROJECT") - .subtitle( - translate="WIZARD.CREATE_PROJECT_TEXT" - role="presentation" - ) - section.template-option - .template-selector-title - legend(translate="WIZARD.CHOOSE_TEMPLATE") - .template-selector - fieldset(ng-repeat="template in templates") - input( - type="radio" - name="template" - id="template-{{ template.id }}" - ng-value='template.id' - ng-model="data.creation_template" - data-required="true" - ) - label.template-label(for="template-{{ template.id }}") - tg-svg(svg-icon="{{'icon-'+template.slug}}") - span.template-name {{ template.name }} - .template-data - legend(translate="WIZARD.PROJECT_DETAILS") - fieldset - input( - type="text" - name="name" - ng-model="data.name" - data-required="true" - placeholder="{{'COMMON.FIELDS.NAME' | translate}}" - maxlength="45" - aria-hidden="true" - ) - fieldset - textarea( - name="description" - ng-model="data.description" - data-required="true" - ng-attr-placeholder="{{'COMMON.FIELDS.DESCRIPTION' | translate}}" - ) - .template-privacity - fieldset - input( - type="radio" - name="is_private" - id="template-public" - data-required="true" - aria-hidden="true" - ng-value="false" - ng-model="data.is_private" - required - ng-disabled="!canCreatePublicProjects.valid" - ng-checked="canCreatePublicProjects.valid" - ) - label.template-privacity(for="template-public") - tg-svg(svg-icon="icon-discover") - span(translate="WIZARD.PUBLIC_PROJECT") - fieldset - input( - type="radio" - name="is_private" - id="template-private" - data-required="true" - ng-value="true" - ng-model="data.is_private" - aria-hidden="true" - required - ng-disabled="!canCreatePrivateProjects.valid" - ng-checked="!canCreatePublicProjects.valid" - ) - label.template-privacity(for="template-private") - tg-svg(svg-icon="icon-lock") - span(translate="WIZARD.PRIVATE_PROJECT") - - tg-create-project-restriction - - button.button-green.submit-button( - translate="WIZARD.CREATE_PROJECT" - title="{{'WIZARD.CREATE_PROJECT' | translate}}" - ng-click="" - ) diff --git a/app/partials/project/wizard-restrictions.jade b/app/partials/project/wizard-restrictions.jade deleted file mode 100644 index fb80f608..00000000 --- a/app/partials/project/wizard-restrictions.jade +++ /dev/null @@ -1,7 +0,0 @@ -div.create-warning(ng-if="!canCreatePrivateProjects.valid && canCreatePrivateProjects.reason == 'max_private_projects'") - tg-svg(svg-icon="icon-exclamation") - span {{ 'WIZARD.MAX_PRIVATE_PROJECTS' | translate }} - -div.create-warning(ng-if="!canCreatePublicProjects.valid && canCreatePublicProjects.reason == 'max_public_projects'") - tg-svg(svg-icon="icon-exclamation") - span {{ 'WIZARD.MAX_PUBLIC_PROJECTS' | translate }} diff --git a/app/styles/dependencies/mixins/btn-group.scss b/app/styles/dependencies/mixins/btn-group.scss new file mode 100644 index 00000000..af18c9e2 --- /dev/null +++ b/app/styles/dependencies/mixins/btn-group.scss @@ -0,0 +1,45 @@ +@mixin btn-group { + display: flex; + fieldset { + &:first-child { + label { + border-radius: .25rem 0 0 .25rem; + } + } + &:last-child { + label { + border-radius: 0 .25rem .25rem 0; + } + } + } + label { + align-items: center; + background: $mass-white; + cursor: pointer; + display: flex; + justify-content: center; + text-align: center; + padding: .75rem; + text-transform: uppercase; + &:hover { + background: darken($mass-white, 5%); + transition: background .2s linear; + } + .icon { + margin-right: .25rem; + } + } + input { + &:checked+label { + background: darken($mass-white, 10%); + @include font-type(bold); + } + &:disabled+label { + cursor: not-allowed; + color: lighten($gray-light, 15%); + .icon { + color: lighten($gray-light, 15%); + } + } + } +} diff --git a/app/styles/dependencies/mixins/create.scss b/app/styles/dependencies/mixins/create.scss new file mode 100644 index 00000000..cdf763c5 --- /dev/null +++ b/app/styles/dependencies/mixins/create.scss @@ -0,0 +1,238 @@ +@mixin create-project { + @include centered; + max-width: 800px; + + fieldset { + margin-bottom: 1rem; + } + + label { + @include font-size(small); + display: block; + margin-bottom: 0.25rem; + + .mumble { + @include font-type(light); + margin-left: 0.25rem; + } + } + + &-check { + @include font-type(bold); + position: relative; + + span { + display: block; + } + + .description { + @include font-type(normal); + } + + .check { + position: absolute; + right: 0; + top: 0; + } + } + + &-description, + &-title { + text-align: center; + } + + &-title { + align-items: center; + display: flex; + justify-content: center; + margin-bottom: 0; + + tg-svg { + display: flex; + } + + .icon { + @include svg-size(1.5rem); + margin-right: 0.5rem; + vertical-align: middle; + } + } + + &-description { + color: $gray-light; + margin-bottom: 2rem; + } + + &-limit { + @include font-type(light); + @include font-size(small); + color: $gray; + } + + &-import-type { + @include btn-group; + + input { + display: none; + } + + label { + background: $mass-white; + } + } + + &-privacity { + @include btn-group; + + input { + display: none; + } + + label { + background: $mass-white; + } + } + + &-type { + @include font-type(bold); + align-items: center; + display: flex; + justify-content: center; + margin-bottom: 2rem; + text-transform: uppercase; + + span { + margin-left: 0.5rem; + } + } + + &-selector { + a { + align-items: center; + border-bottom: 1px solid $whitish; + color: $grayer; + cursor: pointer; + display: flex; + justify-content: center; + position: relative; + } + li { + &:hover { + background: rgba($primary, .1); + transition: background 0.3s ease-in; + } + + &:first-child { + border-top: 1px solid $whitish; + } + } + + &-icon { + align-self: flex-start; + padding: 1.5rem 1rem; + + .icon { + @include svg-size(2.25rem); + } + } + + &-template-wrapper { + flex: 1; + padding: 1.25rem; + } + + &-template { + @include font-type(bold); + text-transform: uppercase; + } + + &-description { + @include font-type(light); + } + + &-long-description { + margin-top: 1rem; + max-height: 120px; + overflow: hidden; + transition: all 0.3s 0.2s cubic-bezier(0, 0, .53, 1.32); + + &.ng-hide { + line-height: 0; + max-height: 0; + } + } + + &-question { + position: absolute; + right: 1.5rem; + top: 1.5rem; + + &:hover { + svg { + fill: $primary; + transition: fill 0.2s linear; + } + } + + svg { + @include svg-size(1.2rem); + fill: $grayer; + } + } + + p { + margin-bottom: 0; + } + } + + &-action { + display: flex; + margin: 3rem 0 0; + + button { + @include font-size(large); + padding: 0.75rem; + } + + &-submit { + flex: 4; + margin-left: 1rem; + } + + &-back, + &-cancel { + color: currentColor; + + &:hover { + color: $primary-light; + } + } + + &-cancel { + flex: 1; + } + + &-back { + width: 10%; + } + } + &-warning { + @include font-size(small); + padding: 1rem; + text-align: center; + .icon-exclamation { + fill: $red-light; + margin-right: .5rem; + vertical-align: middle; + } + a { + color: $primary; + display: inline-block; + margin-left: .25rem; + } + } + .spin { + text-align: center; + width: 100%; + } +} diff --git a/app/styles/dependencies/mixins/import.scss b/app/styles/dependencies/mixins/import.scss new file mode 100644 index 00000000..ffa4a605 --- /dev/null +++ b/app/styles/dependencies/mixins/import.scss @@ -0,0 +1,189 @@ +@mixin import-project-selector { + @include centered; + max-width: 800px; + .import-project-selector { + + &-service { + img { + margin: 1rem auto; + width: 4rem; + display: block; + } + } + + &-filter { + align-items: center; + background: $whitish; + display: flex; + padding: .5rem; + + input { + background: $mass-white; + border: 0; + flex: 1; + padding: .5rem; + } + + svg { + @include svg-size(1rem); + fill: $gray; + margin: 0 1rem; + } + } + + &-title { + border-bottom: 1px solid $whitish; + padding: 1rem; + + &:hover { + background: rgba($primary, .1); + cursor: pointer; + } + } + } +} +@mixin import-members { + @include centered; + max-width: 800px; + .avatar { + width: 48px; + } + &-title { + @include font-size(normal); + @include font-type(bold); + margin-bottom: 0; + } + + &-system { + display: flex; + justify-content: space-between; + margin: 1rem 0 0; + padding: .5rem 0; + + img { + width: 100%; + } + } + + &-logo { + max-height: 3rem; + max-width: 3rem; + } + + &-row { + align-items: center; + border-bottom: 1px solid $whitish; + display: flex; + padding: .5rem 0; + justify-content: space-between; + + &:first-child { + border-top: 1px solid $whitish; + } + + &:last-child { + border: 0; + } + + &:hover { + .import-project-members-delete { + opacity: 1; + transition: all .2s ease-in; + } + } + } + + &-single { + align-items: center; + display: flex; + } + + &-username { + margin-left: 1rem; + } + + .avatar { + &.empty { + background-color: $whitish; + line-height: 3rem; + text-align: center; + width: 3rem; + } + } + + &-actions { + align-items: center; + display: flex; + } + &-delete { + background: transparent; + opacity: 0; + padding: .25rem .5rem; + svg { + @include svg-size(.75rem); + fill: $red; + } + } + &-match { + color: $gray-light; + button { + border-radius: 50%; + padding: .25rem .5rem; + background: $white; + svg { + @include svg-size(.75rem); + } + } + &-true { + border: 1px solid $primary; + margin: 0 .1rem 0 .25rem; + transition: background .2s; + &:hover { + background: rgba($primary-light, .3); + } + svg { + fill: $primary; + } + } + &-false { + border: 1px solid $red; + margin: 0 .25rem 0 .1rem; + transition: background .2s; + &:hover { + background: rgba($red, .3); + } + svg { + fill: $red; + } + } + } + + &-choose { + color: $primary; + text-transform: lowercase; + padding-right: 0; + &:hover { + color: $primary-light; + } + } + + &-selected { + align-items: center; + display: flex; + + &-img { + margin-left: .5rem; + max-width: 3rem; + } + + img { + width: 100%; + } + } + + &-submit { + display: block; + margin: 2rem auto 0; + padding: .75rem 4rem; + } +} diff --git a/app/styles/dependencies/mixins/radio-group.scss b/app/styles/dependencies/mixins/radio-group.scss new file mode 100644 index 00000000..f04577da --- /dev/null +++ b/app/styles/dependencies/mixins/radio-group.scss @@ -0,0 +1,19 @@ +@mixin radio-group { + input { + opacity: 0; + &:checked+svg { + fill: rgba($primary, .6); + stroke: rgba($primary, .1); + } + } + svg { + fill: $whitish; + stroke: darken($whitish, 10%); + stroke-width: 1px; + vertical-align: middle; + } + .control-indicator { + padding-left: .25rem; + @include font-type(normal); + } +} diff --git a/app/styles/extras/dependencies.scss b/app/styles/extras/dependencies.scss index 7203c465..c6b29c92 100644 --- a/app/styles/extras/dependencies.scss +++ b/app/styles/extras/dependencies.scss @@ -14,6 +14,10 @@ @import '../dependencies/mixins/box-arrow'; @import '../dependencies/mixins/box-shadow'; @import '../dependencies/mixins/centered'; +@import '../dependencies/mixins/btn-group'; +@import '../dependencies/mixins/import'; +@import '../dependencies/mixins/create'; +@import '../dependencies/mixins/radio-group'; @import '../dependencies/mixins/lightbox'; @import '../dependencies/mixins/loading-spinner'; @import '../dependencies/mixins/popover'; diff --git a/app/styles/modules/common/wizard.scss b/app/styles/modules/common/wizard.scss deleted file mode 100644 index 1ac0c065..00000000 --- a/app/styles/modules/common/wizard.scss +++ /dev/null @@ -1,143 +0,0 @@ -.wizard-create-project { - @include lightbox; - .close { - @include svg-size(2rem); - } - form { - width: 700px; - } - header { - margin-bottom: 3rem; - .title { - margin-bottom: 0; - } - .subtitle { - @include font-size(small); - color: $gray-light; - text-align: center; - } - } - .template-selector-title { - display: flex; - justify-content: space-between; - margin-bottom: 1rem; - } - .template-selector { - display: flex; - margin-bottom: 1rem; - input { - display: none; - } - fieldset { - &:first-child { - margin-right: .5rem; - } - } - } - input { - &:checked+label { - background: $primary-light; - color: $white; - transition: background .2s ease-in; - &:hover { - background: $primary-light; - } - } - +label { - background: rgba($whitish, .7); - cursor: pointer; - display: block; - padding: 2rem 1rem; - text-align: center; - transition: background .2s ease-in; - &:hover { - background: rgba($primary-light, .3); - transition: background .2s ease-in; - } - .icon { - @include svg-size(1.5rem); - fill: currentColor; - margin-right: .3rem; - vertical-align: text-top; - } - .template-name { - @include font-size(large); - text-transform: uppercase; - } - } - } - input[disabled]+label { - background: lighten($whitish, 5%); - box-shadow: none; - color: lighten($gray-light, 20%); - cursor: not-allowed; - opacity: .65; - &:hover { - background: lighten($whitish, 5%); - color: lighten($gray-light, 20%); - } - } - .template-data { - legend { - display: block; - margin-bottom: .5rem; - } - input, - textarea { - background: none; - border: 1px solid $whitish; - color: $gray-light; - @include placeholder { - color: darken($whitish, 20%); - } - } - textarea { - height: 7rem; - min-height: 7rem; - } - } - .template-privacity { - display: flex; - fieldset { - margin-bottom: 0; - &:first-child { - margin-right: .5rem; - } - } - input { - display: none; - } - label { - display: block; - text-align: center; - text-transform: uppercase; - - } - input+label { - padding: 1rem; - } - svg { - @include svg-size(.7rem); - } - } - .create-warning { - @include font-size(small); - padding: 1rem; - text-align: center; - .icon-exclamation { - fill: $red-light; - margin-right: .5rem; - vertical-align: middle; - } - a { - color: $primary; - display: inline-block; - margin-left: .25rem; - } - } - .button-green { - display: block; - margin: 1rem 5rem; - width: calc(100% - 10rem); - } -} diff --git a/app/svg/sprite.svg b/app/svg/sprite.svg index bfbdeb26..bdca9a97 100644 --- a/app/svg/sprite.svg +++ b/app/svg/sprite.svg @@ -440,7 +440,7 @@ Merge - + Fill @@ -448,14 +448,20 @@ Epics - + Broken Link - + - + + + + Duplicate + diff --git a/conf.e2e.js b/conf.e2e.js index a250f24c..28dab222 100644 --- a/conf.e2e.js +++ b/conf.e2e.js @@ -47,6 +47,7 @@ var config = { search: "e2e/suites/search.e2e.js", team: "e2e/suites/team.e2e.js", discover: "e2e/suites/discover/*.e2e.js", + createProject: "e2e/suites/create-project/*.e2e.js", transferProject: "e2e/suites/transfer-project.e2e.js", compileModules: "app/modules/compile-modules/**/*.e2e.js" }, diff --git a/conf/conf.example.json b/conf/conf.example.json index 4f0d8cb6..2412774b 100644 --- a/conf/conf.example.json +++ b/conf/conf.example.json @@ -16,5 +16,6 @@ "maxUploadFileSize": null, "contribPlugins": [], "tribeHost": null, + "importers": [], "gravatar": true } diff --git a/e2e/helpers/create-project-helper.js b/e2e/helpers/create-project-helper.js index 8323b73d..7f99f2bb 100644 --- a/e2e/helpers/create-project-helper.js +++ b/e2e/helpers/create-project-helper.js @@ -2,42 +2,35 @@ var utils = require('../utils'); var helper = module.exports; -helper.openWizard = function() { +helper.openCreateProjectPage = function() { $$('.create-project-btn').get(1).click(); }; -helper.createProjectLightbox = function() { +helper.newProjectScreen = function() { let obj = { - el: function() { - return $('div[tg-lb-create-project]'); + selectDuplicateOption: function() { + return utils.common.link($('.e2e-duplicate-project')); }, - waitOpen: function() { - return utils.lightbox.open(obj.el()); + selectScrumOption: function() { + return utils.common.link($('.e2e-create-project-scrum')); }, - waitClose: function() { - return utils.lightbox.close(obj.el()); + selectKanbanOption: function() { + return utils.common.link($('.e2e-create-project-kanban')); }, - next: async function() { - $('.wizard-step.active .button-green').click(); - - await browser.sleep(1000); + selectProjectToDuplicate: function() { + return $$('.e2e-duplicate-project-reference option').get(1).click(); }, - submit: function() { - return $('div[tg-lb-create-project] .button-green').click(); + fillNameAndDescription: async function(name, title){ + await $('.e2e-create-project-title').sendKeys(name); + await $('.e2e-create-project-description').sendKeys(title); }, - name: function() { - return $$('div[tg-lb-create-project] input[type="text"]').get(0); - }, - description: function() { - return $('div[tg-lb-create-project] textarea'); - }, - errors: function() { - return $$('.checksley-error-list li'); + createProject: function() { + return $('.e2e-create-project-action-submit').click(); } }; return obj; -}; +} helper.delete = async function() { $('.delete-project').click(); diff --git a/e2e/suites/admin/project/create-delete.e2e.js b/e2e/suites/admin/project/create-delete.e2e.js deleted file mode 100644 index 9e3041e2..00000000 --- a/e2e/suites/admin/project/create-delete.e2e.js +++ /dev/null @@ -1,67 +0,0 @@ -var utils = require('../../../utils'); -var createProject = require('../../../helpers').createProject; - -var chai = require('chai'); -var chaiAsPromised = require('chai-as-promised'); - -chai.use(chaiAsPromised); -var expect = chai.expect; - -describe('create-delete project', function() { - before(async function(){ - browser.get(browser.params.glob.host + 'projects/'); - - await utils.common.waitLoader(); - }); - - let lb; - - before(async function() { - lb = createProject.createProjectLightbox(); - - createProject.openWizard(); - - await lb.waitOpen(); - - utils.common.takeScreenshot('project-wizard', 'create-project'); - }); - - it('create project error', async function() { - utils.common.takeScreenshot('project-wizard', 'create-project-errors'); - - await lb.submit(); - - let errors = await lb.errors().count(); - - expect(errors).to.be.equal(2); - }); - - it('create project', async function() { - let originalUrl = await browser.getCurrentUrl(); - - lb.name().sendKeys('aaa'); - lb.description().sendKeys('bbb'); - - await lb.submit(); - - let projectUrl = await browser.getCurrentUrl(); - - expect(projectUrl).not.to.be.equal(originalUrl); - }); - - it('delete', async function() { - let linkAdmin = $('#nav-admin a'); - utils.common.link(linkAdmin); - - browser.wait(function() { - return $('.project-details').isPresent(); - }); - - await createProject.delete(); - await browser.waitForAngular(); - - let url = await browser.getCurrentUrl(); - - expect(url).to.be.equal(browser.params.glob.host); - }); -}); diff --git a/e2e/suites/create-project/duplicate.e2e.js b/e2e/suites/create-project/duplicate.e2e.js new file mode 100644 index 00000000..767e7de3 --- /dev/null +++ b/e2e/suites/create-project/duplicate.e2e.js @@ -0,0 +1,63 @@ +var utils = require('../../utils'); +var createProjectHelper = require('../../helpers/create-project-helper'); +var newProjectScreen = createProjectHelper.newProjectScreen(); + +var chai = require('chai'); +var chaiAsPromised = require('chai-as-promised'); + +chai.use(chaiAsPromised); +var expect = chai.expect; + +describe('create-duplicate-delete project', function() { + + it('duplicate project', async function() { + browser.get(browser.params.glob.host + 'project/new'); + await utils.common.waitLoader(); + utils.common.takeScreenshot('new-project', 'new-project'); + await newProjectScreen.selectDuplicateOption(); + utils.common.takeScreenshot('new-project', 'duplicate-project'); + await newProjectScreen.selectProjectToDuplicate(); + let projectName = 'duplicated-project-' + Date.now(); + newProjectScreen.fillNameAndDescription(projectName, 'Lorem Ipsum') + await newProjectScreen.createProject(); + let url = await browser.getCurrentUrl(); + expect(url).to.be.equal(browser.params.glob.host + 'project/admin-' + projectName + '/'); + }); + + it('create scrum project', async function() { + browser.get(browser.params.glob.host + 'project/new'); + await utils.common.waitLoader(); + await newProjectScreen.selectScrumOption(); + utils.common.takeScreenshot('new-project', 'create-scrum-project'); + let projectName = 'scrum-project-' + Date.now(); + await newProjectScreen.fillNameAndDescription(projectName, 'Lorem Ipsum'); + await newProjectScreen.createProject(); + let url = await browser.getCurrentUrl(); + expect(url).to.be.equal(browser.params.glob.host + 'project/admin-' + projectName + '/backlog'); + }); + + it('create kanban project', async function() { + browser.get(browser.params.glob.host + 'project/new'); + await utils.common.waitLoader(); + await newProjectScreen.selectKanbanOption(); + utils.common.takeScreenshot('new-project', 'create-kanban-project'); + let projectName = 'kanban-project-' + Date.now(); + await newProjectScreen.fillNameAndDescription(projectName, 'Lorem Ipsum'); + await newProjectScreen.createProject(); + let url = await browser.getCurrentUrl(); + expect(url).to.be.equal(browser.params.glob.host + 'project/admin-' + projectName + '/kanban'); + }); + + it('delete', async function() { + let linkAdmin = $('#nav-admin a'); + utils.common.link(linkAdmin); + browser.wait(function() { + return $('.project-details').isPresent(); + }); + await createProjectHelper.delete(); + await browser.waitForAngular(); + let url = await browser.getCurrentUrl(); + expect(url).to.be.equal(browser.params.glob.host); + }); + +}); diff --git a/e2e/suites/home.e2e.js b/e2e/suites/home.e2e.js index 2f7a19ea..71d26bd0 100644 --- a/e2e/suites/home.e2e.js +++ b/e2e/suites/home.e2e.js @@ -33,18 +33,6 @@ describe('home', function() { await utils.common.waitLoader(); utils.common.takeScreenshot("home", "projects"); }); - - it('open create project lightbox', async function() { - $('.master .create-project-btn').click(); - - return expect(await utils.lightbox.open('div[tg-lb-create-project]')).to.be.equal(true); - }); - - it('close create project lightbox', async function() { - $('div[tg-lb-create-project] .close').click(); - - return expect(await utils.lightbox.close('div[tg-lb-create-project]')).to.be.equal(true); - }); }); describe("project drag and drop", function() { diff --git a/karma.conf.js b/karma.conf.js index 4e24c1ec..edde0e8f 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -19,11 +19,7 @@ module.exports = function(config) { 'karma.app.conf.js', 'dist/**/js/libs.js', 'node_modules/angular-mocks/angular-mocks.js', - 'vendor/bluebird/js/browser/bluebird.js', 'node_modules/chai-jquery/chai-jquery.js', - 'node_modules/chai-jquery/chai-jquery.js', - 'vendor/lodash/dist/lodash.js', - 'vendor/underscore.string/lib/underscore.string.js', 'test-utils.js', 'dist/**/js/app.js', 'dist/**/js/templates.js', diff --git a/locales.js b/locales.js index 76cec254..4357803d 100644 --- a/locales.js +++ b/locales.js @@ -1,4 +1,4 @@ -var glob = require('glob') +var glob = require('glob'); var inquirer = require('inquirer'); var fs = require('fs'); var _ = require('lodash'); @@ -28,13 +28,14 @@ inquirer.prompt([question], function( answer ) { if (answer.command === 'find-duplicates') findDuplicates(); }); +findDuplicates(); + function replaceKeys() { question() .then(searchKey) .then(printFiles) .then(confirm) - .then(replace) - + .then(replace); function question() { return new Promise(function (resolve, reject) { @@ -120,7 +121,8 @@ function replaceKeys() { function findDuplicates() { - glob(app + 'locales/*.json', {}, function (er, files) { + glob(app + 'locales/taiga/*.json', {}, function (er, files) { + console.log(files); files.forEach(duplicates); }); diff --git a/package.json b/package.json index 4d158b25..80fa4db2 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "gulp-util": "^3.0.7", "gulp-wrap": "^0.12.0", "image-size": "^0.5.0", - "inquirer": "^1.0.2", + "inquirer": "^3.0.1", "jade": "^1.11.0", "karma": "^0.13.10", "karma-chai-plugins": "^0.7.0", diff --git a/prism-languages.json b/prism-languages.json index 6d79b676..be5b8e15 100644 --- a/prism-languages.json +++ b/prism-languages.json @@ -1 +1 @@ -[{"file":"prism-abap.min.js","name":"abap"},{"file":"prism-actionscript.min.js","name":"actionscript"},{"file":"prism-ada.min.js","name":"ada"},{"file":"prism-apacheconf.min.js","name":"apacheconf"},{"file":"prism-apl.min.js","name":"apl"},{"file":"prism-applescript.min.js","name":"applescript"},{"file":"prism-asciidoc.min.js","name":"asciidoc"},{"file":"prism-aspnet.min.js","name":"aspnet"},{"file":"prism-autohotkey.min.js","name":"autohotkey"},{"file":"prism-autoit.min.js","name":"autoit"},{"file":"prism-bash.min.js","name":"bash"},{"file":"prism-basic.min.js","name":"basic"},{"file":"prism-batch.min.js","name":"batch"},{"file":"prism-bison.min.js","name":"bison"},{"file":"prism-brainfuck.min.js","name":"brainfuck"},{"file":"prism-bro.min.js","name":"bro"},{"file":"prism-c.min.js","name":"c"},{"file":"prism-clike.min.js","name":"clike"},{"file":"prism-coffeescript.min.js","name":"coffeescript"},{"file":"prism-core.min.js","name":"core"},{"file":"prism-cpp.min.js","name":"cpp"},{"file":"prism-crystal.min.js","name":"crystal"},{"file":"prism-csharp.min.js","name":"csharp"},{"file":"prism-css-extras.min.js","name":"css-extras"},{"file":"prism-css.min.js","name":"css"},{"file":"prism-d.min.js","name":"d"},{"file":"prism-dart.min.js","name":"dart"},{"file":"prism-diff.min.js","name":"diff"},{"file":"prism-docker.min.js","name":"docker"},{"file":"prism-eiffel.min.js","name":"eiffel"},{"file":"prism-elixir.min.js","name":"elixir"},{"file":"prism-erlang.min.js","name":"erlang"},{"file":"prism-fortran.min.js","name":"fortran"},{"file":"prism-fsharp.min.js","name":"fsharp"},{"file":"prism-gherkin.min.js","name":"gherkin"},{"file":"prism-git.min.js","name":"git"},{"file":"prism-glsl.min.js","name":"glsl"},{"file":"prism-go.min.js","name":"go"},{"file":"prism-graphql.min.js","name":"graphql"},{"file":"prism-groovy.min.js","name":"groovy"},{"file":"prism-haml.min.js","name":"haml"},{"file":"prism-handlebars.min.js","name":"handlebars"},{"file":"prism-haskell.min.js","name":"haskell"},{"file":"prism-haxe.min.js","name":"haxe"},{"file":"prism-http.min.js","name":"http"},{"file":"prism-icon.min.js","name":"icon"},{"file":"prism-inform7.min.js","name":"inform7"},{"file":"prism-ini.min.js","name":"ini"},{"file":"prism-j.min.js","name":"j"},{"file":"prism-jade.min.js","name":"jade"},{"file":"prism-java.min.js","name":"java"},{"file":"prism-javascript.min.js","name":"javascript"},{"file":"prism-jolie.min.js","name":"jolie"},{"file":"prism-json.min.js","name":"json"},{"file":"prism-jsx.min.js","name":"jsx"},{"file":"prism-julia.min.js","name":"julia"},{"file":"prism-keyman.min.js","name":"keyman"},{"file":"prism-kotlin.min.js","name":"kotlin"},{"file":"prism-latex.min.js","name":"latex"},{"file":"prism-less.min.js","name":"less"},{"file":"prism-livescript.min.js","name":"livescript"},{"file":"prism-lolcode.min.js","name":"lolcode"},{"file":"prism-lua.min.js","name":"lua"},{"file":"prism-makefile.min.js","name":"makefile"},{"file":"prism-markdown.min.js","name":"markdown"},{"file":"prism-markup.min.js","name":"markup"},{"file":"prism-matlab.min.js","name":"matlab"},{"file":"prism-mel.min.js","name":"mel"},{"file":"prism-mizar.min.js","name":"mizar"},{"file":"prism-monkey.min.js","name":"monkey"},{"file":"prism-nasm.min.js","name":"nasm"},{"file":"prism-nginx.min.js","name":"nginx"},{"file":"prism-nim.min.js","name":"nim"},{"file":"prism-nix.min.js","name":"nix"},{"file":"prism-nsis.min.js","name":"nsis"},{"file":"prism-objectivec.min.js","name":"objectivec"},{"file":"prism-ocaml.min.js","name":"ocaml"},{"file":"prism-oz.min.js","name":"oz"},{"file":"prism-parigp.min.js","name":"parigp"},{"file":"prism-parser.min.js","name":"parser"},{"file":"prism-pascal.min.js","name":"pascal"},{"file":"prism-perl.min.js","name":"perl"},{"file":"prism-php-extras.min.js","name":"php-extras"},{"file":"prism-php.min.js","name":"php"},{"file":"prism-powershell.min.js","name":"powershell"},{"file":"prism-processing.min.js","name":"processing"},{"file":"prism-prolog.min.js","name":"prolog"},{"file":"prism-properties.min.js","name":"properties"},{"file":"prism-protobuf.min.js","name":"protobuf"},{"file":"prism-puppet.min.js","name":"puppet"},{"file":"prism-pure.min.js","name":"pure"},{"file":"prism-python.min.js","name":"python"},{"file":"prism-q.min.js","name":"q"},{"file":"prism-qore.min.js","name":"qore"},{"file":"prism-r.min.js","name":"r"},{"file":"prism-reason.min.js","name":"reason"},{"file":"prism-rest.min.js","name":"rest"},{"file":"prism-rip.min.js","name":"rip"},{"file":"prism-roboconf.min.js","name":"roboconf"},{"file":"prism-ruby.min.js","name":"ruby"},{"file":"prism-rust.min.js","name":"rust"},{"file":"prism-sas.min.js","name":"sas"},{"file":"prism-sass.min.js","name":"sass"},{"file":"prism-scala.min.js","name":"scala"},{"file":"prism-scheme.min.js","name":"scheme"},{"file":"prism-scss.min.js","name":"scss"},{"file":"prism-smalltalk.min.js","name":"smalltalk"},{"file":"prism-smarty.min.js","name":"smarty"},{"file":"prism-sql.min.js","name":"sql"},{"file":"prism-stylus.min.js","name":"stylus"},{"file":"prism-swift.min.js","name":"swift"},{"file":"prism-tcl.min.js","name":"tcl"},{"file":"prism-textile.min.js","name":"textile"},{"file":"prism-twig.min.js","name":"twig"},{"file":"prism-typescript.min.js","name":"typescript"},{"file":"prism-verilog.min.js","name":"verilog"},{"file":"prism-vhdl.min.js","name":"vhdl"},{"file":"prism-vim.min.js","name":"vim"},{"file":"prism-wiki.min.js","name":"wiki"},{"file":"prism-xojo.min.js","name":"xojo"},{"file":"prism-yaml.min.js","name":"yaml"}] \ No newline at end of file +[{"file":"prism-abap.min.js","name":"abap"},{"file":"prism-actionscript.min.js","name":"actionscript"},{"file":"prism-apacheconf.min.js","name":"apacheconf"},{"file":"prism-apl.min.js","name":"apl"},{"file":"prism-applescript.min.js","name":"applescript"},{"file":"prism-asciidoc.min.js","name":"asciidoc"},{"file":"prism-aspnet.min.js","name":"aspnet"},{"file":"prism-autohotkey.min.js","name":"autohotkey"},{"file":"prism-autoit.min.js","name":"autoit"},{"file":"prism-bash.min.js","name":"bash"},{"file":"prism-basic.min.js","name":"basic"},{"file":"prism-batch.min.js","name":"batch"},{"file":"prism-bison.min.js","name":"bison"},{"file":"prism-brainfuck.min.js","name":"brainfuck"},{"file":"prism-bro.min.js","name":"bro"},{"file":"prism-c.min.js","name":"c"},{"file":"prism-clike.min.js","name":"clike"},{"file":"prism-coffeescript.min.js","name":"coffeescript"},{"file":"prism-core.min.js","name":"core"},{"file":"prism-cpp.min.js","name":"cpp"},{"file":"prism-crystal.min.js","name":"crystal"},{"file":"prism-csharp.min.js","name":"csharp"},{"file":"prism-css-extras.min.js","name":"css-extras"},{"file":"prism-css.min.js","name":"css"},{"file":"prism-d.min.js","name":"d"},{"file":"prism-dart.min.js","name":"dart"},{"file":"prism-diff.min.js","name":"diff"},{"file":"prism-docker.min.js","name":"docker"},{"file":"prism-eiffel.min.js","name":"eiffel"},{"file":"prism-elixir.min.js","name":"elixir"},{"file":"prism-erlang.min.js","name":"erlang"},{"file":"prism-fortran.min.js","name":"fortran"},{"file":"prism-fsharp.min.js","name":"fsharp"},{"file":"prism-gherkin.min.js","name":"gherkin"},{"file":"prism-git.min.js","name":"git"},{"file":"prism-glsl.min.js","name":"glsl"},{"file":"prism-go.min.js","name":"go"},{"file":"prism-groovy.min.js","name":"groovy"},{"file":"prism-haml.min.js","name":"haml"},{"file":"prism-handlebars.min.js","name":"handlebars"},{"file":"prism-haskell.min.js","name":"haskell"},{"file":"prism-haxe.min.js","name":"haxe"},{"file":"prism-http.min.js","name":"http"},{"file":"prism-icon.min.js","name":"icon"},{"file":"prism-inform7.min.js","name":"inform7"},{"file":"prism-ini.min.js","name":"ini"},{"file":"prism-j.min.js","name":"j"},{"file":"prism-jade.min.js","name":"jade"},{"file":"prism-java.min.js","name":"java"},{"file":"prism-javascript.min.js","name":"javascript"},{"file":"prism-json.min.js","name":"json"},{"file":"prism-jsx.min.js","name":"jsx"},{"file":"prism-julia.min.js","name":"julia"},{"file":"prism-keyman.min.js","name":"keyman"},{"file":"prism-kotlin.min.js","name":"kotlin"},{"file":"prism-latex.min.js","name":"latex"},{"file":"prism-less.min.js","name":"less"},{"file":"prism-lolcode.min.js","name":"lolcode"},{"file":"prism-lua.min.js","name":"lua"},{"file":"prism-makefile.min.js","name":"makefile"},{"file":"prism-markdown.min.js","name":"markdown"},{"file":"prism-markup.min.js","name":"markup"},{"file":"prism-matlab.min.js","name":"matlab"},{"file":"prism-mel.min.js","name":"mel"},{"file":"prism-mizar.min.js","name":"mizar"},{"file":"prism-monkey.min.js","name":"monkey"},{"file":"prism-nasm.min.js","name":"nasm"},{"file":"prism-nginx.min.js","name":"nginx"},{"file":"prism-nim.min.js","name":"nim"},{"file":"prism-nix.min.js","name":"nix"},{"file":"prism-nsis.min.js","name":"nsis"},{"file":"prism-objectivec.min.js","name":"objectivec"},{"file":"prism-ocaml.min.js","name":"ocaml"},{"file":"prism-oz.min.js","name":"oz"},{"file":"prism-parigp.min.js","name":"parigp"},{"file":"prism-parser.min.js","name":"parser"},{"file":"prism-pascal.min.js","name":"pascal"},{"file":"prism-perl.min.js","name":"perl"},{"file":"prism-php-extras.min.js","name":"php-extras"},{"file":"prism-php.min.js","name":"php"},{"file":"prism-powershell.min.js","name":"powershell"},{"file":"prism-processing.min.js","name":"processing"},{"file":"prism-prolog.min.js","name":"prolog"},{"file":"prism-protobuf.min.js","name":"protobuf"},{"file":"prism-puppet.min.js","name":"puppet"},{"file":"prism-pure.min.js","name":"pure"},{"file":"prism-python.min.js","name":"python"},{"file":"prism-q.min.js","name":"q"},{"file":"prism-qore.min.js","name":"qore"},{"file":"prism-r.min.js","name":"r"},{"file":"prism-rest.min.js","name":"rest"},{"file":"prism-rip.min.js","name":"rip"},{"file":"prism-roboconf.min.js","name":"roboconf"},{"file":"prism-ruby.min.js","name":"ruby"},{"file":"prism-rust.min.js","name":"rust"},{"file":"prism-sas.min.js","name":"sas"},{"file":"prism-sass.min.js","name":"sass"},{"file":"prism-scala.min.js","name":"scala"},{"file":"prism-scheme.min.js","name":"scheme"},{"file":"prism-scss.min.js","name":"scss"},{"file":"prism-smalltalk.min.js","name":"smalltalk"},{"file":"prism-smarty.min.js","name":"smarty"},{"file":"prism-sql.min.js","name":"sql"},{"file":"prism-stylus.min.js","name":"stylus"},{"file":"prism-swift.min.js","name":"swift"},{"file":"prism-tcl.min.js","name":"tcl"},{"file":"prism-textile.min.js","name":"textile"},{"file":"prism-twig.min.js","name":"twig"},{"file":"prism-typescript.min.js","name":"typescript"},{"file":"prism-verilog.min.js","name":"verilog"},{"file":"prism-vhdl.min.js","name":"vhdl"},{"file":"prism-vim.min.js","name":"vim"},{"file":"prism-wiki.min.js","name":"wiki"},{"file":"prism-yaml.min.js","name":"yaml"}] \ No newline at end of file From 3bedae7234a5a23020aab2d9acf20ee71b18aba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 20 Feb 2017 12:38:48 +0100 Subject: [PATCH 123/175] [i18n] Update locales --- app/locales/taiga/locale-ca.json | 32 ++++----- app/locales/taiga/locale-de.json | 52 +++++++-------- app/locales/taiga/locale-es.json | 52 +++++++-------- app/locales/taiga/locale-fi.json | 28 ++++---- app/locales/taiga/locale-fr.json | 52 +++++++-------- app/locales/taiga/locale-it.json | 52 +++++++-------- app/locales/taiga/locale-ja.json | 94 +++++++++++++-------------- app/locales/taiga/locale-ko.json | 66 +++++++++---------- app/locales/taiga/locale-nb.json | 52 +++++++-------- app/locales/taiga/locale-nl.json | 32 ++++----- app/locales/taiga/locale-pl.json | 40 ++++++------ app/locales/taiga/locale-pt-br.json | 52 +++++++-------- app/locales/taiga/locale-ru.json | 36 +++++----- app/locales/taiga/locale-sv.json | 34 +++++----- app/locales/taiga/locale-tr.json | 32 ++++----- app/locales/taiga/locale-zh-hans.json | 52 +++++++-------- app/locales/taiga/locale-zh-hant.json | 32 ++++----- 17 files changed, 395 insertions(+), 395 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index c5374c73..ff233d20 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Els teus projectes", "PLACEHOLDER_SEARCH": "Cerca en...", "ACTION_CREATE_PROJECT": "Crear projecte", - "ACTION_IMPORT_PROJECT": "Importar projecte", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Gestiona els projectes", "TITLE_CREATE_PROJECT": "Crear projecte", - "TITLE_IMPORT_PROJECT": "Importar projecte", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Mostra projectes previs", "TITLE_NEXT_PROJECT": "Mostrar próxims projectes", "HELP_TITLE": "Pàgina d'ajuda de Taiga", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Arrossega els elements per endreçar" }, "IMPORT": { - "TITLE": "Important Projecte", - "UPLOADING_FILE": "Pujant arxiu de dades", - "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": "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}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})", - "SYNC_SUCCESS": "El teu projecte s'ha importat correctament", + "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", + "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", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Crear projecte", - "CREATE_PROJECT_TEXT": "Nou projecte. Qué il·lusió!", + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Crear projecte", + "CREATE_PROJECT": "Create project", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index ae61b1c5..d175c304 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Ihre Projekte", "PLACEHOLDER_SEARCH": "Suchen...", "ACTION_CREATE_PROJECT": "Projekt anlegen", - "ACTION_IMPORT_PROJECT": "Projekt importieren", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Projekte verwalten", "TITLE_CREATE_PROJECT": "Projekt anlegen", - "TITLE_IMPORT_PROJECT": "Projekt importieren", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Frühere Projekte anzeigen", "TITLE_NEXT_PROJECT": "Weitere Projekte zeigen", "HELP_TITLE": "Taiga Support Seite", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Benutzen Sie Drag & Drop zum neuen Ordnen" }, "IMPORT": { - "TITLE": "Projekt importieren", - "UPLOADING_FILE": "Exportdatei wird hochgeladen", - "DESCRIPTION": "Dieser Vorgang kann etwas dauern. Bitte schliessen Sie das Fenster nicht!", - "ASYNC_IN_PROGRESS_TITLE": "Unsere Helferlein importieren Ihr Projekt", - "ASYNC_IN_PROGRESS_MESSAGE": "Dieser Vorgang könnte ein paar Minuten benötigen
    Nach Fertigstellung benachrichtigen wir Sie per E-Mail.", - "UPLOAD_IN_PROGRESS_MESSAGE": "Hochgeladen {{uploadedSize}} von {{totalSize}}", - "ERROR": "Unsere Helferlein haben Probleme beim Importieren Ihrer Daten. Bitte versuchen Sie es erneut.", - "ERROR_TOO_MANY_REQUEST": "Entschuldigung, unsere Helferlein sind derzeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut.", - "ERROR_MESSAGE": "Unsere Helferlein haben Probleme beim Importieren Ihrer Datei: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})", - "SYNC_SUCCESS": "Ihr Projekt wurde erfolgreich importiert", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "Das Projekt, dass Sie importieren möchten, hat {{members}} Mitglieder. Leider erlaubt ihr derzeitiger Plan nicht mehr als {{max_memberships}} Mitglieder pro Projekt. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie bitte den Administrator.", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen.", "DESC": "Das Projekt, das Sie versuchen zu importieren, ist privat. Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte hinzuzufügen." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Projekt erstellen", - "CREATE_PROJECT_TEXT": "Frisch und sauber. Wie aufregend!", - "CHOOSE_TEMPLATE": "Welches Template passt am besten zu Ihrem Projekt?", - "CHOOSE_TEMPLATE_TITLE": "Mehr Infos über Projekt-Templates", - "CHOOSE_TEMPLATE_INFO": "Weitere Infos", - "PROJECT_DETAILS": "Projekt Details", - "PUBLIC_PROJECT": "Öffentliches Projekt", - "PRIVATE_PROJECT": "Privates Projekt", - "CREATE_PROJECT": "Projekt anlegen", - "MAX_PRIVATE_PROJECTS": "Sie haben die maximale Anzahl privater Projekte erreicht", - "MAX_PUBLIC_PROJECTS": "Leider haben Sie die maximale Anzahl öffentlicher Projekte erreicht", - "CHANGE_PLANS": "Änderungs-Pläne" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 74adace4..645b593b 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Tus proyectos", "PLACEHOLDER_SEARCH": "Buscar en...", "ACTION_CREATE_PROJECT": "Crear proyecto", - "ACTION_IMPORT_PROJECT": "Importar proyecto", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Administrar proyectos", "TITLE_CREATE_PROJECT": "Crear proyecto", - "TITLE_IMPORT_PROJECT": "Importar proyecto", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Mostrar proyectos anteriores", "TITLE_NEXT_PROJECT": "Mostrar siguientes proyectos", "HELP_TITLE": "Página de Soporte de Taiga", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Arrastrar y soltar para reordenar" }, "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", - "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.", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "El proyecto que esta tratando de importar tiene {{members}} miembros, desafortunadamente, su plna actual solo le permite un maximo de {{max_memberships}} miembros por proyecto. si desea aumentar este limite por favor contacte al administrador.", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Desafortunadamente, su plan actual no permite a los proyectos privados adicionales", "DESC": "El proyecto que trata de importar es privado. Desafortunadamente, su plan actual no le permite adicionar mas proyectos privados" @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Crear Proyecto", - "CREATE_PROJECT_TEXT": "Fresco y claro. ¡Es emocionante!", - "CHOOSE_TEMPLATE": "¿Que plantilla se ajusta mejor con tu proyecto?", - "CHOOSE_TEMPLATE_TITLE": "Mas informacion acerca de la plantillas del proyecto", - "CHOOSE_TEMPLATE_INFO": "Mas información", - "PROJECT_DETAILS": "Detalles del proyecto", - "PUBLIC_PROJECT": "Proyecto público", - "PRIVATE_PROJECT": "Proyecto privado", - "CREATE_PROJECT": "Crear proyecto", - "MAX_PRIVATE_PROJECTS": "Has alcanzado el número máximo de proyectos privados", - "MAX_PUBLIC_PROJECTS": "Desafortunadamente, has alcanzado el número máximo de proyectos públicos", - "CHANGE_PLANS": "cambiar planes" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 0412593f..213cc9b0 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -903,17 +903,17 @@ "ACTION_REORDER": "Drag & drop to reorder" }, "IMPORT": { - "TITLE": "Luetaan sisään projektia", - "UPLOADING_FILE": "Ladataan tiedostoa", - "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": "LAdattu {{uploadedSize}} / {{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}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})", - "SYNC_SUCCESS": "Projektisi on tuotu sisään onnistuneesti", + "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", + "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", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Luo projekti", - "CREATE_PROJECT_TEXT": "Täysin koskematon. Jännittävää!", + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Luo projekti", + "CREATE_PROJECT": "Create project", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 18d3dd79..5defc21a 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Vos projets", "PLACEHOLDER_SEARCH": "Rechercher dans...", "ACTION_CREATE_PROJECT": "Créer un projet", - "ACTION_IMPORT_PROJECT": "Importer un projet", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Gérer les projets", "TITLE_CREATE_PROJECT": "Créer un projet", - "TITLE_IMPORT_PROJECT": "Importer un projet", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Montrer les projets précédents", "TITLE_NEXT_PROJECT": "Montrer les projets suivants", "HELP_TITLE": "Page d'assistance Taiga", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Glisser-déposer pour réorganiser" }, "IMPORT": { - "TITLE": "Importation du projet en cours", - "UPLOADING_FILE": "Dépôt du fichier de vidage", - "DESCRIPTION": "Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte.", - "ASYNC_IN_PROGRESS_TITLE": "Nos Oompa Loompas sont en train d'importer votre projet", - "ASYNC_IN_PROGRESS_MESSAGE": "Ce processus pourrait durer plusieurs minutes
    Nous vous enverrons un courriel quand ce sera prêt", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} de {{totalSize}} déposés", - "ERROR": "Nos Oompas Loompas ont rencontré des problèmes en important vos données de vidage. 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 vos données de vidage : {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})", - "SYNC_SUCCESS": "Votre projet a été importé avec succès", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "Le projet que vous voulez importer a {{members}} membres. Votre souscription actuelle vous permet un maximum de {{max_memberships}} membres par projet. Si vous désirez augmenter cette limite, merci de contacter un administrateur.", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire.", "DESC": "Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Créer un projet", - "CREATE_PROJECT_TEXT": "Tout beau, tout nouveau !", - "CHOOSE_TEMPLATE": "Quel modèle convient mieux à votre projet ?", - "CHOOSE_TEMPLATE_TITLE": "Plus d'information sur les templates de projets", - "CHOOSE_TEMPLATE_INFO": "Plus d'informations", - "PROJECT_DETAILS": "Détails du projet", - "PUBLIC_PROJECT": "Projet public", - "PRIVATE_PROJECT": "Projet privé", - "CREATE_PROJECT": "Créer un projet", - "MAX_PRIVATE_PROJECTS": "Vous avez atteint le nombre maximum de projets privés", - "MAX_PUBLIC_PROJECTS": "Désolé, vous avez atteint le nombre maximal de projet public.", - "CHANGE_PLANS": "changer de souscription" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 9699d503..f183211a 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Tuoi progetti", "PLACEHOLDER_SEARCH": "Cerca in...", "ACTION_CREATE_PROJECT": "Crea progetto", - "ACTION_IMPORT_PROJECT": "Importa progetto", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Gestisci Progetti", "TITLE_CREATE_PROJECT": "Crea progetto", - "TITLE_IMPORT_PROJECT": "Importa progetto", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Mostra i progetti precedenti", "TITLE_NEXT_PROJECT": "Progetto successivo", "HELP_TITLE": "Pagina di supporto Taiga", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Usa drag & drop per riordinare" }, "IMPORT": { - "TITLE": "Importazione Progetto", - "UPLOADING_FILE": "Carico il file di dump", - "DESCRIPTION": "Questo processo puó durare un po', nel frattempo lasciare questa finestra aperta.", - "ASYNC_IN_PROGRESS_TITLE": "I nostri Oompa Loompa stanno lavorando per importare il tuo progetto!", - "ASYNC_IN_PROGRESS_MESSAGE": "Questo processo puó durare minuti.
    Verrá inviata una mail al suo completamento", - "UPLOAD_IN_PROGRESS_MESSAGE": "Caricati {{uploadedSize}} di {{totalSize}}", - "ERROR": "Mannaggia, i Oompa Loompa hanno qualche problema ad importare il dump. Prova di nuovo.", - "ERROR_TOO_MANY_REQUEST": "Scusaci, i nostri Oompa Loompa sono di nuovo occupati. Riprova di nuovo in qualche minuto.", - "ERROR_MESSAGE": "I nostri Oompa Loompa hanno qualche problema ad importare il dump dei tuoi dati: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})", - "SYNC_SUCCESS": "Il tuo progetto è stato importato con successo", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "Il progetto che stai provando a importare ha {{members}} membri, sfortunatamente, il tuo attuale abbonamento consente un massimo di {{max_membership}} membri per progetto. Se vuoi aumentare questo limite per favore contatta l'amministratore", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati", "DESC": "Il progetto che stai tentando di importare è privato. Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati" @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Crea Progetto", - "CREATE_PROJECT_TEXT": "Nuovo di zecca. Vai così!", - "CHOOSE_TEMPLATE": "Quale template si adatta meglio al tuo progetto?", - "CHOOSE_TEMPLATE_TITLE": "Più info sui template di progetto", - "CHOOSE_TEMPLATE_INFO": "Più info", - "PROJECT_DETAILS": "Dettagli Progetto", - "PUBLIC_PROJECT": "Progetto Pubblico", - "PRIVATE_PROJECT": "Progetto Privato", - "CREATE_PROJECT": "Crea progetto", - "MAX_PRIVATE_PROJECTS": "Hai raggiunto il numero massimo di progetti privati", - "MAX_PUBLIC_PROJECTS": "Sfortunatamente. hai raggiunto il numero massimo di progetti pubblici", - "CHANGE_PLANS": "cambia abbonamento" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index 7fd771da..ee51030f 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -332,7 +332,7 @@ "FORGOT_PASSWORD_FORM": { "TITLE": "おっと、パスワードを忘れてしまいましたか?", "SUBTITLE": "新しく始めるためにユーザー名 または メールアドレスを入力", - "PLACEHOLDER_FIELD": "ユーザー名 または メール", + "PLACEHOLDER_FIELD": "ユーザー名 または メールアドレス", "ACTION_RESET_PASSWORD": "パスワードをリセット", "LINK_CANCEL": "いいえ、戻ります。私はそれを覚えていると思います。", "SUCCESS_TITLE": "Inboxを確認してください", @@ -518,7 +518,7 @@ "RECRUITING": "プロジェクトメンバーを探していますか?", "RECRUITING_MESSAGE": "どんな人を探していますか?", "RECRUITING_PLACEHOLDER": "探している人のプロフィールを記載してください", - "FEEDBACK": "Receive feedback from Taiga users?", + "FEEDBACK": "Taigaユーザーからのフィードバックを受け取りますか?", "PUBLIC_PROJECT": "パブリック プロジェクト", "PRIVATE_PROJECT": "非公開プロジェクト", "PRIVATE_OR_PUBLIC": "パブリックプロジェクトとプライベートプロジェクトの違いは何ですか?", @@ -531,11 +531,11 @@ "MAX_PUBLIC_PROJECTS": "あなたの現在のプランで許可されている公開プロジェクトの上限数に達しました。", "MAX_PUBLIC_PROJECTS_MEMBERS": "The project exceeds your maximum number of members for public projects", "PROJECT_OWNER": "プロジェクトオーナー", - "REQUEST_OWNERSHIP": "Request ownership", - "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "Do you want to become the new project owner?", + "REQUEST_OWNERSHIP": "オーナーシップを要求", + "REQUEST_OWNERSHIP_CONFIRMATION_TITLE": "新しいプロジェクトのオーナーになりますか?", "REQUEST_OWNERSHIP_DESC": "Request that current project owner {{name}} transfer ownership of this project to you.", "REQUEST_OWNERSHIP_BUTTON": "リクエスト", - "REQUEST_OWNERSHIP_SUCCESS": "プロジェクトオーナーに通知します。", + "REQUEST_OWNERSHIP_SUCCESS": "プロジェクトオーナーに通知します", "CHANGE_OWNER": "オーナーを変更", "CHANGE_OWNER_SUCCESS_TITLE": "あなたのリクエストが送信されました!", "CHANGE_OWNER_SUCCESS_DESC": "We will notify you by email if the project ownership request is accepted or declined" @@ -783,7 +783,7 @@ "PRIVATE": "あなたが持てる非公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。", "PUBLIC": "あなたが持てる公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", + "CANT_BE_OWNED": "この種類のプロジェクトのオーナーには現在なれません。このプロジェクトのオーナーになりたい場合は管理者に問い合わせて、プロジェクトオーナー権限を変更してもらってください。", "CHANGE_MY_PLAN": "プランを変更" } }, @@ -873,10 +873,10 @@ "SECTION_TITLE": "あなたのプロジェクト", "PLACEHOLDER_SEARCH": "検索...", "ACTION_CREATE_PROJECT": "プロジェクトを作成", - "ACTION_IMPORT_PROJECT": "プロジェクトをインポート", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "プロジェクト管理", "TITLE_CREATE_PROJECT": "プロジェクトを作成", - "TITLE_IMPORT_PROJECT": "プロジェクトをインポート", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "前のプロジェクトを表示", "TITLE_NEXT_PROJECT": "次のプロジェクトを表示", "HELP_TITLE": "Taiga サポートページ", @@ -899,23 +899,23 @@ "DASHBOARD_TITLE": "ダッシュボード", "DISCOVER_TITLE": "トレンドプロジェクトを探す", "NEW_ITEM": "新規", - "DISCOVER": "Discover", + "DISCOVER": "探す", "ACTION_REORDER": "ドラッグ&ドロップで入れ替え" }, "IMPORT": { - "TITLE": "プロジェクトをインポート中", - "UPLOADING_FILE": "ダンプファイルをアップロード中", - "DESCRIPTION": "このプロセスには時間がかかります。ウィンドウを開いたままにしていてください。", - "ASYNC_IN_PROGRESS_TITLE": "ウンパルンパたちがあなたのプロジェクトをインポートしています。", - "ASYNC_IN_PROGRESS_MESSAGE": "この処理には時間がかかります。
    準備が出来たらメールで通知します。", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 中 {{uploadedSize}} アップロード済み", - "ERROR": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。もう一度お試しください。", - "ERROR_TOO_MANY_REQUEST": "すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。", - "ERROR_MESSAGE": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。  \n{{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。", - "SYNC_SUCCESS": "プロジェクトのインポートに成功しました", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "インポートしようとしているプロジェクトのメンバー数は{{members}}名ですが、あなたの現在のプランでは1プロジェクトごとに最大{{max_memberships}}名のみ許可されています。 上限を増やしたい場合は管理者にお問い合わせください。", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "現在のプランではこれ以上の非公開プロジェクトは許可されていません。", "DESC": "インポートしようとしているプロジェクトは非公開プロジェクトです。現在のプランではこれ以上の非公開プロジェクトは許可されていません。" @@ -988,11 +988,11 @@ }, "ADD_MEMBER": { "TITLE": "新しいメンバー", - "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER": "ユーザーをフィルターまたは招待メールを書く", + "ADD_EMAIL": "メールを追加", + "REMOVE": "削除", + "INVITE": "招待", + "CHOOSE_ROLE": "役割の選択", "PLACEHOLDER_INVITATION_TEXT": "(任意) 招待する際のメッセージを追加できます。新メンバーに素敵な言葉を贈りましょう ;-)", "HELP_TEXT": "ユーザーが既にTaigaに登録されている場合、自動的に追加されます。そうでない場合は招待状が送信されます。" }, @@ -1015,7 +1015,7 @@ "PLACEHOLDER_SPRINT_END": "見積もり終了", "ACTION_DELETE_SPRINT": "このスプリントを削除しますか?", "TITLE_ACTION_DELETE_SPRINT": "スプリントを削除", - "LAST_SPRINT_NAME": "last sprint is {{lastSprint}} ;-) " + "LAST_SPRINT_NAME": "最後のスプリントは {{lastSprint}}でした ;-) " }, "CREATE_EDIT_TASK": { "TITLE": "新しいタスク", @@ -1058,7 +1058,7 @@ }, "CONTACT_PROJECT": { "TITLE": "メールを送る", - "WARNING": "The email will be received by the project admins", + "WARNING": "プロジェクト管理者がメールを受信します", "PLACEHOLDER": "メッセージを書いてください", "SEND": "送信" } @@ -1129,7 +1129,7 @@ "RECENT_FIRST": "新しい順", "COMMENT": "コメント", "EDIT_COMMENT": "コメントを編集", - "EDITED_COMMENT": "Edited:", + "EDITED_COMMENT": "編集済み:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "新しいコメントをここに入力", "SHOW_DELETED": "削除済コメントを表示", @@ -1145,11 +1145,11 @@ "DATETIME": "YYYY年MM月DD日 HH時mm分", "SHOW_MORE": "+ 前のエントリーを表示 ({{showMore}} more)", "TITLE": "アクティビティ", - "ACTIVITIES_COUNT": "{{activities}} Activities", + "ACTIVITIES_COUNT": "{{activities}} アクティビティー", "REMOVED": "削除", "ADDED": "追加", - "TAGS_ADDED": "tags added:", - "TAGS_REMOVED": "tags removed:", + "TAGS_ADDED": "追加したタグ:", + "TAGS_REMOVED": "削除したタグ:", "US_POINTS": "{{role}} ポイント", "NEW_ATTACHMENT": "新しい添付ファイル:", "DELETED_ATTACHMENT": "削除された添付ファイル:", @@ -1174,7 +1174,7 @@ "DESCRIPTION": "説明", "CONTENT": "コンテンツ", "STATUS": "ステータス", - "IS_CLOSED": "is closed", + "IS_CLOSED": "はクローズされました。", "FINISH_DATE": "完了日", "TYPE": "タイプ", "PRIORITY": "優先度", @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "プロジェクトを作成", - "CREATE_PROJECT_TEXT": "フレッシュでクリーン。わくわくしますね!", - "CHOOSE_TEMPLATE": "どちらのテンプレートがあなたのプロジェクトに適していますか?", - "CHOOSE_TEMPLATE_TITLE": "プロジェクトテンプレートの詳細", - "CHOOSE_TEMPLATE_INFO": "詳細表示", - "PROJECT_DETAILS": "プロジェクト詳細", - "PUBLIC_PROJECT": "パブリック プロジェクト", - "PRIVATE_PROJECT": "プライベート プロジェクト", - "CREATE_PROJECT": "プロジェクトを作成", - "MAX_PRIVATE_PROJECTS": "非公開プロジェクトの上限に達しました。", - "MAX_PUBLIC_PROJECTS": "公開プロジェクトの上限に達しました。", - "CHANGE_PLANS": "プランを変更" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", @@ -1554,7 +1554,7 @@ "TITLE": "タイトル", "EDITIONS": "Editions", "CREATED": "作成", - "MODIFIED": "Modified", + "MODIFIED": "変更済み", "CREATOR": "作者", "LAST_MODIFIER": "最後の変更者" } @@ -1651,7 +1651,7 @@ "STEP1": { "TITLE": "プロジェクト概要", "TEXT1": "Here you will see the state of your project.", - "TEXT2": "You can change every kind of project settings through the admin." + "TEXT2": "管理でプロジェクトの全ての設定を変更できます。" }, "STEP2": { "TITLE": "プロダクト バックログ", diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index 4b43e554..1635f2ea 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -228,8 +228,8 @@ }, "WYSIWYG": { "OUTDATED": "편집하는 동안 다른 사람이 변경했습니다. 변경 사항을 저장하기 전에 활성 탭에서 새 버전을 확인하십시오.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", + "ATTACH_FILE_HELP": "파일을 텍스트 입력 공간에 드래그 & 드롭하여 첨부하세요.", + "ATTACH_FILE_HELP_SAVE_FIRST": "파일을 텍스트 입력란에 드래그 & 드롭하여 첨부하려면 먼저 저장해주세요.", "MARKDOWN_HELP": "마크다운 문법 도움말" }, "PERMISIONS_CATEGORIES": { @@ -873,10 +873,10 @@ "SECTION_TITLE": "프로젝트", "PLACEHOLDER_SEARCH": "검색하기", "ACTION_CREATE_PROJECT": "프로젝트 생성하기", - "ACTION_IMPORT_PROJECT": "프로젝트 불러오기", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "프로젝트 관리하기", "TITLE_CREATE_PROJECT": "프로젝트 생성하기", - "TITLE_IMPORT_PROJECT": "프로젝트 불러오기", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "이전 프로젝트 보기", "TITLE_NEXT_PROJECT": "다음 프로젝트 보기", "HELP_TITLE": "타이가 고객 지원 페이지", @@ -903,19 +903,19 @@ "ACTION_REORDER": "드래그&드롭으로 순서 바꾸기" }, "IMPORT": { - "TITLE": "프로젝트 불러오기", - "UPLOADING_FILE": "덤프 파일 업로드 중", - "DESCRIPTION": "이 과정은 시간이 걸릴 수 있습니다. 이 창을 닫지 마세요.", - "ASYNC_IN_PROGRESS_TITLE": "움파룸파가 프로젝트를 불러오고 있습니다.", - "ASYNC_IN_PROGRESS_MESSAGE": "이 작업은 몇 분 정도 걸립니다.
    작업이 끝나면 이메일로 알려드릴게요.", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 중 {{uploadedSize}} 만큼 업로드했습니다", - "ERROR": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요.", - "ERROR_TOO_MANY_REQUEST": "죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?", - "ERROR_MESSAGE": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요. {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", - "SYNC_SUCCESS": "프로젝트를 불러오는 데 성공했습니다.", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "가져오기하려는 프로젝트에 {{members}} 명의 회원이 있습니다. 안타깝게도, 현재 당신의 설정에서는 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다. 최대 수용 가능 회원 수를 늘리고 싶다면 관리자에게 문의하십시오.", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "안타깝게도, 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다.", "DESC": "가져오기하려는 프로젝트가 비공개 되어있습니다. 안타깝게도, 현재 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다." @@ -988,11 +988,11 @@ }, "ADD_MEMBER": { "TITLE": "새 회원", - "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER": "사용자를 필터링하거나 초대할 이메일 쓰기", + "ADD_EMAIL": "이메일 추가", + "REMOVE": "삭제", + "INVITE": "초대", + "CHOOSE_ROLE": "역할 선택", "PLACEHOLDER_INVITATION_TEXT": "(선택사항) 초대장에 특별한 메시지를 적으세요. 새로운 회원에게 멋진 말을 전해주세요 ;-)", "HELP_TEXT": "타이가에 이미 등록한 사용자라면 자동으로 프로젝트에 추가될 겁니다. 등록하지 않은 사용자라면 초대장이 발송됩니다." }, @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "프로젝트 생성하기", - "CREATE_PROJECT_TEXT": "시원하고 개운하네요! 너무 신나요!", - "CHOOSE_TEMPLATE": "당신의 프로젝트에 가장 적합한 템플릿이 무엇입니까?", - "CHOOSE_TEMPLATE_TITLE": "프로젝트 템플릿에 대한 더 많은 정보", - "CHOOSE_TEMPLATE_INFO": "더 많은 정보", - "PROJECT_DETAILS": "프로젝트 세부사항", - "PUBLIC_PROJECT": "공개된 프로젝트", - "PRIVATE_PROJECT": "비공개 프로젝트", - "CREATE_PROJECT": "프로젝트 생성하기", - "MAX_PRIVATE_PROJECTS": "최대 비공개 프로젝트 수에 도달하였습니다.", - "MAX_PUBLIC_PROJECTS": "안타깝게도, 당신은 최대 공개 프로젝트수에 도달했습니다.", - "CHANGE_PLANS": "계획 변경하기" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - 위키 - {{projectName}}", diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 1dcdb9f5..4f60b96c 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Dine prosjekter", "PLACEHOLDER_SEARCH": "Søk i...", "ACTION_CREATE_PROJECT": "Opprett prosjekt", - "ACTION_IMPORT_PROJECT": "Importer prosjekt", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Håndter prosjekter", "TITLE_CREATE_PROJECT": "Opprett prosjekt", - "TITLE_IMPORT_PROJECT": "Importer prosjekt", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Vis forrige prosjekter", "TITLE_NEXT_PROJECT": "Vis neste prosjekter", "HELP_TITLE": "Taiga Brukerstøtte", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Dra & slipp for å omorganisere" }, "IMPORT": { - "TITLE": "Importer prosjekt", - "UPLOADING_FILE": "Laster opp dump-fil", - "DESCRIPTION": "Denne prosessen kan ta en stund, vennligst hold vinduet åpent.", - "ASYNC_IN_PROGRESS_TITLE": "Våre Oompa Loompaer importerer ditt prosjekt", - "ASYNC_IN_PROGRESS_MESSAGE": "Denne prosessen kan ta noen minutter
    Vi vil sende deg en e-post når den er klar", - "UPLOAD_IN_PROGRESS_MESSAGE": "Opplastet {{uploadedSize}} av {{totalSize}}", - "ERROR": "Våre Oompa Loompaer har problemer med å importere din data-dump. Vennligst prøv på nytt.", - "ERROR_TOO_MANY_REQUEST": "Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter.", - "ERROR_MESSAGE": "Våre Oompa Loompaer har problemer med å importere din data-dump: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})", - "SYNC_SUCCESS": "Importen av ditt prosjekt var vellykket", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "Prosjektet du prøver å importere har {{members}} medlemmer. Dessverre, din nåværende plan tillater kun {{max_memberships}} medlemmer per prosjekt. Hvis du ønsker å øke denne grensen, vennligst kontakt administratoren.", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Dessverre, din nåværende plan tillater ikke private prosjekter", "DESC": "Prosjektet du prøver å importere er privat. Dessverre tillater ikke din gjeldende flere private prosjekter." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Opprett prosjekt", - "CREATE_PROJECT_TEXT": "Friskt og stilrent. Så spennende!", - "CHOOSE_TEMPLATE": "Hvilken mal passer ditt prosjekt best?", - "CHOOSE_TEMPLATE_TITLE": "Mer info om prosjektmaler", - "CHOOSE_TEMPLATE_INFO": "Mer info", - "PROJECT_DETAILS": "Prosjektdetaljer", - "PUBLIC_PROJECT": "Offentlig Prosjekt", - "PRIVATE_PROJECT": "Privat Prosjekt", - "CREATE_PROJECT": "Opprett prosjekt", - "MAX_PRIVATE_PROJECTS": "Du har nådd maksimalt antall private prosjekter", - "MAX_PUBLIC_PROJECTS": "Dessverre, du har nådd maksimalt antall offentlige prosjekter", - "CHANGE_PLANS": "endre planer" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index 79aa10e5..19d5463d 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Jouw projecten", "PLACEHOLDER_SEARCH": "Zoeken in...", "ACTION_CREATE_PROJECT": "Project aanmaken", - "ACTION_IMPORT_PROJECT": "Importeer project", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Project aanmaken", - "TITLE_IMPORT_PROJECT": "Importeer project", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Toon voorgaande projecten", "TITLE_NEXT_PROJECT": "Toon volgende projecten", "HELP_TITLE": "Taiga support pagina", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Sleep om de volgorde te veranderen" }, "IMPORT": { - "TITLE": "Importeren project", - "UPLOADING_FILE": "Bezig met uploaden dump bestand", - "DESCRIPTION": "Dit proces kan even duren, laat het venster even open alsjeblieft.", - "ASYNC_IN_PROGRESS_TITLE": "Onze Oempa-Loempa's zijn je project aan het importeren", - "ASYNC_IN_PROGRESS_MESSAGE": "Dit proces kan een paar minuten duren
    We sturen je een email als het gereed is", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} van {{totalSize}} geupload", - "ERROR": "Onze Oempa-Loempa's hebben wat problemen bij het importeren van de dump. Probeer het opnieuw.", - "ERROR_TOO_MANY_REQUEST": "Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten.", - "ERROR_MESSAGE": "Onze Oempa-Loempa's hebben wat problemen met het importeren van je dump: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})", - "SYNC_SUCCESS": "Je project werd met succes geïmporteerd", + "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", + "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", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Project aanmaken", - "CREATE_PROJECT_TEXT": "Vers en proper. Spanned!", + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Project aanmaken", + "CREATE_PROJECT": "Create project", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index 7fc8b2bf..7058291e 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Twoje projekty", "PLACEHOLDER_SEARCH": "Szukaj w ...", "ACTION_CREATE_PROJECT": "Stwórz projekt", - "ACTION_IMPORT_PROJECT": "Importuj projekt", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Utwórz projekt", - "TITLE_IMPORT_PROJECT": "Importuj projekt", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Pokaż poprzedni projekt", "TITLE_NEXT_PROJECT": "Pokaż kolejne projekty", "HELP_TITLE": "Taiga strona wsparcia", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Przeciągnij i upuść żeby zmienić kolejność" }, "IMPORT": { - "TITLE": "Importowanie Projektu", - "UPLOADING_FILE": "Umpa Lumpy ładują plik zrzutu", - "DESCRIPTION": "Proces może zająć chwilkę, proszę nie zamykaj okna.", - "ASYNC_IN_PROGRESS_TITLE": "Umpa Lumpy importują projekt", - "ASYNC_IN_PROGRESS_MESSAGE": "To może zając kilka minut.
    Otrzymasz mail gdy wszystko będzie gotowe.", - "UPLOAD_IN_PROGRESS_MESSAGE": "Wysłano {{uploadedSize}} z {{totalSize}}", - "ERROR": "Umpa Lumpy mają problem z importem. Spróbuj ponownie.", - "ERROR_TOO_MANY_REQUEST": "Umpa Lumpy są teraz zajęte a serwer ma zadyszkę. Spróbuj ponownie za chwilę.", - "ERROR_MESSAGE": "Przy imporcie wystąpił następujący problem: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})", - "SYNC_SUCCESS": "Twój projekt zaimportował się prawidłowo!", + "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", + "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", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,17 +1517,17 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Utwórz projekt", - "CREATE_PROJECT_TEXT": "Nowy, zwinny! To takie ekscytujące!", + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Projekt publiczny", - "PRIVATE_PROJECT": "Projekt prywatny", - "CREATE_PROJECT": "Utwórz projekt", - "MAX_PRIVATE_PROJECTS": "Osiągnąłeś maksymalną liczbę prywatnych projektów", - "MAX_PUBLIC_PROJECTS": "Niestety osiągnąłeś maksymalną liczbę publicznych projektów", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" }, "WIKI": { diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index 8dfe75e8..fd02e425 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Seus projetos", "PLACEHOLDER_SEARCH": "Procurar em...", "ACTION_CREATE_PROJECT": "Criar projeto", - "ACTION_IMPORT_PROJECT": "Importar projeto", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Gerenciar projetos", "TITLE_CREATE_PROJECT": "Criar projeto", - "TITLE_IMPORT_PROJECT": "Importar projeto", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Mostrar projetos prévios", "TITLE_NEXT_PROJECT": "Mostrar os próximos projetos", "HELP_TITLE": "Página de Suporte do Taiga", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Seguro e arraste para ordenar" }, "IMPORT": { - "TITLE": "Importando Projeto", - "UPLOADING_FILE": "Enviando arquivo de dump", - "DESCRIPTION": "Este processo pode levar algum tempo, mantenha a janela aberta por favor.", - "ASYNC_IN_PROGRESS_TITLE": "Nossos Oompa Loompas estão importando seu projeto", - "ASYNC_IN_PROGRESS_MESSAGE": "Este processo pode levar alguns minutos
    Enviaremos um email a você assim que estiver pronto", - "UPLOAD_IN_PROGRESS_MESSAGE": "Enviado {{uploadedSize}} de {{totalSize}}", - "ERROR": "Nossos Oompa Loompas tiveram alguns problemas importando os dados do seu dump. Tente novamente.", - "ERROR_TOO_MANY_REQUEST": "Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos.", - "ERROR_MESSAGE": "Nossos Oompa Loompas tiveram alguns problemas ao importar seu arquivo de despejo: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})", - "SYNC_SUCCESS": "Seu projeto foi importado com sucesso", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "O projeto que você está tentando importar tem {{members}} membros e infelizmente seu plano atual tem um limite máximo de {{max_memberships}} membros por projeto. Se você deseja aumentar este limite entre em contato com o administrador.", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Infelizmente, seu plano atual não permite projetos privados adicionais.", "DESC": "O projeto que você está tentando importar é privado. Infelizmente, seu plano plano atual não permite projetos privados adicionais." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Criar Projeto", - "CREATE_PROJECT_TEXT": "Novo em folha. Tão excitante!", - "CHOOSE_TEMPLATE": "Qual template se encaixa melhor no seu projeto?", - "CHOOSE_TEMPLATE_TITLE": "Mais informações sobre templates de projeto", - "CHOOSE_TEMPLATE_INFO": "Mais informações", - "PROJECT_DETAILS": "Detalhes do Projeto", - "PUBLIC_PROJECT": "Projeto Público", - "PRIVATE_PROJECT": "Projeto Privado", - "CREATE_PROJECT": "Criar projeto", - "MAX_PRIVATE_PROJECTS": "Você atingiu o número máximo de projetos privados", - "MAX_PUBLIC_PROJECTS": "Infelizmente, você atingiu o número máximo de projetos públicos", - "CHANGE_PLANS": "mudar planos" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index 606915e0..ba25c5a9 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Ваши проекты", "PLACEHOLDER_SEARCH": "Искать в...", "ACTION_CREATE_PROJECT": "Создать проект", - "ACTION_IMPORT_PROJECT": "Импортировать проект", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Управлять проектами", "TITLE_CREATE_PROJECT": "Создать проект", - "TITLE_IMPORT_PROJECT": "Импортировать проект", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Показать предыдущие проекты", "TITLE_NEXT_PROJECT": "Показать следующие проекты", "HELP_TITLE": "Страница поддержки Taiga", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Можно перетаскивать мышкой" }, "IMPORT": { - "TITLE": "Импорт проекта", - "UPLOADING_FILE": "Загрузить свалочный файл", - "DESCRIPTION": "Этот процесс может занять некоторое время. Пожалуйста, сохраняйте это окно открытым.", - "ASYNC_IN_PROGRESS_TITLE": "Oompa Loompas импортирует ваш проект", - "ASYNC_IN_PROGRESS_MESSAGE": "Этот процесс может занять несколько минут
    Мы отправим вам email, когда всё будет готово", - "UPLOAD_IN_PROGRESS_MESSAGE": "Загружено {{uploadedSize}} размера {{totalSize}}", - "ERROR": "У Oompa Loompas возникли проблемы при импорте резервной копии. Попробуйте еще раз.", - "ERROR_TOO_MANY_REQUEST": "Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут.", - "ERROR_MESSAGE": "У Oompa Loompas возникли проблемы при импорте резервной копии: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})", - "SYNC_SUCCESS": "Импорт проекта выполнен успешно", + "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", + "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", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Создать проект", - "CREATE_PROJECT_TEXT": "Свежий и чистый! Так здóрово!", + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "Больше инфо", + "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Частный проект", - "CREATE_PROJECT": "Создать проект", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 05890756..28880fb9 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Dina projekt", "PLACEHOLDER_SEARCH": "Sök i ...", "ACTION_CREATE_PROJECT": "Skapa projekt", - "ACTION_IMPORT_PROJECT": "Importerar projekt", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Hantera projekt", "TITLE_CREATE_PROJECT": "Skapa projekt", - "TITLE_IMPORT_PROJECT": "Importerar projekt", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Visa tidigare projekt", "TITLE_NEXT_PROJECT": "Visa nästa projekt", "HELP_TITLE": "Taiga hjälpsida", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Dra & släpp för att sortera" }, "IMPORT": { - "TITLE": "Importerar projekt", - "UPLOADING_FILE": "Ladda hämtningsfilen", - "DESCRIPTION": "Den här processen kan ta en liten stund, vänligen försök med fönstret öppet. ", - "ASYNC_IN_PROGRESS_TITLE": "Våra Oompa Loompier importerar ditt projekt", - "ASYNC_IN_PROGRESS_MESSAGE": "Den här processen kan ta några minuter
    . Vi vill skicka dig en e-post när det blir klart. ", - "UPLOAD_IN_PROGRESS_MESSAGE": "Laddat upp {{uploadedSize}} av {{totalSize}}", - "ERROR": "Våra Oompa Loompier har problem med att importera din hämtningsfil. Vänligen försök igen. ", - "ERROR_TOO_MANY_REQUEST": "Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. ", - "ERROR_MESSAGE": "Våra Oompa Loompier har lite problem med att importera dina hämtningsdata: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})", - "SYNC_SUCCESS": "Ditt projekt är korrekt importerad", + "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", + "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", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Skapa projekt", - "CREATE_PROJECT_TEXT": "Fräscht och rent. Så trevligt!", + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Privat Projekt", - "CREATE_PROJECT": "Skapa projekt", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 9b111a85..9f47d8c7 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Projeleriniz", "PLACEHOLDER_SEARCH": "Aranan konum...", "ACTION_CREATE_PROJECT": "Proje Oluştur", - "ACTION_IMPORT_PROJECT": "Projeyi İçe Aktar", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "Projeleri yönet", "TITLE_CREATE_PROJECT": "Proje oluştur", - "TITLE_IMPORT_PROJECT": "Projeyi İçe Aktar", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "Önceki projeleri göster", "TITLE_NEXT_PROJECT": "Sonraki projeleri göster", "HELP_TITLE": "Taiga Destek Sayfası", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Yeniden sıralamak için sürükleyin ve bırakın" }, "IMPORT": { - "TITLE": "Proje İçe Aktarılıyor", - "UPLOADING_FILE": "Döküm dosyanız karşıya yükleniyor", - "DESCRIPTION": "Bu işlem biraz sürecek, lütfen pencereyi kapatmayın.", - "ASYNC_IN_PROGRESS_TITLE": "Bizim honki ponkiler projenizi içeriye aktarıyor", - "ASYNC_IN_PROGRESS_MESSAGE": "Bu işlem bir kaç dakika sürecek
    Hazır olduğunda bir e-posta göndereceğiz", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} in {{uploadedSize}} kadarı karşıya yüklendi", - "ERROR": "Sarı çizmeli memmet ağamız döküm dosyanızı içeri aktarırken birkaç problem yaşadı. Lütfen yeniden deneyin.", - "ERROR_TOO_MANY_REQUEST": "Üzgünüm, bizim honki ponkiler şu anda çok meşgul. Lütfen birkaç dakika içinde yeniden deneyin.", - "ERROR_MESSAGE": "Honki ponkilerimiz döküm dosyanızı içeri aktarırken birkaç problem yaşadı: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin", - "SYNC_SUCCESS": "Projeniz başarıyla içe aktarıldı", + "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", + "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", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Proje Oluştur", - "CREATE_PROJECT_TEXT": "Taze ve temiz. Heycan verici!", + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Proje oluştur", + "CREATE_PROJECT": "Create project", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index 490d6db4..75e46509 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "你的项目", "PLACEHOLDER_SEARCH": "搜索", "ACTION_CREATE_PROJECT": "创建项目", - "ACTION_IMPORT_PROJECT": "导入项目", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "管理项目", "TITLE_CREATE_PROJECT": "创建项目", - "TITLE_IMPORT_PROJECT": "导入项目", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "显示过去项目", "TITLE_NEXT_PROJECT": "显示下一个任务", "HELP_TITLE": "Taiga支持页", @@ -903,19 +903,19 @@ "ACTION_REORDER": "通过拖动来改变显示顺序" }, "IMPORT": { - "TITLE": "导入项目中", - "UPLOADING_FILE": "上传倾倒档案", - "DESCRIPTION": "这个过桯要花点时间,请保持视窗开启", - "ASYNC_IN_PROGRESS_TITLE": "我们正在导入你的项目", - "ASYNC_IN_PROGRESS_MESSAGE": "这个过程要花上一点时间
    当弄好时我们会发给你一封邮件", - "UPLOAD_IN_PROGRESS_MESSAGE": "已上传 {{totalSize}}中的{{uploadedSize}}", - "ERROR": "系统在滙进你倒入的资料时遇上一些问题,请再试一次", - "ERROR_TOO_MANY_REQUEST": "抱歉系统繁忙中,请稍后再试试", - "ERROR_MESSAGE": "我们的系统无法导入你的资料", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统容量上限, 请重传小一点的档案 ({{maxFileSize}})", - "SYNC_SUCCESS": "你的项目已成功导入", + "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", + "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", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "你正在导入的项目有 {{members}} 位成员,不幸的是,根据你当前的计划,每个项目最多允许 {{max_memberships}} 位成员。如果你希望增加这个限制请联系管理员。", + "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "对不起,你当前的计划不允许额外的私有项目", "DESC": "你尝试导入的项目是私有的。不幸的是,你当前的计划不允许额外的私有项目。" @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "创建项目", - "CREATE_PROJECT_TEXT": "清新与整洁,让人兴奋的项目", - "CHOOSE_TEMPLATE": "哪个模板最适合你的项目?", - "CHOOSE_TEMPLATE_TITLE": "了解关于项目模板的更多知识", - "CHOOSE_TEMPLATE_INFO": "更多信息", - "PROJECT_DETAILS": "项目细节", - "PUBLIC_PROJECT": "公开项目", - "PRIVATE_PROJECT": "私有项目", - "CREATE_PROJECT": "创建项目", - "MAX_PRIVATE_PROJECTS": "你已经达到了私有项目的最大成员数目", - "MAX_PUBLIC_PROJECTS": "对不起,你已经达了公开项目的最大成员上限", - "CHANGE_PLANS": "改变计划" + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "CHOOSE_TEMPLATE": "Which template fits your project best?", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Create project", + "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", + "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "CHANGE_PLANS": "change plans" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - 维基 - {{projectName}}", diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 44cec5ac..834179c8 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "你的專案", "PLACEHOLDER_SEARCH": "搜尋", "ACTION_CREATE_PROJECT": "創建專案", - "ACTION_IMPORT_PROJECT": "滙入專案", + "ACTION_IMPORT_PROJECT": "Import project", "MANAGE_PROJECTS": "管理專案", "TITLE_CREATE_PROJECT": "創建專案", - "TITLE_IMPORT_PROJECT": "滙入專案", + "TITLE_IMPORT_PROJECT": "Import project", "TITLE_PRVIOUS_PROJECT": "顯示過去專案", "TITLE_NEXT_PROJECT": "顯示下一個任務", "HELP_TITLE": "Taiga支援頁", @@ -903,17 +903,17 @@ "ACTION_REORDER": "拖移 & 丟到來記錄" }, "IMPORT": { - "TITLE": "滙入專案中", - "UPLOADING_FILE": "上傳傾倒檔案", - "DESCRIPTION": "這個過桯要花點時間,請保持视窗開啟", - "ASYNC_IN_PROGRESS_TITLE": "我們的工程師對你的專案很重要哦", - "ASYNC_IN_PROGRESS_MESSAGE": "這個過程要花上一點時間
    當弄好時我們會發給你一封郵件", - "UPLOAD_IN_PROGRESS_MESSAGE": "已上傳 {{totalSize}}中的{{uploadedSize}} ", - "ERROR": "系統在滙進你倒入的資料時遇上一些問題,請再試一次", - "ERROR_TOO_MANY_REQUEST": "抱歉系統繁忙中,請稍後再試試 ", - "ERROR_MESSAGE": "我們的系統無法滙入你的資料", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})", - "SYNC_SUCCESS": "你的專案已成功滙入", + "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", + "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", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "創建專案", - "CREATE_PROJECT_TEXT": "新鮮與乾淨,太好了", + "SECTION_TITLE_CREATE_PROJECT": "Create Project", + "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "創建專案", + "CREATE_PROJECT": "Create project", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" From 0973796938f0a0cd41d73cf89cfc689b3980ae2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Mon, 20 Feb 2017 17:45:42 +0100 Subject: [PATCH 124/175] Restore repo.create function on repository.coffee --- app/coffee/modules/base/repository.coffee | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/coffee/modules/base/repository.coffee b/app/coffee/modules/base/repository.coffee index 40c4a0be..290bed50 100644 --- a/app/coffee/modules/base/repository.coffee +++ b/app/coffee/modules/base/repository.coffee @@ -37,6 +37,19 @@ class RepositoryService extends taiga.Service resolveUrlForAttributeModel: (model) -> return @urls.resolve(model.getName(), model.parent) + create: (name, data, dataTypes={}, extraParams={}) -> + defered = @q.defer() + url = @urls.resolve(name) + + promise = @http.post(url, JSON.stringify(data), extraParams) + promise.success (_data, _status) => + defered.resolve(@model.make_model(name, _data, null, dataTypes)) + + promise.error (data, status) => + defered.reject(data) + + return defered.promise + remove: (model, params={}) -> defered = @q.defer() url = @.resolveUrlForModel(model) From c4ec54d483a8fba1b9ceec9fbd74aec69ea0dbd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 20 Feb 2017 17:57:22 +0100 Subject: [PATCH 125/175] Update copyright --- app/coffee/app.coffee | 12 ++++++------ app/coffee/classes.coffee | 12 ++++++------ app/coffee/modules/admin.coffee | 12 ++++++------ app/coffee/modules/admin/lightboxes.coffee | 12 ++++++------ app/coffee/modules/admin/memberships.coffee | 12 ++++++------ app/coffee/modules/admin/nav.coffee | 12 ++++++------ app/coffee/modules/admin/project-profile.coffee | 12 ++++++------ app/coffee/modules/admin/project-values.coffee | 12 ++++++------ app/coffee/modules/admin/roles.coffee | 12 ++++++------ app/coffee/modules/admin/third-parties.coffee | 12 ++++++------ app/coffee/modules/auth.coffee | 12 ++++++------ app/coffee/modules/backlog.coffee | 12 ++++++------ app/coffee/modules/backlog/lightboxes.coffee | 12 ++++++------ app/coffee/modules/backlog/main.coffee | 12 ++++++------ app/coffee/modules/backlog/sortable.coffee | 12 ++++++------ app/coffee/modules/backlog/sprints.coffee | 12 ++++++------ app/coffee/modules/base.coffee | 12 ++++++------ app/coffee/modules/base/bind.coffee | 12 ++++++------ app/coffee/modules/base/conf.coffee | 12 ++++++------ app/coffee/modules/base/contrib.coffee | 12 ++++++------ app/coffee/modules/base/filters.coffee | 12 ++++++------ app/coffee/modules/base/http.coffee | 12 ++++++------ app/coffee/modules/base/location.coffee | 12 ++++++------ app/coffee/modules/base/model.coffee | 12 ++++++------ app/coffee/modules/base/navurls.coffee | 12 ++++++------ app/coffee/modules/base/repository.coffee | 12 ++++++------ app/coffee/modules/base/storage.coffee | 12 ++++++------ app/coffee/modules/base/urls.coffee | 12 ++++++------ app/coffee/modules/common.coffee | 12 ++++++------ app/coffee/modules/common/analytics.coffee | 12 ++++++------ app/coffee/modules/common/bind-scope.coffee | 2 +- .../modules/common/compile-html.directive.coffee | 2 +- app/coffee/modules/common/components.coffee | 12 ++++++------ app/coffee/modules/common/confirm.coffee | 12 ++++++------ .../modules/common/custom-field-values.coffee | 12 ++++++------ app/coffee/modules/common/estimation.coffee | 12 ++++++------ app/coffee/modules/common/filters.coffee | 12 ++++++------ app/coffee/modules/common/lightboxes.coffee | 12 ++++++------ app/coffee/modules/common/loader.coffee | 12 ++++++------ app/coffee/modules/common/loading.coffee | 12 ++++++------ app/coffee/modules/common/popovers.coffee | 12 ++++++------ app/coffee/modules/common/raven-logger.coffee | 12 ++++++------ app/coffee/modules/common/tags.coffee | 12 ++++++------ app/coffee/modules/controllerMixins.coffee | 12 ++++++------ app/coffee/modules/epics.coffee | 12 ++++++------ app/coffee/modules/epics/detail.coffee | 12 ++++++------ app/coffee/modules/events.coffee | 12 ++++++------ app/coffee/modules/feedback.coffee | 12 ++++++------ app/coffee/modules/integrations.coffee | 12 ++++++------ app/coffee/modules/issues.coffee | 12 ++++++------ app/coffee/modules/issues/detail.coffee | 12 ++++++------ app/coffee/modules/issues/lightboxes.coffee | 12 ++++++------ app/coffee/modules/issues/list.coffee | 12 ++++++------ app/coffee/modules/kanban.coffee | 12 ++++++------ app/coffee/modules/kanban/kanban-usertories.coffee | 2 +- app/coffee/modules/kanban/main.coffee | 12 ++++++------ app/coffee/modules/kanban/sortable.coffee | 12 ++++++------ app/coffee/modules/plugins.coffee | 12 ++++++------ app/coffee/modules/projects.coffee | 12 ++++++------ app/coffee/modules/projects/lightboxes.coffee | 12 ++++++------ app/coffee/modules/related-tasks.coffee | 12 ++++++------ app/coffee/modules/resources.coffee | 12 ++++++------ .../resources/custom-attributes-values.coffee | 12 ++++++------ .../modules/resources/custom-attributes.coffee | 12 ++++++------ app/coffee/modules/resources/epics.coffee | 12 ++++++------ app/coffee/modules/resources/history.coffee | 12 ++++++------ app/coffee/modules/resources/invitations.coffee | 12 ++++++------ app/coffee/modules/resources/issues.coffee | 12 ++++++------ app/coffee/modules/resources/kanban.coffee | 12 ++++++------ app/coffee/modules/resources/locales.coffee | 12 ++++++------ app/coffee/modules/resources/mdrender.coffee | 12 ++++++------ app/coffee/modules/resources/memberships.coffee | 12 ++++++------ app/coffee/modules/resources/modules.coffee | 2 +- .../modules/resources/notify-policies.coffee | 12 ++++++------ app/coffee/modules/resources/projects.coffee | 12 ++++++------ app/coffee/modules/resources/roles.coffee | 12 ++++++------ app/coffee/modules/resources/search.coffee | 12 ++++++------ app/coffee/modules/resources/sprints.coffee | 12 ++++++------ app/coffee/modules/resources/tasks.coffee | 12 ++++++------ app/coffee/modules/resources/user-settings.coffee | 12 ++++++------ app/coffee/modules/resources/users.coffee | 12 ++++++------ app/coffee/modules/resources/userstories.coffee | 12 ++++++------ app/coffee/modules/resources/webhooklogs.coffee | 2 +- app/coffee/modules/resources/webhooks.coffee | 2 +- app/coffee/modules/resources/wiki.coffee | 12 ++++++------ app/coffee/modules/search.coffee | 12 ++++++------ app/coffee/modules/taskboard.coffee | 12 ++++++------ app/coffee/modules/taskboard/charts.coffee | 12 ++++++------ app/coffee/modules/taskboard/lightboxes.coffee | 12 ++++++------ app/coffee/modules/taskboard/main.coffee | 12 ++++++------ app/coffee/modules/taskboard/sortable.coffee | 12 ++++++------ .../modules/taskboard/taskboard-tasks.coffee | 2 +- app/coffee/modules/tasks.coffee | 12 ++++++------ app/coffee/modules/tasks/detail.coffee | 12 ++++++------ app/coffee/modules/team.coffee | 12 ++++++------ app/coffee/modules/team/main.coffee | 12 ++++++------ app/coffee/modules/user-settings.coffee | 12 ++++++------ .../modules/user-settings/change-password.coffee | 12 ++++++------ app/coffee/modules/user-settings/lightboxes.coffee | 12 ++++++------ app/coffee/modules/user-settings/main.coffee | 12 ++++++------ app/coffee/modules/user-settings/nav.coffee | 12 ++++++------ .../modules/user-settings/notifications.coffee | 12 ++++++------ app/coffee/modules/userstories.coffee | 12 ++++++------ app/coffee/modules/userstories/detail.coffee | 12 ++++++------ app/coffee/modules/wiki.coffee | 12 ++++++------ app/coffee/modules/wiki/main.coffee | 12 ++++++------ app/coffee/modules/wiki/nav.coffee | 12 ++++++------ app/coffee/modules/wiki/pages-list.coffee | 12 ++++++------ app/coffee/utils.coffee | 12 ++++++------ .../assigned-item/assigned-item.directive.coffee | 2 +- .../assigned-to-selector.directive.coffee | 2 +- .../assigned-to/assigned-to.directive.coffee | 2 +- .../attachment-link.directive.coffee | 2 +- .../attachment/attachment-gallery.directive.coffee | 2 +- .../attachment/attachment.directive.coffee | 2 +- .../attachments-full.service.coffee | 2 +- .../attachments-preview.directive.coffee | 2 +- .../attachments-preview.service.coffee | 2 +- .../attachments-sortable.directive.coffee | 2 +- .../auto-select/auto-select.directive.coffee | 2 +- .../components/avatar/avatar.directive.coffee | 2 +- .../belong-to-epics.directive.coffee | 2 +- app/modules/components/bind-code.directive.coffee | 12 ++++++------ .../board-zoom/board-zoom.directive.coffee | 2 +- .../components/card/card.controller.spec.coffee | 2 +- .../components/click-input-file.directive.coffee | 12 ++++++------ .../color-selector.controller.coffee | 2 +- .../color-selector/color-selector.directive.coffee | 2 +- app/modules/components/components.module.coffee | 2 +- .../detail/header/detail-header.directive.coffee | 2 +- .../file-change/file-change.directive.coffee | 2 +- .../components/filter/filter-remote.service.coffee | 2 +- .../filter/filter.controller.spec.coffee | 2 +- .../components/filter/filter.directive.coffee | 2 +- .../components/joy-ride/joy-ride.directive.coffee | 2 +- .../components/joy-ride/joy-ride.service.coffee | 2 +- .../joy-ride/joy-ride.service.spec.coffee | 2 +- .../kanban-board-zoom.directive.coffee | 2 +- .../live-announcement.directive.coffee | 6 +++--- .../project-logo-big-src.directive.coffee | 2 +- .../project-logo-small-src.directive.coffee | 2 +- .../project-menu/project-menu.controller.coffee | 2 +- .../project-menu.controller.spec.coffee | 2 +- .../project-menu/project-menu.directive.coffee | 2 +- .../tag-dropdown/tag-dropdown.directive.coffee | 2 +- .../tag-line-common.controller.coffee | 2 +- .../tag-line-common.directive.coffee | 2 +- .../tag-line-detail.controller.coffee | 2 +- .../tag-line-detail.directive.coffee | 2 +- .../components/tags/tag-line.service.coffee | 2 +- .../components/tags/tag/tag.directive.coffee | 2 +- .../taskboard-zoom/taskboard-zoom.directive.coffee | 2 +- ...vice-and-privacy-policy-notice.directive.coffee | 12 ++++++------ .../vote-button/vote-button.controller.coffee | 2 +- .../vote-button/vote-button.controller.spec.coffee | 2 +- .../vote-button/vote-button.directive.coffee | 2 +- .../watch-button/watch-button.controller.coffee | 2 +- .../watch-button.controller.spec.coffee | 2 +- .../watch-button/watch-button.directive.coffee | 2 +- .../wysiwyg/comment-edit-wysiwyg.directive.coffee | 12 ++++++------ .../wysiwyg/comment-wysiwyg.directive.coffee | 12 ++++++------ .../custom-field-edit-wysiwyg.directive.coffee | 12 ++++++------ .../wysiwyg/item-wysiwyg.directive.coffee | 12 ++++++------ .../wysiwyg-code-hightlighter.service.coffee | 12 ++++++------ .../wysiwyg/wysiwyg-mention.service.coffee | 12 ++++++------ .../components/wysiwyg/wysiwyg.directive.coffee | 12 ++++++------ .../components/wysiwyg/wysiwyg.service.coffee | 12 ++++++------ .../discover-search.directive.coffee | 2 +- .../epics/create-epic/create-epic.directive.coffee | 2 +- .../dashboard/epic-row/epic-row.directive.coffee | 2 +- .../epics-sortable/epics-sortable.directive.coffee | 2 +- .../epics-table/epics-table.directive.coffee | 2 +- .../dashboard/story-row/story-row.directive.coffee | 2 +- app/modules/epics/epics.service.coffee | 2 +- app/modules/epics/epics.service.spec.coffee | 2 +- .../related-userstories-create.directive.coffee | 2 +- .../related-userstories-sortable.directive.coffee | 2 +- .../related-userstories.directive.coffee | 2 +- .../related-userstory-row.directive.coffee | 2 +- .../external-apps/external-app.controller.coffee | 2 +- .../external-app.controller.spec.coffee | 2 +- .../external-apps/external-app.service.coffee | 2 +- .../external-apps/external-app.service.spec.coffee | 2 +- .../external-apps/external-apps.module.coffee | 2 +- app/modules/feedback/feedback.service.coffee | 2 +- app/modules/feedback/feedback.service.spec.coffee | 2 +- .../history/comments/comment.directive.coffee | 2 +- .../history/comments/comments.directive.coffee | 2 +- .../comment-history-lightbox.directive.coffee | 2 +- .../history-entry.directive.coffee | 2 +- .../history-tabs/history-tabs.directive.coffee | 2 +- app/modules/history/history.directive.coffee | 2 +- app/modules/history/history.module.coffee | 2 +- .../history/history/history-diff.directive.coffee | 2 +- .../history/history/history.directive.coffee | 2 +- app/modules/home/duties/duty.directive.coffee | 2 +- app/modules/home/duties/duty.directive.spec.coffee | 2 +- app/modules/home/home.module.coffee | 2 +- app/modules/home/home.service.coffee | 2 +- app/modules/home/home.service.spec.coffee | 2 +- .../home-project-list-directive.spec.coffee | 2 +- .../projects/home-project-list.directive.coffee | 2 +- .../home/working-on/working-on.controller.coffee | 2 +- .../working-on/working-on.controller.spec.coffee | 2 +- .../home/working-on/working-on.directive.coffee | 2 +- .../invite-members-form.controller.spec.coffee | 2 +- .../invite-members-form.directive.coffee | 2 +- .../lightbox-add-members.controller.spec.coffee | 2 +- .../lightbox-add-members.directive.coffee | 2 +- .../suggest-add-members.controller.spec.coffee | 2 +- .../suggest-add-members.directive.coffee | 2 +- .../dropdown-project-list.directive.coffee | 2 +- .../dropdown-project-list.directive.spec.coffee | 2 +- .../dropdown-user/dropdown-user.directive.coffee | 2 +- .../dropdown-user.directive.spec.coffee | 2 +- .../navigation-bar/navigation-bar.directive.coffee | 2 +- .../navigation-bar.directive.spec.coffee | 2 +- .../navigation-bar/navigation-bar.module.coffee | 2 +- .../navigation-bar/navigation-bar.service.coffee | 2 +- .../profile-bar/profile-bar.controller.coffee | 2 +- .../profile-bar/profile-bar.controller.spec.coffee | 2 +- .../profile-bar/profile-bar.directive.coffee | 2 +- .../profile-contacts.controller.coffee | 2 +- .../profile-contacts.controller.spec.coffee | 2 +- .../profile-contacts.directive.coffee | 2 +- .../profile-favs/items/items.directive.coffee | 2 +- .../profile-favs/profile-favs.controller.coffee | 2 +- .../profile-favs.controller.spec.coffee | 2 +- .../profile-favs/profile-favs.directive.coffee | 2 +- .../profile-hints/profile-hints.controller.coffee | 2 +- .../profile-hints.controller.spec.coffee | 2 +- .../profile-hints/profile-hints.directive.coffee | 2 +- .../profile-projects.controller.coffee | 2 +- .../profile-projects.controller.spec.coffee | 2 +- .../profile-projects.directive.coffee | 2 +- .../profile-tab/profile-tab.directive.coffee | 2 +- .../profile-tabs/profile-tabs.controller.coffee | 2 +- .../profile-tabs.controller.spec.coffee | 2 +- .../profile-tabs/profile-tabs.directive.coffee | 2 +- app/modules/profile/profile.controller.coffee | 2 +- app/modules/profile/profile.controller.spec.coffee | 2 +- app/modules/profile/profile.module.coffee | 2 +- .../blocked-project-explanation.directive.coffee | 2 +- .../contact-project-button.controller.coffee | 2 +- .../contact-project-button.controller.spec.coffee | 2 +- .../contact-project-button.directive.coffee | 2 +- .../lb-contact-project.controller.coffee | 2 +- .../lb-contact-project.controller.spec.coffee | 2 +- .../lb-contact-project.directive.coffee | 2 +- .../like-project-button.controller.coffee | 2 +- .../like-project-button.controller.spec.coffee | 2 +- .../like-project-button.directive.coffee | 2 +- .../like-project-button.service.coffee | 2 +- .../like-project-button.service.spec.coffee | 2 +- .../components/sort-projects.directive.coffee | 2 +- .../watch-project-button.controller.coffee | 2 +- .../watch-project-button.controller.spec.coffee | 2 +- .../watch-project-button.directive.coffee | 2 +- .../watch-project-button.service.coffee | 2 +- .../watch-project-button.service.spec.coffee | 2 +- .../asana-import-project-form.controller.coffee | 2 +- .../asana-import-project-form.directive.coffee | 2 +- .../asana-import/asana-import.controller.coffee | 2 +- .../asana-import/asana-import.directive.coffee | 2 +- .../asana-import/asana-import.service.coffee | 2 +- .../create-project-form.controller.coffee | 2 +- .../create-project-form.directive.coffee | 2 +- .../create/create-project.controller.coffee | 2 +- .../create/create-project.controller.spec.coffee | 2 +- .../duplicate/duplicate-project.controller.coffee | 2 +- .../duplicate/duplicate-project.directive.coffee | 2 +- .../github-import-project-form.controller.coffee | 2 +- .../github-import-project-form.directive.coffee | 2 +- .../github-import/github-import.controller.coffee | 2 +- .../github-import/github-import.directive.coffee | 2 +- .../github-import/github-import.service.coffee | 2 +- .../import-project-members.controller.coffee | 2 +- .../import-project-members.directive.coffee | 2 +- .../import-project-selector.controller.coffee | 2 +- .../import-project-selector.directive.coffee | 2 +- .../import-taiga/import-taiga.controller.coffee | 2 +- .../import-taiga/import-taiga.directive.coffee | 2 +- .../create/import/import-project.controller.coffee | 2 +- .../create/import/import-project.directive.coffee | 2 +- .../create/import/import-project.service.coffee | 2 +- .../invite-members.controller.coffee | 2 +- .../invite-members/invite-members.directive.coffee | 2 +- .../single-member/single-member.directive.coffee | 2 +- .../jira-import-project-form.controller.coffee | 2 +- .../jira-import-project-form.directive.coffee | 2 +- .../jira-import/jira-import.controller.coffee | 2 +- .../jira-import/jira-import.directive.coffee | 2 +- .../create/jira-import/jira-import.service.coffee | 2 +- .../select-import-user-lightbox.controller.coffee | 2 +- .../select-import-user-lightbox.directive.coffee | 2 +- .../trello-import-project-form.controller.coffee | 2 +- .../trello-import-project-form.directive.coffee | 2 +- .../trello-import/trello-import.controller.coffee | 2 +- .../trello-import/trello-import.directive.coffee | 2 +- .../trello-import/trello-import.service.coffee | 2 +- .../warning-user-import-lightbox.directive.coffee | 2 +- .../listing/projects-listing.controller.coffee | 2 +- .../projects-listing.controller.spec.coffee | 2 +- .../projects/project/project.controller.coffee | 2 +- .../project/project.controller.spec.coffee | 2 +- app/modules/projects/projects.module.coffee | 2 +- app/modules/projects/projects.service.coffee | 2 +- app/modules/projects/projects.service.spec.coffee | 2 +- .../cant-own-project-explanation.directive.coffee | 2 +- .../transfer/transfer-project.controller.coffee | 2 +- .../transfer-project.controller.spec.coffee | 2 +- .../transfer/transfer-project.directive.coffee | 2 +- .../resources/attachments-resource.service.coffee | 14 +++++++------- .../resources/epics-resource.service.coffee | 2 +- .../external-apps-resource.service.coffee | 2 +- .../resources/importers-resource.service.coffee | 12 ++++++------ .../resources/issues-resource.service.coffee | 2 +- .../resources/projects-resource.service.coffee | 2 +- app/modules/resources/resources.coffee | 2 +- app/modules/resources/resources.module.coffee | 2 +- .../resources/tasks-resource.service.coffee | 2 +- app/modules/resources/user-resource.service.coffee | 2 +- .../resources/users-resource.service.coffee | 2 +- .../resources/userstories-resource.service.coffee | 2 +- app/modules/resources/wiki-resource.service.coffee | 2 +- app/modules/services/app-meta.service.coffee | 2 +- app/modules/services/app-meta.service.spec.coffee | 2 +- .../services/check-permissions.service.coffee | 2 +- .../services/check-permissions.service.spec.coffee | 2 +- app/modules/services/current-user.service.coffee | 2 +- .../services/current-user.service.spec.coffee | 2 +- app/modules/services/error-handling.service.coffee | 2 +- .../services/lightbox-factory.service.coffee | 2 +- .../services/lightbox-factory.service.spec.coffee | 2 +- .../services/paginate-response.service.coffee | 2 +- .../services/paginate-response.service.spec.coffee | 2 +- app/modules/services/project.service.coffee | 2 +- app/modules/services/project.service.spec.coffee | 2 +- app/modules/services/theme.service.coffee | 2 +- app/modules/services/theme.service.spec.coffee | 2 +- app/modules/services/user-activity.service.coffee | 2 +- .../services/user-activity.service.spec.coffee | 2 +- app/modules/services/user.service.coffee | 2 +- app/modules/services/user.service.spec.coffee | 2 +- app/modules/services/xhrError.service.coffee | 2 +- app/modules/services/xhrError.service.spec.coffee | 2 +- .../user-timeline-attachment.directive.coffee | 2 +- .../user-timeline-attachment.directive.spec.coffee | 2 +- .../user-timeline-item-title.service.coffee | 2 +- .../user-timeline-item-title.service.spec.coffee | 2 +- .../user-timeline-item-type.service.coffee | 2 +- .../user-timeline-item-type.service.spec.coffee | 2 +- .../user-timeline-item.directive.coffee | 2 +- ...ser-timeline-pagination-sequence.service.coffee | 2 +- ...imeline-pagination-sequence.service.spec.coffee | 2 +- .../user-timeline/user-timeline.module.coffee | 2 +- .../user-timeline/user-timeline.controller.coffee | 12 ++++++------ .../user-timeline.controller.spec.coffee | 2 +- .../user-timeline/user-timeline.directive.coffee | 2 +- .../user-timeline/user-timeline.service.coffee | 2 +- .../user-timeline.service.spec.coffee | 2 +- app/modules/utils/isolate-click.directive.coffee | 2 +- app/modules/utils/utils.module.coffee | 2 +- .../history/wiki-history-diff.directive.coffee | 2 +- .../history/wiki-history-entry.directive.coffee | 2 +- .../wiki/history/wiki-history.directive.coffee | 2 +- .../wiki/history/wiki-history.module.coffee | 2 +- .../wiki/history/wiki-history.service.coffee | 2 +- scripts/add_licanse_to_coffee_files.py | 2 +- 369 files changed, 952 insertions(+), 952 deletions(-) diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 1b5f35ca..3ee64100 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/classes.coffee b/app/coffee/classes.coffee index 89a12998..9283e935 100644 --- a/app/coffee/classes.coffee +++ b/app/coffee/classes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin.coffee b/app/coffee/modules/admin.coffee index f3a09d06..3fc427df 100644 --- a/app/coffee/modules/admin.coffee +++ b/app/coffee/modules/admin.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/lightboxes.coffee b/app/coffee/modules/admin/lightboxes.coffee index 5f8d632a..54a4c984 100644 --- a/app/coffee/modules/admin/lightboxes.coffee +++ b/app/coffee/modules/admin/lightboxes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/memberships.coffee b/app/coffee/modules/admin/memberships.coffee index e38779cd..e297513f 100644 --- a/app/coffee/modules/admin/memberships.coffee +++ b/app/coffee/modules/admin/memberships.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/nav.coffee b/app/coffee/modules/admin/nav.coffee index e3fc1d71..b932e47d 100644 --- a/app/coffee/modules/admin/nav.coffee +++ b/app/coffee/modules/admin/nav.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/project-profile.coffee b/app/coffee/modules/admin/project-profile.coffee index 61161508..669338b5 100644 --- a/app/coffee/modules/admin/project-profile.coffee +++ b/app/coffee/modules/admin/project-profile.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/project-values.coffee b/app/coffee/modules/admin/project-values.coffee index 7dd31a0f..4cbe826e 100644 --- a/app/coffee/modules/admin/project-values.coffee +++ b/app/coffee/modules/admin/project-values.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index 01c972dd..e66af245 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/admin/third-parties.coffee b/app/coffee/modules/admin/third-parties.coffee index 7b250d24..697af026 100644 --- a/app/coffee/modules/admin/third-parties.coffee +++ b/app/coffee/modules/admin/third-parties.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index ee581f05..242d4ad2 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog.coffee b/app/coffee/modules/backlog.coffee index 173df9a7..fc7b01b6 100644 --- a/app/coffee/modules/backlog.coffee +++ b/app/coffee/modules/backlog.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog/lightboxes.coffee b/app/coffee/modules/backlog/lightboxes.coffee index 0af40673..f332fb86 100644 --- a/app/coffee/modules/backlog/lightboxes.coffee +++ b/app/coffee/modules/backlog/lightboxes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index 4c783cd4..a4a93e75 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog/sortable.coffee b/app/coffee/modules/backlog/sortable.coffee index e5905b18..69272b2d 100644 --- a/app/coffee/modules/backlog/sortable.coffee +++ b/app/coffee/modules/backlog/sortable.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/backlog/sprints.coffee b/app/coffee/modules/backlog/sprints.coffee index 41cd56c0..a1d203fc 100644 --- a/app/coffee/modules/backlog/sprints.coffee +++ b/app/coffee/modules/backlog/sprints.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base.coffee b/app/coffee/modules/base.coffee index c1e4dbed..ba8a3d40 100644 --- a/app/coffee/modules/base.coffee +++ b/app/coffee/modules/base.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/bind.coffee b/app/coffee/modules/base/bind.coffee index 91e6735c..6e82b08b 100644 --- a/app/coffee/modules/base/bind.coffee +++ b/app/coffee/modules/base/bind.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/conf.coffee b/app/coffee/modules/base/conf.coffee index 20f56387..b90f2e9a 100644 --- a/app/coffee/modules/base/conf.coffee +++ b/app/coffee/modules/base/conf.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/contrib.coffee b/app/coffee/modules/base/contrib.coffee index ec0b40b9..e0489a60 100644 --- a/app/coffee/modules/base/contrib.coffee +++ b/app/coffee/modules/base/contrib.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/filters.coffee b/app/coffee/modules/base/filters.coffee index 9b9acc2c..a4ce416b 100644 --- a/app/coffee/modules/base/filters.coffee +++ b/app/coffee/modules/base/filters.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/http.coffee b/app/coffee/modules/base/http.coffee index 57fa8e82..5be2ae43 100644 --- a/app/coffee/modules/base/http.coffee +++ b/app/coffee/modules/base/http.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/location.coffee b/app/coffee/modules/base/location.coffee index 8bfd9905..0747ace2 100644 --- a/app/coffee/modules/base/location.coffee +++ b/app/coffee/modules/base/location.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/model.coffee b/app/coffee/modules/base/model.coffee index d9951174..ad3b7539 100644 --- a/app/coffee/modules/base/model.coffee +++ b/app/coffee/modules/base/model.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/navurls.coffee b/app/coffee/modules/base/navurls.coffee index 28fa20de..e62eefd4 100644 --- a/app/coffee/modules/base/navurls.coffee +++ b/app/coffee/modules/base/navurls.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/repository.coffee b/app/coffee/modules/base/repository.coffee index 290bed50..31c81152 100644 --- a/app/coffee/modules/base/repository.coffee +++ b/app/coffee/modules/base/repository.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/storage.coffee b/app/coffee/modules/base/storage.coffee index c8215712..7c03eae0 100644 --- a/app/coffee/modules/base/storage.coffee +++ b/app/coffee/modules/base/storage.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/base/urls.coffee b/app/coffee/modules/base/urls.coffee index e275390a..fef32c1f 100644 --- a/app/coffee/modules/base/urls.coffee +++ b/app/coffee/modules/base/urls.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common.coffee b/app/coffee/modules/common.coffee index ae4d6c2d..6499272d 100644 --- a/app/coffee/modules/common.coffee +++ b/app/coffee/modules/common.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/analytics.coffee b/app/coffee/modules/common/analytics.coffee index 02950003..1511a58c 100644 --- a/app/coffee/modules/common/analytics.coffee +++ b/app/coffee/modules/common/analytics.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/bind-scope.coffee b/app/coffee/modules/common/bind-scope.coffee index 29f7b4af..4e20020b 100644 --- a/app/coffee/modules/common/bind-scope.coffee +++ b/app/coffee/modules/common/bind-scope.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/coffee/modules/common/compile-html.directive.coffee b/app/coffee/modules/common/compile-html.directive.coffee index 13f66e35..e2d0e835 100644 --- a/app/coffee/modules/common/compile-html.directive.coffee +++ b/app/coffee/modules/common/compile-html.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index dfce9ca7..cd341457 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/confirm.coffee b/app/coffee/modules/common/confirm.coffee index 6c37e262..67227343 100644 --- a/app/coffee/modules/common/confirm.coffee +++ b/app/coffee/modules/common/confirm.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/custom-field-values.coffee b/app/coffee/modules/common/custom-field-values.coffee index 3b164981..8a64ea95 100644 --- a/app/coffee/modules/common/custom-field-values.coffee +++ b/app/coffee/modules/common/custom-field-values.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/estimation.coffee b/app/coffee/modules/common/estimation.coffee index ae108527..a0da4f41 100644 --- a/app/coffee/modules/common/estimation.coffee +++ b/app/coffee/modules/common/estimation.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/filters.coffee b/app/coffee/modules/common/filters.coffee index 6bdffcec..854f1a61 100644 --- a/app/coffee/modules/common/filters.coffee +++ b/app/coffee/modules/common/filters.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index 0507e99d..e4768fdd 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/loader.coffee b/app/coffee/modules/common/loader.coffee index 32eaf16f..fa28eacd 100644 --- a/app/coffee/modules/common/loader.coffee +++ b/app/coffee/modules/common/loader.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/loading.coffee b/app/coffee/modules/common/loading.coffee index 5ee375e2..2e8bcb1e 100644 --- a/app/coffee/modules/common/loading.coffee +++ b/app/coffee/modules/common/loading.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/popovers.coffee b/app/coffee/modules/common/popovers.coffee index 1dd724e6..f8e60d3d 100644 --- a/app/coffee/modules/common/popovers.coffee +++ b/app/coffee/modules/common/popovers.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/raven-logger.coffee b/app/coffee/modules/common/raven-logger.coffee index c6ca9077..393a936a 100644 --- a/app/coffee/modules/common/raven-logger.coffee +++ b/app/coffee/modules/common/raven-logger.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/common/tags.coffee b/app/coffee/modules/common/tags.coffee index 377b795e..88beddeb 100644 --- a/app/coffee/modules/common/tags.coffee +++ b/app/coffee/modules/common/tags.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/controllerMixins.coffee b/app/coffee/modules/controllerMixins.coffee index e383f20d..5c128845 100644 --- a/app/coffee/modules/controllerMixins.coffee +++ b/app/coffee/modules/controllerMixins.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/epics.coffee b/app/coffee/modules/epics.coffee index 743e70d4..1cc3a6f1 100644 --- a/app/coffee/modules/epics.coffee +++ b/app/coffee/modules/epics.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/epics/detail.coffee b/app/coffee/modules/epics/detail.coffee index 71512182..616c1aa8 100644 --- a/app/coffee/modules/epics/detail.coffee +++ b/app/coffee/modules/epics/detail.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/events.coffee b/app/coffee/modules/events.coffee index e492fb36..1d5bd943 100644 --- a/app/coffee/modules/events.coffee +++ b/app/coffee/modules/events.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/feedback.coffee b/app/coffee/modules/feedback.coffee index 7cfabd75..b7adfb21 100644 --- a/app/coffee/modules/feedback.coffee +++ b/app/coffee/modules/feedback.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/integrations.coffee b/app/coffee/modules/integrations.coffee index 7392054e..214d30e7 100644 --- a/app/coffee/modules/integrations.coffee +++ b/app/coffee/modules/integrations.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/issues.coffee b/app/coffee/modules/issues.coffee index 9399ca8e..0792a136 100644 --- a/app/coffee/modules/issues.coffee +++ b/app/coffee/modules/issues.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index 20a7fc69..f74333e0 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/issues/lightboxes.coffee b/app/coffee/modules/issues/lightboxes.coffee index 312c3add..9a51992e 100644 --- a/app/coffee/modules/issues/lightboxes.coffee +++ b/app/coffee/modules/issues/lightboxes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 0f149666..f4c1c565 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/kanban.coffee b/app/coffee/modules/kanban.coffee index 0f0f48f3..c18606a5 100644 --- a/app/coffee/modules/kanban.coffee +++ b/app/coffee/modules/kanban.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/kanban/kanban-usertories.coffee b/app/coffee/modules/kanban/kanban-usertories.coffee index f19b8342..dc699c43 100644 --- a/app/coffee/modules/kanban/kanban-usertories.coffee +++ b/app/coffee/modules/kanban/kanban-usertories.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index 05ac9d1a..b7ad0597 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/kanban/sortable.coffee b/app/coffee/modules/kanban/sortable.coffee index e3e72876..8df444ed 100644 --- a/app/coffee/modules/kanban/sortable.coffee +++ b/app/coffee/modules/kanban/sortable.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/plugins.coffee b/app/coffee/modules/plugins.coffee index b826c25c..b83a5569 100644 --- a/app/coffee/modules/plugins.coffee +++ b/app/coffee/modules/plugins.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/projects.coffee b/app/coffee/modules/projects.coffee index 95f3641c..ecc4f8f6 100644 --- a/app/coffee/modules/projects.coffee +++ b/app/coffee/modules/projects.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/projects/lightboxes.coffee b/app/coffee/modules/projects/lightboxes.coffee index 4d904933..528bbc4e 100644 --- a/app/coffee/modules/projects/lightboxes.coffee +++ b/app/coffee/modules/projects/lightboxes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/related-tasks.coffee b/app/coffee/modules/related-tasks.coffee index d8eede4e..1c180850 100644 --- a/app/coffee/modules/related-tasks.coffee +++ b/app/coffee/modules/related-tasks.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources.coffee b/app/coffee/modules/resources.coffee index c7742a1b..64d8a299 100644 --- a/app/coffee/modules/resources.coffee +++ b/app/coffee/modules/resources.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/custom-attributes-values.coffee b/app/coffee/modules/resources/custom-attributes-values.coffee index 904d506e..a63ca55b 100644 --- a/app/coffee/modules/resources/custom-attributes-values.coffee +++ b/app/coffee/modules/resources/custom-attributes-values.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/custom-attributes.coffee b/app/coffee/modules/resources/custom-attributes.coffee index 88ae4872..3b7f363b 100644 --- a/app/coffee/modules/resources/custom-attributes.coffee +++ b/app/coffee/modules/resources/custom-attributes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/epics.coffee b/app/coffee/modules/resources/epics.coffee index 480395ce..9873fb08 100644 --- a/app/coffee/modules/resources/epics.coffee +++ b/app/coffee/modules/resources/epics.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/history.coffee b/app/coffee/modules/resources/history.coffee index 6e0942b1..690ccf47 100644 --- a/app/coffee/modules/resources/history.coffee +++ b/app/coffee/modules/resources/history.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/invitations.coffee b/app/coffee/modules/resources/invitations.coffee index 50058426..99347e84 100644 --- a/app/coffee/modules/resources/invitations.coffee +++ b/app/coffee/modules/resources/invitations.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/issues.coffee b/app/coffee/modules/resources/issues.coffee index 60ea24b6..b487c822 100644 --- a/app/coffee/modules/resources/issues.coffee +++ b/app/coffee/modules/resources/issues.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/kanban.coffee b/app/coffee/modules/resources/kanban.coffee index 48bd2074..6b86e050 100644 --- a/app/coffee/modules/resources/kanban.coffee +++ b/app/coffee/modules/resources/kanban.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/locales.coffee b/app/coffee/modules/resources/locales.coffee index a53090f5..db5a6e31 100644 --- a/app/coffee/modules/resources/locales.coffee +++ b/app/coffee/modules/resources/locales.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/mdrender.coffee b/app/coffee/modules/resources/mdrender.coffee index 98017b49..2e53047c 100644 --- a/app/coffee/modules/resources/mdrender.coffee +++ b/app/coffee/modules/resources/mdrender.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/memberships.coffee b/app/coffee/modules/resources/memberships.coffee index ab7891e5..cae8ed79 100644 --- a/app/coffee/modules/resources/memberships.coffee +++ b/app/coffee/modules/resources/memberships.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/modules.coffee b/app/coffee/modules/resources/modules.coffee index b1f342f7..ce4d4b77 100644 --- a/app/coffee/modules/resources/modules.coffee +++ b/app/coffee/modules/resources/modules.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/coffee/modules/resources/notify-policies.coffee b/app/coffee/modules/resources/notify-policies.coffee index 34abf634..d67ad90a 100644 --- a/app/coffee/modules/resources/notify-policies.coffee +++ b/app/coffee/modules/resources/notify-policies.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/projects.coffee b/app/coffee/modules/resources/projects.coffee index dcb48a72..1ca6716e 100644 --- a/app/coffee/modules/resources/projects.coffee +++ b/app/coffee/modules/resources/projects.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/roles.coffee b/app/coffee/modules/resources/roles.coffee index f878eda8..3ee12f20 100644 --- a/app/coffee/modules/resources/roles.coffee +++ b/app/coffee/modules/resources/roles.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/search.coffee b/app/coffee/modules/resources/search.coffee index c46bbe33..b521f038 100644 --- a/app/coffee/modules/resources/search.coffee +++ b/app/coffee/modules/resources/search.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/sprints.coffee b/app/coffee/modules/resources/sprints.coffee index 06fadbe1..c0a45676 100644 --- a/app/coffee/modules/resources/sprints.coffee +++ b/app/coffee/modules/resources/sprints.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/tasks.coffee b/app/coffee/modules/resources/tasks.coffee index 63aed001..62ce3e07 100644 --- a/app/coffee/modules/resources/tasks.coffee +++ b/app/coffee/modules/resources/tasks.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/user-settings.coffee b/app/coffee/modules/resources/user-settings.coffee index ee53c6ef..24a59f23 100644 --- a/app/coffee/modules/resources/user-settings.coffee +++ b/app/coffee/modules/resources/user-settings.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/users.coffee b/app/coffee/modules/resources/users.coffee index 6d139693..968f4122 100644 --- a/app/coffee/modules/resources/users.coffee +++ b/app/coffee/modules/resources/users.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/userstories.coffee b/app/coffee/modules/resources/userstories.coffee index 0ad771b7..f3aeb5f4 100644 --- a/app/coffee/modules/resources/userstories.coffee +++ b/app/coffee/modules/resources/userstories.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/resources/webhooklogs.coffee b/app/coffee/modules/resources/webhooklogs.coffee index d33cfecc..3f0511c5 100644 --- a/app/coffee/modules/resources/webhooklogs.coffee +++ b/app/coffee/modules/resources/webhooklogs.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/coffee/modules/resources/webhooks.coffee b/app/coffee/modules/resources/webhooks.coffee index 2f51e540..dae59b37 100644 --- a/app/coffee/modules/resources/webhooks.coffee +++ b/app/coffee/modules/resources/webhooks.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/coffee/modules/resources/wiki.coffee b/app/coffee/modules/resources/wiki.coffee index 8c7beee4..5ef41b24 100644 --- a/app/coffee/modules/resources/wiki.coffee +++ b/app/coffee/modules/resources/wiki.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/search.coffee b/app/coffee/modules/search.coffee index 5eb43aa8..760ea40b 100644 --- a/app/coffee/modules/search.coffee +++ b/app/coffee/modules/search.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard.coffee b/app/coffee/modules/taskboard.coffee index ac09372a..8047a54c 100644 --- a/app/coffee/modules/taskboard.coffee +++ b/app/coffee/modules/taskboard.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard/charts.coffee b/app/coffee/modules/taskboard/charts.coffee index 9e6af226..d482f87b 100644 --- a/app/coffee/modules/taskboard/charts.coffee +++ b/app/coffee/modules/taskboard/charts.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard/lightboxes.coffee b/app/coffee/modules/taskboard/lightboxes.coffee index f162b8fe..df986cf8 100644 --- a/app/coffee/modules/taskboard/lightboxes.coffee +++ b/app/coffee/modules/taskboard/lightboxes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index 80832d9d..10e7be65 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard/sortable.coffee b/app/coffee/modules/taskboard/sortable.coffee index 119fcae0..2e5a291f 100644 --- a/app/coffee/modules/taskboard/sortable.coffee +++ b/app/coffee/modules/taskboard/sortable.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/taskboard/taskboard-tasks.coffee b/app/coffee/modules/taskboard/taskboard-tasks.coffee index bb3ae87a..276f338d 100644 --- a/app/coffee/modules/taskboard/taskboard-tasks.coffee +++ b/app/coffee/modules/taskboard/taskboard-tasks.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/coffee/modules/tasks.coffee b/app/coffee/modules/tasks.coffee index 2062317d..79d17350 100644 --- a/app/coffee/modules/tasks.coffee +++ b/app/coffee/modules/tasks.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/tasks/detail.coffee b/app/coffee/modules/tasks/detail.coffee index c3cc8339..6ed9af5c 100644 --- a/app/coffee/modules/tasks/detail.coffee +++ b/app/coffee/modules/tasks/detail.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/team.coffee b/app/coffee/modules/team.coffee index 8e36614a..1975d76c 100644 --- a/app/coffee/modules/team.coffee +++ b/app/coffee/modules/team.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index becdf04a..fef22c05 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings.coffee b/app/coffee/modules/user-settings.coffee index 1a581ed3..d0e542db 100644 --- a/app/coffee/modules/user-settings.coffee +++ b/app/coffee/modules/user-settings.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/change-password.coffee b/app/coffee/modules/user-settings/change-password.coffee index a08acb8c..dcb2b9fd 100644 --- a/app/coffee/modules/user-settings/change-password.coffee +++ b/app/coffee/modules/user-settings/change-password.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/lightboxes.coffee b/app/coffee/modules/user-settings/lightboxes.coffee index 32f32bce..97791ef6 100644 --- a/app/coffee/modules/user-settings/lightboxes.coffee +++ b/app/coffee/modules/user-settings/lightboxes.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/main.coffee b/app/coffee/modules/user-settings/main.coffee index e1ac9139..7057eaaf 100644 --- a/app/coffee/modules/user-settings/main.coffee +++ b/app/coffee/modules/user-settings/main.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/nav.coffee b/app/coffee/modules/user-settings/nav.coffee index f9762b4a..86f8f2ae 100644 --- a/app/coffee/modules/user-settings/nav.coffee +++ b/app/coffee/modules/user-settings/nav.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/user-settings/notifications.coffee b/app/coffee/modules/user-settings/notifications.coffee index 0cb25f4c..4bc19754 100644 --- a/app/coffee/modules/user-settings/notifications.coffee +++ b/app/coffee/modules/user-settings/notifications.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/userstories.coffee b/app/coffee/modules/userstories.coffee index ae0df58f..8cf5e2db 100644 --- a/app/coffee/modules/userstories.coffee +++ b/app/coffee/modules/userstories.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 6643c9de..56866510 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/wiki.coffee b/app/coffee/modules/wiki.coffee index cf963020..4cdfb10c 100644 --- a/app/coffee/modules/wiki.coffee +++ b/app/coffee/modules/wiki.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index 5eee43b2..88fdcf02 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/wiki/nav.coffee b/app/coffee/modules/wiki/nav.coffee index 671995dd..4193b0f1 100644 --- a/app/coffee/modules/wiki/nav.coffee +++ b/app/coffee/modules/wiki/nav.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/modules/wiki/pages-list.coffee b/app/coffee/modules/wiki/pages-list.coffee index ea85317f..a26603c9 100644 --- a/app/coffee/modules/wiki/pages-list.coffee +++ b/app/coffee/modules/wiki/pages-list.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/coffee/utils.coffee b/app/coffee/utils.coffee index 8a8f0b72..f9ec5c14 100644 --- a/app/coffee/utils.coffee +++ b/app/coffee/utils.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/assigned-to/assigned-item/assigned-item.directive.coffee b/app/modules/components/assigned-to/assigned-item/assigned-item.directive.coffee index 709ba6cc..03eb261f 100644 --- a/app/modules/components/assigned-to/assigned-item/assigned-item.directive.coffee +++ b/app/modules/components/assigned-to/assigned-item/assigned-item.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/assigned-to/assigned-to-selector/assigned-to-selector.directive.coffee b/app/modules/components/assigned-to/assigned-to-selector/assigned-to-selector.directive.coffee index b840e856..27c36326 100644 --- a/app/modules/components/assigned-to/assigned-to-selector/assigned-to-selector.directive.coffee +++ b/app/modules/components/assigned-to/assigned-to-selector/assigned-to-selector.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/assigned-to/assigned-to.directive.coffee b/app/modules/components/assigned-to/assigned-to.directive.coffee index a6ec47aa..06677d6f 100644 --- a/app/modules/components/assigned-to/assigned-to.directive.coffee +++ b/app/modules/components/assigned-to/assigned-to.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/attachment-link/attachment-link.directive.coffee b/app/modules/components/attachment-link/attachment-link.directive.coffee index d1a5d299..603d90ce 100644 --- a/app/modules/components/attachment-link/attachment-link.directive.coffee +++ b/app/modules/components/attachment-link/attachment-link.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/attachment/attachment-gallery.directive.coffee b/app/modules/components/attachment/attachment-gallery.directive.coffee index 2214a893..a2e33bf6 100644 --- a/app/modules/components/attachment/attachment-gallery.directive.coffee +++ b/app/modules/components/attachment/attachment-gallery.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/attachment/attachment.directive.coffee b/app/modules/components/attachment/attachment.directive.coffee index 94202b8a..c84ad680 100644 --- a/app/modules/components/attachment/attachment.directive.coffee +++ b/app/modules/components/attachment/attachment.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/attachments-full/attachments-full.service.coffee b/app/modules/components/attachments-full/attachments-full.service.coffee index 118330c4..759a5e8a 100644 --- a/app/modules/components/attachments-full/attachments-full.service.coffee +++ b/app/modules/components/attachments-full/attachments-full.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/attachments-preview/attachments-preview.directive.coffee b/app/modules/components/attachments-preview/attachments-preview.directive.coffee index 4e6b48cf..dacb39aa 100644 --- a/app/modules/components/attachments-preview/attachments-preview.directive.coffee +++ b/app/modules/components/attachments-preview/attachments-preview.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/attachments-preview/attachments-preview.service.coffee b/app/modules/components/attachments-preview/attachments-preview.service.coffee index 5739e8a0..b282f9b3 100644 --- a/app/modules/components/attachments-preview/attachments-preview.service.coffee +++ b/app/modules/components/attachments-preview/attachments-preview.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/attachments-sortable/attachments-sortable.directive.coffee b/app/modules/components/attachments-sortable/attachments-sortable.directive.coffee index f1e91147..ef1694cf 100644 --- a/app/modules/components/attachments-sortable/attachments-sortable.directive.coffee +++ b/app/modules/components/attachments-sortable/attachments-sortable.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/auto-select/auto-select.directive.coffee b/app/modules/components/auto-select/auto-select.directive.coffee index 5ac889cc..c03a1fd6 100644 --- a/app/modules/components/auto-select/auto-select.directive.coffee +++ b/app/modules/components/auto-select/auto-select.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/avatar/avatar.directive.coffee b/app/modules/components/avatar/avatar.directive.coffee index 96ea925e..5656a8d4 100644 --- a/app/modules/components/avatar/avatar.directive.coffee +++ b/app/modules/components/avatar/avatar.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/belong-to-epics/belong-to-epics.directive.coffee b/app/modules/components/belong-to-epics/belong-to-epics.directive.coffee index 91ffe19e..15032040 100644 --- a/app/modules/components/belong-to-epics/belong-to-epics.directive.coffee +++ b/app/modules/components/belong-to-epics/belong-to-epics.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/bind-code.directive.coffee b/app/modules/components/bind-code.directive.coffee index 6ac0ebed..e333036a 100644 --- a/app/modules/components/bind-code.directive.coffee +++ b/app/modules/components/bind-code.directive.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/board-zoom/board-zoom.directive.coffee b/app/modules/components/board-zoom/board-zoom.directive.coffee index cba9fdcf..51789f40 100644 --- a/app/modules/components/board-zoom/board-zoom.directive.coffee +++ b/app/modules/components/board-zoom/board-zoom.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/card/card.controller.spec.coffee b/app/modules/components/card/card.controller.spec.coffee index 3e2ed30c..b24360b9 100644 --- a/app/modules/components/card/card.controller.spec.coffee +++ b/app/modules/components/card/card.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/click-input-file.directive.coffee b/app/modules/components/click-input-file.directive.coffee index bce23fbc..49d83375 100644 --- a/app/modules/components/click-input-file.directive.coffee +++ b/app/modules/components/click-input-file.directive.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/color-selector/color-selector.controller.coffee b/app/modules/components/color-selector/color-selector.controller.coffee index 47838f23..25bd621e 100644 --- a/app/modules/components/color-selector/color-selector.controller.coffee +++ b/app/modules/components/color-selector/color-selector.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/color-selector/color-selector.directive.coffee b/app/modules/components/color-selector/color-selector.directive.coffee index f020e408..6778666a 100644 --- a/app/modules/components/color-selector/color-selector.directive.coffee +++ b/app/modules/components/color-selector/color-selector.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/components.module.coffee b/app/modules/components/components.module.coffee index 468886b6..d1c526b4 100644 --- a/app/modules/components/components.module.coffee +++ b/app/modules/components/components.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/detail/header/detail-header.directive.coffee b/app/modules/components/detail/header/detail-header.directive.coffee index 10267d0f..3f120659 100644 --- a/app/modules/components/detail/header/detail-header.directive.coffee +++ b/app/modules/components/detail/header/detail-header.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/file-change/file-change.directive.coffee b/app/modules/components/file-change/file-change.directive.coffee index bbd90bfa..aedef73b 100644 --- a/app/modules/components/file-change/file-change.directive.coffee +++ b/app/modules/components/file-change/file-change.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/filter/filter-remote.service.coffee b/app/modules/components/filter/filter-remote.service.coffee index 95435432..a7e66542 100644 --- a/app/modules/components/filter/filter-remote.service.coffee +++ b/app/modules/components/filter/filter-remote.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/filter/filter.controller.spec.coffee b/app/modules/components/filter/filter.controller.spec.coffee index bb9a9140..e273bfbf 100644 --- a/app/modules/components/filter/filter.controller.spec.coffee +++ b/app/modules/components/filter/filter.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/filter/filter.directive.coffee b/app/modules/components/filter/filter.directive.coffee index c781971f..1ddc01af 100644 --- a/app/modules/components/filter/filter.directive.coffee +++ b/app/modules/components/filter/filter.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/joy-ride/joy-ride.directive.coffee b/app/modules/components/joy-ride/joy-ride.directive.coffee index 1f2a79a8..b667aed9 100644 --- a/app/modules/components/joy-ride/joy-ride.directive.coffee +++ b/app/modules/components/joy-ride/joy-ride.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/joy-ride/joy-ride.service.coffee b/app/modules/components/joy-ride/joy-ride.service.coffee index bf22b54b..12c533c3 100644 --- a/app/modules/components/joy-ride/joy-ride.service.coffee +++ b/app/modules/components/joy-ride/joy-ride.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/joy-ride/joy-ride.service.spec.coffee b/app/modules/components/joy-ride/joy-ride.service.spec.coffee index 06e944de..4876b830 100644 --- a/app/modules/components/joy-ride/joy-ride.service.spec.coffee +++ b/app/modules/components/joy-ride/joy-ride.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/kanban-board-zoom/kanban-board-zoom.directive.coffee b/app/modules/components/kanban-board-zoom/kanban-board-zoom.directive.coffee index 435d7c0b..cf613dd0 100644 --- a/app/modules/components/kanban-board-zoom/kanban-board-zoom.directive.coffee +++ b/app/modules/components/kanban-board-zoom/kanban-board-zoom.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/live-announcement/live-announcement.directive.coffee b/app/modules/components/live-announcement/live-announcement.directive.coffee index b175ebf3..0c61e4ad 100644 --- a/app/modules/components/live-announcement/live-announcement.directive.coffee +++ b/app/modules/components/live-announcement/live-announcement.directive.coffee @@ -2,9 +2,9 @@ # Copyright (C) 2014-2015 Andrey Antukh # Copyright (C) 2014-2015 Jesús Espino Garcia # Copyright (C) 2014-2015 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/project-logo-big-src/project-logo-big-src.directive.coffee b/app/modules/components/project-logo-big-src/project-logo-big-src.directive.coffee index 2c271629..85e90f1f 100644 --- a/app/modules/components/project-logo-big-src/project-logo-big-src.directive.coffee +++ b/app/modules/components/project-logo-big-src/project-logo-big-src.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/project-logo-small-src/project-logo-small-src.directive.coffee b/app/modules/components/project-logo-small-src/project-logo-small-src.directive.coffee index 51900e2e..9e4edfb9 100644 --- a/app/modules/components/project-logo-small-src/project-logo-small-src.directive.coffee +++ b/app/modules/components/project-logo-small-src/project-logo-small-src.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/project-menu/project-menu.controller.coffee b/app/modules/components/project-menu/project-menu.controller.coffee index 9ef67946..b7a0b866 100644 --- a/app/modules/components/project-menu/project-menu.controller.coffee +++ b/app/modules/components/project-menu/project-menu.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/project-menu/project-menu.controller.spec.coffee b/app/modules/components/project-menu/project-menu.controller.spec.coffee index 65601c88..9771a85e 100644 --- a/app/modules/components/project-menu/project-menu.controller.spec.coffee +++ b/app/modules/components/project-menu/project-menu.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/project-menu/project-menu.directive.coffee b/app/modules/components/project-menu/project-menu.directive.coffee index ee3da69b..6b39ff7d 100644 --- a/app/modules/components/project-menu/project-menu.directive.coffee +++ b/app/modules/components/project-menu/project-menu.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/tags/tag-dropdown/tag-dropdown.directive.coffee b/app/modules/components/tags/tag-dropdown/tag-dropdown.directive.coffee index 564524a1..723945ef 100644 --- a/app/modules/components/tags/tag-dropdown/tag-dropdown.directive.coffee +++ b/app/modules/components/tags/tag-dropdown/tag-dropdown.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/tags/tag-line-common/tag-line-common.controller.coffee b/app/modules/components/tags/tag-line-common/tag-line-common.controller.coffee index dde598ea..33b069ce 100644 --- a/app/modules/components/tags/tag-line-common/tag-line-common.controller.coffee +++ b/app/modules/components/tags/tag-line-common/tag-line-common.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/tags/tag-line-common/tag-line-common.directive.coffee b/app/modules/components/tags/tag-line-common/tag-line-common.directive.coffee index 1fd9e8f6..f20f210c 100644 --- a/app/modules/components/tags/tag-line-common/tag-line-common.directive.coffee +++ b/app/modules/components/tags/tag-line-common/tag-line-common.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/tags/tag-line-detail/tag-line-detail.controller.coffee b/app/modules/components/tags/tag-line-detail/tag-line-detail.controller.coffee index 5130cac6..349b22e4 100644 --- a/app/modules/components/tags/tag-line-detail/tag-line-detail.controller.coffee +++ b/app/modules/components/tags/tag-line-detail/tag-line-detail.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/tags/tag-line-detail/tag-line-detail.directive.coffee b/app/modules/components/tags/tag-line-detail/tag-line-detail.directive.coffee index 50976ab6..4cb58ab7 100644 --- a/app/modules/components/tags/tag-line-detail/tag-line-detail.directive.coffee +++ b/app/modules/components/tags/tag-line-detail/tag-line-detail.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/tags/tag-line.service.coffee b/app/modules/components/tags/tag-line.service.coffee index f8257b8a..46760652 100644 --- a/app/modules/components/tags/tag-line.service.coffee +++ b/app/modules/components/tags/tag-line.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/tags/tag/tag.directive.coffee b/app/modules/components/tags/tag/tag.directive.coffee index ccd366f1..8fbe1da0 100644 --- a/app/modules/components/tags/tag/tag.directive.coffee +++ b/app/modules/components/tags/tag/tag.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/taskboard-zoom/taskboard-zoom.directive.coffee b/app/modules/components/taskboard-zoom/taskboard-zoom.directive.coffee index aeedeafb..16e06b07 100644 --- a/app/modules/components/taskboard-zoom/taskboard-zoom.directive.coffee +++ b/app/modules/components/taskboard-zoom/taskboard-zoom.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee b/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee index ae8b4b56..f7236786 100644 --- a/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee +++ b/app/modules/components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/vote-button/vote-button.controller.coffee b/app/modules/components/vote-button/vote-button.controller.coffee index 64c4de24..e9cdb8e1 100644 --- a/app/modules/components/vote-button/vote-button.controller.coffee +++ b/app/modules/components/vote-button/vote-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/vote-button/vote-button.controller.spec.coffee b/app/modules/components/vote-button/vote-button.controller.spec.coffee index a0201853..ac2cc030 100644 --- a/app/modules/components/vote-button/vote-button.controller.spec.coffee +++ b/app/modules/components/vote-button/vote-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/vote-button/vote-button.directive.coffee b/app/modules/components/vote-button/vote-button.directive.coffee index 970661c2..f6d95825 100644 --- a/app/modules/components/vote-button/vote-button.directive.coffee +++ b/app/modules/components/vote-button/vote-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/watch-button/watch-button.controller.coffee b/app/modules/components/watch-button/watch-button.controller.coffee index e7cbae9c..7176ebe4 100644 --- a/app/modules/components/watch-button/watch-button.controller.coffee +++ b/app/modules/components/watch-button/watch-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/watch-button/watch-button.controller.spec.coffee b/app/modules/components/watch-button/watch-button.controller.spec.coffee index 77247468..67e3c4ef 100644 --- a/app/modules/components/watch-button/watch-button.controller.spec.coffee +++ b/app/modules/components/watch-button/watch-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/watch-button/watch-button.directive.coffee b/app/modules/components/watch-button/watch-button.directive.coffee index a5797950..aecef621 100644 --- a/app/modules/components/watch-button/watch-button.directive.coffee +++ b/app/modules/components/watch-button/watch-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee index 845b44e5..8c7e7aac 100644 --- a/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/comment-edit-wysiwyg.directive.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee index 7a7ae5bd..73d4421b 100644 --- a/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/comment-wysiwyg.directive.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee index ec79e6b2..384cbc00 100644 --- a/app/modules/components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/wysiwyg/item-wysiwyg.directive.coffee b/app/modules/components/wysiwyg/item-wysiwyg.directive.coffee index e4c6baff..b64ccf0d 100644 --- a/app/modules/components/wysiwyg/item-wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/item-wysiwyg.directive.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee index bdb123a7..2eeee29e 100644 --- a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee b/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee index 3e14aea0..d450d095 100644 --- a/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg-mention.service.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 2d8cfbae..f937f2d6 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/components/wysiwyg/wysiwyg.service.coffee b/app/modules/components/wysiwyg/wysiwyg.service.coffee index c4ee7eba..84b1069b 100644 --- a/app/modules/components/wysiwyg/wysiwyg.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.service.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/discover/discover-search/discover-search.directive.coffee b/app/modules/discover/discover-search/discover-search.directive.coffee index 5f66cbea..c8615731 100644 --- a/app/modules/discover/discover-search/discover-search.directive.coffee +++ b/app/modules/discover/discover-search/discover-search.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/create-epic/create-epic.directive.coffee b/app/modules/epics/create-epic/create-epic.directive.coffee index fda1525d..fccbf221 100644 --- a/app/modules/epics/create-epic/create-epic.directive.coffee +++ b/app/modules/epics/create-epic/create-epic.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/dashboard/epic-row/epic-row.directive.coffee b/app/modules/epics/dashboard/epic-row/epic-row.directive.coffee index cf85a32b..ce59c339 100644 --- a/app/modules/epics/dashboard/epic-row/epic-row.directive.coffee +++ b/app/modules/epics/dashboard/epic-row/epic-row.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/dashboard/epics-sortable/epics-sortable.directive.coffee b/app/modules/epics/dashboard/epics-sortable/epics-sortable.directive.coffee index 53063281..cfa85644 100644 --- a/app/modules/epics/dashboard/epics-sortable/epics-sortable.directive.coffee +++ b/app/modules/epics/dashboard/epics-sortable/epics-sortable.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/dashboard/epics-table/epics-table.directive.coffee b/app/modules/epics/dashboard/epics-table/epics-table.directive.coffee index f072a3e4..65fb8b36 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.directive.coffee +++ b/app/modules/epics/dashboard/epics-table/epics-table.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/dashboard/story-row/story-row.directive.coffee b/app/modules/epics/dashboard/story-row/story-row.directive.coffee index 13195c0a..32ca8908 100644 --- a/app/modules/epics/dashboard/story-row/story-row.directive.coffee +++ b/app/modules/epics/dashboard/story-row/story-row.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/epics.service.coffee b/app/modules/epics/epics.service.coffee index cb611601..59c6541b 100644 --- a/app/modules/epics/epics.service.coffee +++ b/app/modules/epics/epics.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/epics.service.spec.coffee b/app/modules/epics/epics.service.spec.coffee index a173ca10..8959f1a8 100644 --- a/app/modules/epics/epics.service.spec.coffee +++ b/app/modules/epics/epics.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/related-userstories/related-userstories-create/related-userstories-create.directive.coffee b/app/modules/epics/related-userstories/related-userstories-create/related-userstories-create.directive.coffee index 9ecd4a03..5cd7156d 100644 --- a/app/modules/epics/related-userstories/related-userstories-create/related-userstories-create.directive.coffee +++ b/app/modules/epics/related-userstories/related-userstories-create/related-userstories-create.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/related-userstories/related-userstories-sortable/related-userstories-sortable.directive.coffee b/app/modules/epics/related-userstories/related-userstories-sortable/related-userstories-sortable.directive.coffee index 1989e7d5..9dc4118e 100644 --- a/app/modules/epics/related-userstories/related-userstories-sortable/related-userstories-sortable.directive.coffee +++ b/app/modules/epics/related-userstories/related-userstories-sortable/related-userstories-sortable.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/related-userstories/related-userstories.directive.coffee b/app/modules/epics/related-userstories/related-userstories.directive.coffee index e3db9be8..fdcf1fe4 100644 --- a/app/modules/epics/related-userstories/related-userstories.directive.coffee +++ b/app/modules/epics/related-userstories/related-userstories.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/epics/related-userstories/related-userstory-row/related-userstory-row.directive.coffee b/app/modules/epics/related-userstories/related-userstory-row/related-userstory-row.directive.coffee index 02ea4ebd..505cc4b3 100644 --- a/app/modules/epics/related-userstories/related-userstory-row/related-userstory-row.directive.coffee +++ b/app/modules/epics/related-userstories/related-userstory-row/related-userstory-row.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/external-apps/external-app.controller.coffee b/app/modules/external-apps/external-app.controller.coffee index 0e726a87..1f1135c5 100644 --- a/app/modules/external-apps/external-app.controller.coffee +++ b/app/modules/external-apps/external-app.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/external-apps/external-app.controller.spec.coffee b/app/modules/external-apps/external-app.controller.spec.coffee index e19c5b89..c698de7b 100644 --- a/app/modules/external-apps/external-app.controller.spec.coffee +++ b/app/modules/external-apps/external-app.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/external-apps/external-app.service.coffee b/app/modules/external-apps/external-app.service.coffee index 679ddc75..9476df64 100644 --- a/app/modules/external-apps/external-app.service.coffee +++ b/app/modules/external-apps/external-app.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/external-apps/external-app.service.spec.coffee b/app/modules/external-apps/external-app.service.spec.coffee index 0adf305e..7bdc32ff 100644 --- a/app/modules/external-apps/external-app.service.spec.coffee +++ b/app/modules/external-apps/external-app.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/external-apps/external-apps.module.coffee b/app/modules/external-apps/external-apps.module.coffee index a24bf0ce..c89a0050 100644 --- a/app/modules/external-apps/external-apps.module.coffee +++ b/app/modules/external-apps/external-apps.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/feedback/feedback.service.coffee b/app/modules/feedback/feedback.service.coffee index b32a2a0e..f52ebb3a 100644 --- a/app/modules/feedback/feedback.service.coffee +++ b/app/modules/feedback/feedback.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/feedback/feedback.service.spec.coffee b/app/modules/feedback/feedback.service.spec.coffee index 488bdf7b..eca892a0 100644 --- a/app/modules/feedback/feedback.service.spec.coffee +++ b/app/modules/feedback/feedback.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/comments/comment.directive.coffee b/app/modules/history/comments/comment.directive.coffee index 0d001c7d..073cbe58 100644 --- a/app/modules/history/comments/comment.directive.coffee +++ b/app/modules/history/comments/comment.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/comments/comments.directive.coffee b/app/modules/history/comments/comments.directive.coffee index 67d04bd2..68dd40ca 100644 --- a/app/modules/history/comments/comments.directive.coffee +++ b/app/modules/history/comments/comments.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/history-lightbox/comment-history-lightbox.directive.coffee b/app/modules/history/history-lightbox/comment-history-lightbox.directive.coffee index 3fa4b966..2bcd1e4b 100644 --- a/app/modules/history/history-lightbox/comment-history-lightbox.directive.coffee +++ b/app/modules/history/history-lightbox/comment-history-lightbox.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/history-lightbox/history-entry.directive.coffee b/app/modules/history/history-lightbox/history-entry.directive.coffee index f6c573ce..3799ab9f 100644 --- a/app/modules/history/history-lightbox/history-entry.directive.coffee +++ b/app/modules/history/history-lightbox/history-entry.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/history-tabs/history-tabs.directive.coffee b/app/modules/history/history-tabs/history-tabs.directive.coffee index e7e48e74..545ecf19 100644 --- a/app/modules/history/history-tabs/history-tabs.directive.coffee +++ b/app/modules/history/history-tabs/history-tabs.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/history.directive.coffee b/app/modules/history/history.directive.coffee index eebaf063..c0170525 100644 --- a/app/modules/history/history.directive.coffee +++ b/app/modules/history/history.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/history.module.coffee b/app/modules/history/history.module.coffee index 6089087a..194f3c48 100644 --- a/app/modules/history/history.module.coffee +++ b/app/modules/history/history.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/history/history-diff.directive.coffee b/app/modules/history/history/history-diff.directive.coffee index 481c27ec..dfa06f74 100644 --- a/app/modules/history/history/history-diff.directive.coffee +++ b/app/modules/history/history/history-diff.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/history/history/history.directive.coffee b/app/modules/history/history/history.directive.coffee index 40862178..1ea979d9 100644 --- a/app/modules/history/history/history.directive.coffee +++ b/app/modules/history/history/history.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/duties/duty.directive.coffee b/app/modules/home/duties/duty.directive.coffee index e4f40268..4ca2cb65 100644 --- a/app/modules/home/duties/duty.directive.coffee +++ b/app/modules/home/duties/duty.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/duties/duty.directive.spec.coffee b/app/modules/home/duties/duty.directive.spec.coffee index ff797881..9ca24ded 100644 --- a/app/modules/home/duties/duty.directive.spec.coffee +++ b/app/modules/home/duties/duty.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/home.module.coffee b/app/modules/home/home.module.coffee index a5152998..7c0d18f1 100644 --- a/app/modules/home/home.module.coffee +++ b/app/modules/home/home.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/home.service.coffee b/app/modules/home/home.service.coffee index f6a9e69b..06a9e89f 100644 --- a/app/modules/home/home.service.coffee +++ b/app/modules/home/home.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/home.service.spec.coffee b/app/modules/home/home.service.spec.coffee index 30f605b3..c1fb818d 100644 --- a/app/modules/home/home.service.spec.coffee +++ b/app/modules/home/home.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/projects/home-project-list-directive.spec.coffee b/app/modules/home/projects/home-project-list-directive.spec.coffee index 877d575c..ac895c46 100644 --- a/app/modules/home/projects/home-project-list-directive.spec.coffee +++ b/app/modules/home/projects/home-project-list-directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/projects/home-project-list.directive.coffee b/app/modules/home/projects/home-project-list.directive.coffee index f6506f68..9a820c3c 100644 --- a/app/modules/home/projects/home-project-list.directive.coffee +++ b/app/modules/home/projects/home-project-list.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/working-on/working-on.controller.coffee b/app/modules/home/working-on/working-on.controller.coffee index b02d341d..25c56c15 100644 --- a/app/modules/home/working-on/working-on.controller.coffee +++ b/app/modules/home/working-on/working-on.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/working-on/working-on.controller.spec.coffee b/app/modules/home/working-on/working-on.controller.spec.coffee index d255ab18..a91c5555 100644 --- a/app/modules/home/working-on/working-on.controller.spec.coffee +++ b/app/modules/home/working-on/working-on.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/home/working-on/working-on.directive.coffee b/app/modules/home/working-on/working-on.directive.coffee index 909f0669..c93ef816 100644 --- a/app/modules/home/working-on/working-on.directive.coffee +++ b/app/modules/home/working-on/working-on.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee b/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee index d356f95e..ffae1ce0 100644 --- a/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee +++ b/app/modules/invite-members/invite-members-form/invite-members-form.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/invite-members/invite-members-form/invite-members-form.directive.coffee b/app/modules/invite-members/invite-members-form/invite-members-form.directive.coffee index 4afd40bd..8bbe8d9f 100644 --- a/app/modules/invite-members/invite-members-form/invite-members-form.directive.coffee +++ b/app/modules/invite-members/invite-members-form/invite-members-form.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/invite-members/lightbox-add-members.controller.spec.coffee b/app/modules/invite-members/lightbox-add-members.controller.spec.coffee index edec3801..d1a6fbdd 100644 --- a/app/modules/invite-members/lightbox-add-members.controller.spec.coffee +++ b/app/modules/invite-members/lightbox-add-members.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/invite-members/lightbox-add-members.directive.coffee b/app/modules/invite-members/lightbox-add-members.directive.coffee index a3eb9932..44778fd4 100644 --- a/app/modules/invite-members/lightbox-add-members.directive.coffee +++ b/app/modules/invite-members/lightbox-add-members.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.spec.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.spec.coffee index 42e5e356..40e65a2d 100644 --- a/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.spec.coffee +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee index 9a4126d7..beb9d9cb 100644 --- a/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee +++ b/app/modules/invite-members/suggest-add-members/suggest-add-members.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee index 5d6cc400..6c5c3f3c 100644 --- a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee +++ b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.spec.coffee b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.spec.coffee index 56bf5b94..71b910cc 100644 --- a/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.spec.coffee +++ b/app/modules/navigation-bar/dropdown-project-list/dropdown-project-list.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee index 6602996e..effab3b1 100644 --- a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee +++ b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.spec.coffee b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.spec.coffee index 87287d6a..f991e3f7 100644 --- a/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.spec.coffee +++ b/app/modules/navigation-bar/dropdown-user/dropdown-user.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/navigation-bar/navigation-bar.directive.coffee b/app/modules/navigation-bar/navigation-bar.directive.coffee index 47b0da51..78632ad4 100644 --- a/app/modules/navigation-bar/navigation-bar.directive.coffee +++ b/app/modules/navigation-bar/navigation-bar.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/navigation-bar/navigation-bar.directive.spec.coffee b/app/modules/navigation-bar/navigation-bar.directive.spec.coffee index d8742bfe..661b09dc 100644 --- a/app/modules/navigation-bar/navigation-bar.directive.spec.coffee +++ b/app/modules/navigation-bar/navigation-bar.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/navigation-bar/navigation-bar.module.coffee b/app/modules/navigation-bar/navigation-bar.module.coffee index 94481f23..4728cea5 100644 --- a/app/modules/navigation-bar/navigation-bar.module.coffee +++ b/app/modules/navigation-bar/navigation-bar.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/navigation-bar/navigation-bar.service.coffee b/app/modules/navigation-bar/navigation-bar.service.coffee index c043fa4f..da27907d 100644 --- a/app/modules/navigation-bar/navigation-bar.service.coffee +++ b/app/modules/navigation-bar/navigation-bar.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-bar/profile-bar.controller.coffee b/app/modules/profile/profile-bar/profile-bar.controller.coffee index f317b71f..f790b39b 100644 --- a/app/modules/profile/profile-bar/profile-bar.controller.coffee +++ b/app/modules/profile/profile-bar/profile-bar.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-bar/profile-bar.controller.spec.coffee b/app/modules/profile/profile-bar/profile-bar.controller.spec.coffee index 66c83ac5..8f9b1134 100644 --- a/app/modules/profile/profile-bar/profile-bar.controller.spec.coffee +++ b/app/modules/profile/profile-bar/profile-bar.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-bar/profile-bar.directive.coffee b/app/modules/profile/profile-bar/profile-bar.directive.coffee index 8e9a2a51..7a331f9b 100644 --- a/app/modules/profile/profile-bar/profile-bar.directive.coffee +++ b/app/modules/profile/profile-bar/profile-bar.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-contacts/profile-contacts.controller.coffee b/app/modules/profile/profile-contacts/profile-contacts.controller.coffee index 81fa0e45..20c39713 100644 --- a/app/modules/profile/profile-contacts/profile-contacts.controller.coffee +++ b/app/modules/profile/profile-contacts/profile-contacts.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-contacts/profile-contacts.controller.spec.coffee b/app/modules/profile/profile-contacts/profile-contacts.controller.spec.coffee index 2c265083..c2d91a2e 100644 --- a/app/modules/profile/profile-contacts/profile-contacts.controller.spec.coffee +++ b/app/modules/profile/profile-contacts/profile-contacts.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-contacts/profile-contacts.directive.coffee b/app/modules/profile/profile-contacts/profile-contacts.directive.coffee index 3fca94c3..ac541d8b 100644 --- a/app/modules/profile/profile-contacts/profile-contacts.directive.coffee +++ b/app/modules/profile/profile-contacts/profile-contacts.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-favs/items/items.directive.coffee b/app/modules/profile/profile-favs/items/items.directive.coffee index 8d1a437a..0cf607b1 100644 --- a/app/modules/profile/profile-favs/items/items.directive.coffee +++ b/app/modules/profile/profile-favs/items/items.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-favs/profile-favs.controller.coffee b/app/modules/profile/profile-favs/profile-favs.controller.coffee index 2fc3ac7c..d9a5213d 100644 --- a/app/modules/profile/profile-favs/profile-favs.controller.coffee +++ b/app/modules/profile/profile-favs/profile-favs.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-favs/profile-favs.controller.spec.coffee b/app/modules/profile/profile-favs/profile-favs.controller.spec.coffee index a761fe64..fceaf51f 100644 --- a/app/modules/profile/profile-favs/profile-favs.controller.spec.coffee +++ b/app/modules/profile/profile-favs/profile-favs.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-favs/profile-favs.directive.coffee b/app/modules/profile/profile-favs/profile-favs.directive.coffee index 267236a0..a9e6644e 100644 --- a/app/modules/profile/profile-favs/profile-favs.directive.coffee +++ b/app/modules/profile/profile-favs/profile-favs.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-hints/profile-hints.controller.coffee b/app/modules/profile/profile-hints/profile-hints.controller.coffee index 11991f95..54daaaa8 100644 --- a/app/modules/profile/profile-hints/profile-hints.controller.coffee +++ b/app/modules/profile/profile-hints/profile-hints.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-hints/profile-hints.controller.spec.coffee b/app/modules/profile/profile-hints/profile-hints.controller.spec.coffee index c91eea4d..3bc87391 100644 --- a/app/modules/profile/profile-hints/profile-hints.controller.spec.coffee +++ b/app/modules/profile/profile-hints/profile-hints.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-hints/profile-hints.directive.coffee b/app/modules/profile/profile-hints/profile-hints.directive.coffee index 4383b501..b4a64d56 100644 --- a/app/modules/profile/profile-hints/profile-hints.directive.coffee +++ b/app/modules/profile/profile-hints/profile-hints.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-projects/profile-projects.controller.coffee b/app/modules/profile/profile-projects/profile-projects.controller.coffee index bd43164d..1b18e742 100644 --- a/app/modules/profile/profile-projects/profile-projects.controller.coffee +++ b/app/modules/profile/profile-projects/profile-projects.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee b/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee index 604c67b9..b35bfcff 100644 --- a/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee +++ b/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-projects/profile-projects.directive.coffee b/app/modules/profile/profile-projects/profile-projects.directive.coffee index 2236e563..99eed514 100644 --- a/app/modules/profile/profile-projects/profile-projects.directive.coffee +++ b/app/modules/profile/profile-projects/profile-projects.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-tab/profile-tab.directive.coffee b/app/modules/profile/profile-tab/profile-tab.directive.coffee index 308a97ba..1bfd39ca 100644 --- a/app/modules/profile/profile-tab/profile-tab.directive.coffee +++ b/app/modules/profile/profile-tab/profile-tab.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-tabs/profile-tabs.controller.coffee b/app/modules/profile/profile-tabs/profile-tabs.controller.coffee index 3c32a897..a130d2a9 100644 --- a/app/modules/profile/profile-tabs/profile-tabs.controller.coffee +++ b/app/modules/profile/profile-tabs/profile-tabs.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-tabs/profile-tabs.controller.spec.coffee b/app/modules/profile/profile-tabs/profile-tabs.controller.spec.coffee index f8b1382f..08143102 100644 --- a/app/modules/profile/profile-tabs/profile-tabs.controller.spec.coffee +++ b/app/modules/profile/profile-tabs/profile-tabs.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile-tabs/profile-tabs.directive.coffee b/app/modules/profile/profile-tabs/profile-tabs.directive.coffee index 2ccc23d5..47846161 100644 --- a/app/modules/profile/profile-tabs/profile-tabs.directive.coffee +++ b/app/modules/profile/profile-tabs/profile-tabs.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile.controller.coffee b/app/modules/profile/profile.controller.coffee index d275db72..c5234f23 100644 --- a/app/modules/profile/profile.controller.coffee +++ b/app/modules/profile/profile.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile.controller.spec.coffee b/app/modules/profile/profile.controller.spec.coffee index c306682a..a10fac63 100644 --- a/app/modules/profile/profile.controller.spec.coffee +++ b/app/modules/profile/profile.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/profile/profile.module.coffee b/app/modules/profile/profile.module.coffee index 4654dbc1..89167125 100644 --- a/app/modules/profile/profile.module.coffee +++ b/app/modules/profile/profile.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/blocked-project-explanation.directive.coffee b/app/modules/projects/components/blocked-project-explanation.directive.coffee index fac3ed91..fe266e9b 100644 --- a/app/modules/projects/components/blocked-project-explanation.directive.coffee +++ b/app/modules/projects/components/blocked-project-explanation.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/contact-project-button/contact-project-button.controller.coffee b/app/modules/projects/components/contact-project-button/contact-project-button.controller.coffee index 839b28b2..da8e0ec1 100644 --- a/app/modules/projects/components/contact-project-button/contact-project-button.controller.coffee +++ b/app/modules/projects/components/contact-project-button/contact-project-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/contact-project-button/contact-project-button.controller.spec.coffee b/app/modules/projects/components/contact-project-button/contact-project-button.controller.spec.coffee index 13c42bc6..58926118 100644 --- a/app/modules/projects/components/contact-project-button/contact-project-button.controller.spec.coffee +++ b/app/modules/projects/components/contact-project-button/contact-project-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/contact-project-button/contact-project-button.directive.coffee b/app/modules/projects/components/contact-project-button/contact-project-button.directive.coffee index ed41564f..fbe00106 100644 --- a/app/modules/projects/components/contact-project-button/contact-project-button.directive.coffee +++ b/app/modules/projects/components/contact-project-button/contact-project-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.coffee b/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.coffee index 33657083..760babd4 100644 --- a/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.coffee +++ b/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.spec.coffee b/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.spec.coffee index 6700e424..9fe479d7 100644 --- a/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.spec.coffee +++ b/app/modules/projects/components/lb-contact-project/lb-contact-project.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/lb-contact-project/lb-contact-project.directive.coffee b/app/modules/projects/components/lb-contact-project/lb-contact-project.directive.coffee index 8a8bd88f..56ee7767 100644 --- a/app/modules/projects/components/lb-contact-project/lb-contact-project.directive.coffee +++ b/app/modules/projects/components/lb-contact-project/lb-contact-project.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/like-project-button/like-project-button.controller.coffee b/app/modules/projects/components/like-project-button/like-project-button.controller.coffee index 0322e17d..1e6caf93 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.controller.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/like-project-button/like-project-button.controller.spec.coffee b/app/modules/projects/components/like-project-button/like-project-button.controller.spec.coffee index f29bbc33..8b9a8ce2 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.controller.spec.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/like-project-button/like-project-button.directive.coffee b/app/modules/projects/components/like-project-button/like-project-button.directive.coffee index 7b9c1d60..08e0a979 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.directive.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/like-project-button/like-project-button.service.coffee b/app/modules/projects/components/like-project-button/like-project-button.service.coffee index d8e5a7fa..4ebfc966 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.service.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/like-project-button/like-project-button.service.spec.coffee b/app/modules/projects/components/like-project-button/like-project-button.service.spec.coffee index cfb3285b..6353f040 100644 --- a/app/modules/projects/components/like-project-button/like-project-button.service.spec.coffee +++ b/app/modules/projects/components/like-project-button/like-project-button.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/sort-projects.directive.coffee b/app/modules/projects/components/sort-projects.directive.coffee index d432de2d..10194ba8 100644 --- a/app/modules/projects/components/sort-projects.directive.coffee +++ b/app/modules/projects/components/sort-projects.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.controller.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.controller.coffee index e24316a4..ba337380 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.controller.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.controller.spec.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.controller.spec.coffee index 1d6ce2fe..3e36f46e 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.controller.spec.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.directive.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.directive.coffee index 048554cb..a3c57996 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.directive.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.service.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.service.coffee index 52f4ec22..ff42b864 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.service.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/components/watch-project-button/watch-project-button.service.spec.coffee b/app/modules/projects/components/watch-project-button/watch-project-button.service.spec.coffee index a782887d..d8522144 100644 --- a/app/modules/projects/components/watch-project-button/watch-project-button.service.spec.coffee +++ b/app/modules/projects/components/watch-project-button/watch-project-button.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee index d108f026..fbd49dea 100644 --- a/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee +++ b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee index 5c3879ca..be627013 100644 --- a/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee +++ b/app/modules/projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/asana-import/asana-import.controller.coffee b/app/modules/projects/create/asana-import/asana-import.controller.coffee index 51e61a5a..139d62b9 100644 --- a/app/modules/projects/create/asana-import/asana-import.controller.coffee +++ b/app/modules/projects/create/asana-import/asana-import.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/asana-import/asana-import.directive.coffee b/app/modules/projects/create/asana-import/asana-import.directive.coffee index 18a8308e..a8b0b40d 100644 --- a/app/modules/projects/create/asana-import/asana-import.directive.coffee +++ b/app/modules/projects/create/asana-import/asana-import.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/asana-import/asana-import.service.coffee b/app/modules/projects/create/asana-import/asana-import.service.coffee index e3723fec..7bfb88df 100644 --- a/app/modules/projects/create/asana-import/asana-import.service.coffee +++ b/app/modules/projects/create/asana-import/asana-import.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/create-project-form/create-project-form.controller.coffee b/app/modules/projects/create/create-project-form/create-project-form.controller.coffee index 1a4c235d..1632f7a6 100644 --- a/app/modules/projects/create/create-project-form/create-project-form.controller.coffee +++ b/app/modules/projects/create/create-project-form/create-project-form.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/create-project-form/create-project-form.directive.coffee b/app/modules/projects/create/create-project-form/create-project-form.directive.coffee index c3853d83..f462ce5f 100644 --- a/app/modules/projects/create/create-project-form/create-project-form.directive.coffee +++ b/app/modules/projects/create/create-project-form/create-project-form.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/create-project.controller.coffee b/app/modules/projects/create/create-project.controller.coffee index 7678aa68..d77903c8 100644 --- a/app/modules/projects/create/create-project.controller.coffee +++ b/app/modules/projects/create/create-project.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/create-project.controller.spec.coffee b/app/modules/projects/create/create-project.controller.spec.coffee index 385e5652..fc3faadc 100644 --- a/app/modules/projects/create/create-project.controller.spec.coffee +++ b/app/modules/projects/create/create-project.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/duplicate/duplicate-project.controller.coffee b/app/modules/projects/create/duplicate/duplicate-project.controller.coffee index f84bc340..278f37f7 100644 --- a/app/modules/projects/create/duplicate/duplicate-project.controller.coffee +++ b/app/modules/projects/create/duplicate/duplicate-project.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/duplicate/duplicate-project.directive.coffee b/app/modules/projects/create/duplicate/duplicate-project.directive.coffee index c19d2f59..4a90babc 100644 --- a/app/modules/projects/create/duplicate/duplicate-project.directive.coffee +++ b/app/modules/projects/create/duplicate/duplicate-project.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee index 30256e31..f8559303 100644 --- a/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee +++ b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee index 2761e649..c619f254 100644 --- a/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee +++ b/app/modules/projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/github-import/github-import.controller.coffee b/app/modules/projects/create/github-import/github-import.controller.coffee index d4053093..5ea46878 100644 --- a/app/modules/projects/create/github-import/github-import.controller.coffee +++ b/app/modules/projects/create/github-import/github-import.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/github-import/github-import.directive.coffee b/app/modules/projects/create/github-import/github-import.directive.coffee index bb02064f..7d23b042 100644 --- a/app/modules/projects/create/github-import/github-import.directive.coffee +++ b/app/modules/projects/create/github-import/github-import.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/github-import/github-import.service.coffee b/app/modules/projects/create/github-import/github-import.service.coffee index 992c3a62..5735f862 100644 --- a/app/modules/projects/create/github-import/github-import.service.coffee +++ b/app/modules/projects/create/github-import/github-import.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee index 77922f41..04120b8e 100644 --- a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee +++ b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import-project-members/import-project-members.directive.coffee b/app/modules/projects/create/import-project-members/import-project-members.directive.coffee index 122b4fb6..5a39d2a8 100644 --- a/app/modules/projects/create/import-project-members/import-project-members.directive.coffee +++ b/app/modules/projects/create/import-project-members/import-project-members.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import-project-selector/import-project-selector.controller.coffee b/app/modules/projects/create/import-project-selector/import-project-selector.controller.coffee index 28628852..0201c1da 100644 --- a/app/modules/projects/create/import-project-selector/import-project-selector.controller.coffee +++ b/app/modules/projects/create/import-project-selector/import-project-selector.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee b/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee index c13dadb5..3bac4cab 100644 --- a/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee +++ b/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import-taiga/import-taiga.controller.coffee b/app/modules/projects/create/import-taiga/import-taiga.controller.coffee index 47b0a84a..65709af6 100644 --- a/app/modules/projects/create/import-taiga/import-taiga.controller.coffee +++ b/app/modules/projects/create/import-taiga/import-taiga.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import-taiga/import-taiga.directive.coffee b/app/modules/projects/create/import-taiga/import-taiga.directive.coffee index fb6684d9..c9274943 100644 --- a/app/modules/projects/create/import-taiga/import-taiga.directive.coffee +++ b/app/modules/projects/create/import-taiga/import-taiga.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import/import-project.controller.coffee b/app/modules/projects/create/import/import-project.controller.coffee index 88bda138..1eb492b2 100644 --- a/app/modules/projects/create/import/import-project.controller.coffee +++ b/app/modules/projects/create/import/import-project.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import/import-project.directive.coffee b/app/modules/projects/create/import/import-project.directive.coffee index d68a463d..f32adec7 100644 --- a/app/modules/projects/create/import/import-project.directive.coffee +++ b/app/modules/projects/create/import/import-project.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/import/import-project.service.coffee b/app/modules/projects/create/import/import-project.service.coffee index 4759fd57..f3a01d87 100644 --- a/app/modules/projects/create/import/import-project.service.coffee +++ b/app/modules/projects/create/import/import-project.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/invite-members/invite-members.controller.coffee b/app/modules/projects/create/invite-members/invite-members.controller.coffee index a1f61385..180cf5ff 100644 --- a/app/modules/projects/create/invite-members/invite-members.controller.coffee +++ b/app/modules/projects/create/invite-members/invite-members.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/invite-members/invite-members.directive.coffee b/app/modules/projects/create/invite-members/invite-members.directive.coffee index 0867cab3..36a8e901 100644 --- a/app/modules/projects/create/invite-members/invite-members.directive.coffee +++ b/app/modules/projects/create/invite-members/invite-members.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/invite-members/single-member/single-member.directive.coffee b/app/modules/projects/create/invite-members/single-member/single-member.directive.coffee index ce63d178..dbf63670 100644 --- a/app/modules/projects/create/invite-members/single-member/single-member.directive.coffee +++ b/app/modules/projects/create/invite-members/single-member/single-member.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee index 2f99c010..97d2cd6c 100644 --- a/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee +++ b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee index 72806f9e..601d015b 100644 --- a/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee +++ b/app/modules/projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/jira-import/jira-import.controller.coffee b/app/modules/projects/create/jira-import/jira-import.controller.coffee index ec9c0b20..95238043 100644 --- a/app/modules/projects/create/jira-import/jira-import.controller.coffee +++ b/app/modules/projects/create/jira-import/jira-import.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/jira-import/jira-import.directive.coffee b/app/modules/projects/create/jira-import/jira-import.directive.coffee index 70860d9e..33132680 100644 --- a/app/modules/projects/create/jira-import/jira-import.directive.coffee +++ b/app/modules/projects/create/jira-import/jira-import.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/jira-import/jira-import.service.coffee b/app/modules/projects/create/jira-import/jira-import.service.coffee index 57ed346b..f9fcbe2e 100644 --- a/app/modules/projects/create/jira-import/jira-import.service.coffee +++ b/app/modules/projects/create/jira-import/jira-import.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee index f151b175..25eba43f 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee index 342eceb4..7ea31edd 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee index aba397cd..c4fb6b98 100644 --- a/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee +++ b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee index f4b29e4a..91cfbfb1 100644 --- a/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee +++ b/app/modules/projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/trello-import/trello-import.controller.coffee b/app/modules/projects/create/trello-import/trello-import.controller.coffee index 0d7782b6..b061d77b 100644 --- a/app/modules/projects/create/trello-import/trello-import.controller.coffee +++ b/app/modules/projects/create/trello-import/trello-import.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/trello-import/trello-import.directive.coffee b/app/modules/projects/create/trello-import/trello-import.directive.coffee index 77fca833..63414e3f 100644 --- a/app/modules/projects/create/trello-import/trello-import.directive.coffee +++ b/app/modules/projects/create/trello-import/trello-import.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/trello-import/trello-import.service.coffee b/app/modules/projects/create/trello-import/trello-import.service.coffee index aa8a2ab3..6792540b 100644 --- a/app/modules/projects/create/trello-import/trello-import.service.coffee +++ b/app/modules/projects/create/trello-import/trello-import.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee index 7c34379c..16781dda 100644 --- a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee +++ b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/listing/projects-listing.controller.coffee b/app/modules/projects/listing/projects-listing.controller.coffee index a78b765c..64e3a36f 100644 --- a/app/modules/projects/listing/projects-listing.controller.coffee +++ b/app/modules/projects/listing/projects-listing.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/listing/projects-listing.controller.spec.coffee b/app/modules/projects/listing/projects-listing.controller.spec.coffee index 7331624a..6742e193 100644 --- a/app/modules/projects/listing/projects-listing.controller.spec.coffee +++ b/app/modules/projects/listing/projects-listing.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/project/project.controller.coffee b/app/modules/projects/project/project.controller.coffee index 18820098..355787e7 100644 --- a/app/modules/projects/project/project.controller.coffee +++ b/app/modules/projects/project/project.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/project/project.controller.spec.coffee b/app/modules/projects/project/project.controller.spec.coffee index dfcf812b..11258ca9 100644 --- a/app/modules/projects/project/project.controller.spec.coffee +++ b/app/modules/projects/project/project.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/projects.module.coffee b/app/modules/projects/projects.module.coffee index ab40dd05..f161970f 100644 --- a/app/modules/projects/projects.module.coffee +++ b/app/modules/projects/projects.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/projects.service.coffee b/app/modules/projects/projects.service.coffee index c3ce4dae..d25a7e57 100644 --- a/app/modules/projects/projects.service.coffee +++ b/app/modules/projects/projects.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/projects.service.spec.coffee b/app/modules/projects/projects.service.spec.coffee index 11b15c05..f6dcf71c 100644 --- a/app/modules/projects/projects.service.spec.coffee +++ b/app/modules/projects/projects.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/transfer/cant-own-project-explanation.directive.coffee b/app/modules/projects/transfer/cant-own-project-explanation.directive.coffee index a6ea655c..4d5b7330 100644 --- a/app/modules/projects/transfer/cant-own-project-explanation.directive.coffee +++ b/app/modules/projects/transfer/cant-own-project-explanation.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/transfer/transfer-project.controller.coffee b/app/modules/projects/transfer/transfer-project.controller.coffee index b7bed191..b61b5bcd 100644 --- a/app/modules/projects/transfer/transfer-project.controller.coffee +++ b/app/modules/projects/transfer/transfer-project.controller.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/transfer/transfer-project.controller.spec.coffee b/app/modules/projects/transfer/transfer-project.controller.spec.coffee index 3a854312..442e64b8 100644 --- a/app/modules/projects/transfer/transfer-project.controller.spec.coffee +++ b/app/modules/projects/transfer/transfer-project.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/projects/transfer/transfer-project.directive.coffee b/app/modules/projects/transfer/transfer-project.directive.coffee index 5a117d27..9dbbb4a2 100644 --- a/app/modules/projects/transfer/transfer-project.directive.coffee +++ b/app/modules/projects/transfer/transfer-project.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/attachments-resource.service.coffee b/app/modules/resources/attachments-resource.service.coffee index ecdacbc3..3fba9af2 100644 --- a/app/modules/resources/attachments-resource.service.coffee +++ b/app/modules/resources/attachments-resource.service.coffee @@ -1,11 +1,11 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/epics-resource.service.coffee b/app/modules/resources/epics-resource.service.coffee index 30d82791..06e3dd5d 100644 --- a/app/modules/resources/epics-resource.service.coffee +++ b/app/modules/resources/epics-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/external-apps-resource.service.coffee b/app/modules/resources/external-apps-resource.service.coffee index 7dd02d27..be42672b 100644 --- a/app/modules/resources/external-apps-resource.service.coffee +++ b/app/modules/resources/external-apps-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/importers-resource.service.coffee b/app/modules/resources/importers-resource.service.coffee index ed425544..82479bf2 100644 --- a/app/modules/resources/importers-resource.service.coffee +++ b/app/modules/resources/importers-resource.service.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/resources/issues-resource.service.coffee b/app/modules/resources/issues-resource.service.coffee index 2af88e73..31f51822 100644 --- a/app/modules/resources/issues-resource.service.coffee +++ b/app/modules/resources/issues-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/projects-resource.service.coffee b/app/modules/resources/projects-resource.service.coffee index 7b306c1b..978593f4 100644 --- a/app/modules/resources/projects-resource.service.coffee +++ b/app/modules/resources/projects-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/resources.coffee b/app/modules/resources/resources.coffee index 6c1dabb6..b108b77f 100644 --- a/app/modules/resources/resources.coffee +++ b/app/modules/resources/resources.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/resources.module.coffee b/app/modules/resources/resources.module.coffee index de2f52b5..206b7a73 100644 --- a/app/modules/resources/resources.module.coffee +++ b/app/modules/resources/resources.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/tasks-resource.service.coffee b/app/modules/resources/tasks-resource.service.coffee index 1d056635..e4cc845f 100644 --- a/app/modules/resources/tasks-resource.service.coffee +++ b/app/modules/resources/tasks-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/user-resource.service.coffee b/app/modules/resources/user-resource.service.coffee index 3967c6d6..9850d9bc 100644 --- a/app/modules/resources/user-resource.service.coffee +++ b/app/modules/resources/user-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/users-resource.service.coffee b/app/modules/resources/users-resource.service.coffee index 388156ab..6a6a053e 100644 --- a/app/modules/resources/users-resource.service.coffee +++ b/app/modules/resources/users-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/userstories-resource.service.coffee b/app/modules/resources/userstories-resource.service.coffee index 23a9a297..20406e2a 100644 --- a/app/modules/resources/userstories-resource.service.coffee +++ b/app/modules/resources/userstories-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/resources/wiki-resource.service.coffee b/app/modules/resources/wiki-resource.service.coffee index 6c3a67fe..01a03d6a 100644 --- a/app/modules/resources/wiki-resource.service.coffee +++ b/app/modules/resources/wiki-resource.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/app-meta.service.coffee b/app/modules/services/app-meta.service.coffee index e3382e7e..66d1125e 100644 --- a/app/modules/services/app-meta.service.coffee +++ b/app/modules/services/app-meta.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/app-meta.service.spec.coffee b/app/modules/services/app-meta.service.spec.coffee index 9fa8045f..d833a055 100644 --- a/app/modules/services/app-meta.service.spec.coffee +++ b/app/modules/services/app-meta.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/check-permissions.service.coffee b/app/modules/services/check-permissions.service.coffee index ad0cd7e9..90256425 100644 --- a/app/modules/services/check-permissions.service.coffee +++ b/app/modules/services/check-permissions.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/check-permissions.service.spec.coffee b/app/modules/services/check-permissions.service.spec.coffee index 48f727b6..0dc36367 100644 --- a/app/modules/services/check-permissions.service.spec.coffee +++ b/app/modules/services/check-permissions.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/current-user.service.coffee b/app/modules/services/current-user.service.coffee index 39d7f3e1..7a106c5e 100644 --- a/app/modules/services/current-user.service.coffee +++ b/app/modules/services/current-user.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/current-user.service.spec.coffee b/app/modules/services/current-user.service.spec.coffee index b088c255..d08179d2 100644 --- a/app/modules/services/current-user.service.spec.coffee +++ b/app/modules/services/current-user.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/error-handling.service.coffee b/app/modules/services/error-handling.service.coffee index 66576c39..c67fe2d9 100644 --- a/app/modules/services/error-handling.service.coffee +++ b/app/modules/services/error-handling.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/lightbox-factory.service.coffee b/app/modules/services/lightbox-factory.service.coffee index 04c9822f..ac7ed52d 100644 --- a/app/modules/services/lightbox-factory.service.coffee +++ b/app/modules/services/lightbox-factory.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/lightbox-factory.service.spec.coffee b/app/modules/services/lightbox-factory.service.spec.coffee index 96628e51..2a41ee4f 100644 --- a/app/modules/services/lightbox-factory.service.spec.coffee +++ b/app/modules/services/lightbox-factory.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/paginate-response.service.coffee b/app/modules/services/paginate-response.service.coffee index dce8b495..f55f1643 100644 --- a/app/modules/services/paginate-response.service.coffee +++ b/app/modules/services/paginate-response.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/paginate-response.service.spec.coffee b/app/modules/services/paginate-response.service.spec.coffee index e69e6906..2b48038b 100644 --- a/app/modules/services/paginate-response.service.spec.coffee +++ b/app/modules/services/paginate-response.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/project.service.coffee b/app/modules/services/project.service.coffee index 12cf1f2f..2ba8f033 100644 --- a/app/modules/services/project.service.coffee +++ b/app/modules/services/project.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/project.service.spec.coffee b/app/modules/services/project.service.spec.coffee index 52480b05..567cac30 100644 --- a/app/modules/services/project.service.spec.coffee +++ b/app/modules/services/project.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/theme.service.coffee b/app/modules/services/theme.service.coffee index d3b096e5..cfe56256 100644 --- a/app/modules/services/theme.service.coffee +++ b/app/modules/services/theme.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/theme.service.spec.coffee b/app/modules/services/theme.service.spec.coffee index 4a7c3450..0cc4d091 100644 --- a/app/modules/services/theme.service.spec.coffee +++ b/app/modules/services/theme.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/user-activity.service.coffee b/app/modules/services/user-activity.service.coffee index 2f1668f2..b26ed9dc 100644 --- a/app/modules/services/user-activity.service.coffee +++ b/app/modules/services/user-activity.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/user-activity.service.spec.coffee b/app/modules/services/user-activity.service.spec.coffee index 7b4309e4..dd03548c 100644 --- a/app/modules/services/user-activity.service.spec.coffee +++ b/app/modules/services/user-activity.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/user.service.coffee b/app/modules/services/user.service.coffee index 85be5bd3..fce6357a 100644 --- a/app/modules/services/user.service.coffee +++ b/app/modules/services/user.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/user.service.spec.coffee b/app/modules/services/user.service.spec.coffee index f721d19b..744f2ec2 100644 --- a/app/modules/services/user.service.spec.coffee +++ b/app/modules/services/user.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/xhrError.service.coffee b/app/modules/services/xhrError.service.coffee index 42de3515..f24ec0b1 100644 --- a/app/modules/services/xhrError.service.coffee +++ b/app/modules/services/xhrError.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/services/xhrError.service.spec.coffee b/app/modules/services/xhrError.service.spec.coffee index 2efc12ef..d6bea130 100644 --- a/app/modules/services/xhrError.service.spec.coffee +++ b/app/modules/services/xhrError.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee b/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee index ced341ac..7ec57ed2 100644 --- a/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee +++ b/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.spec.coffee b/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.spec.coffee index e9c1d39b..68ca30b9 100644 --- a/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.spec.coffee +++ b/app/modules/user-timeline/user-timeline-attachment/user-timeline-attachment.directive.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee index 84a189c3..92622694 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.spec.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.spec.coffee index 64f306f4..d0fc3313 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item-title.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee index 9e33dcd0..045682cc 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.spec.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.spec.coffee index 9ac0339e..096ce795 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item-type.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee b/app/modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee index 9fff02c3..97e6ec2a 100644 --- a/app/modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee +++ b/app/modules/user-timeline/user-timeline-item/user-timeline-item.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee index 616caf7e..5cdb7286 100644 --- a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee +++ b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee index 7baebf6e..14696adb 100644 --- a/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline.module.coffee b/app/modules/user-timeline/user-timeline.module.coffee index 3bdab1fe..f1ccf67c 100644 --- a/app/modules/user-timeline/user-timeline.module.coffee +++ b/app/modules/user-timeline/user-timeline.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee b/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee index b426672c..d8c062a3 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.controller.coffee @@ -1,10 +1,10 @@ ### -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino Garcia -# Copyright (C) 2014-2016 David Barragán Merino -# Copyright (C) 2014-2016 Alejandro Alonso -# Copyright (C) 2014-2016 Juan Francisco Alcántara -# Copyright (C) 2014-2016 Xavi Julian +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as diff --git a/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee b/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee index 519f79be..68e7a6ba 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.controller.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee b/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee index fda9bb7b..698ae76b 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee index aecf5724..6737f3c5 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee b/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee index 60912d62..b9836d10 100644 --- a/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee +++ b/app/modules/user-timeline/user-timeline/user-timeline.service.spec.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/utils/isolate-click.directive.coffee b/app/modules/utils/isolate-click.directive.coffee index df262794..73d3abea 100644 --- a/app/modules/utils/isolate-click.directive.coffee +++ b/app/modules/utils/isolate-click.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/utils/utils.module.coffee b/app/modules/utils/utils.module.coffee index d39c4e08..1d69b870 100644 --- a/app/modules/utils/utils.module.coffee +++ b/app/modules/utils/utils.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/wiki/history/wiki-history-diff.directive.coffee b/app/modules/wiki/history/wiki-history-diff.directive.coffee index 3388d969..fb1b03ec 100644 --- a/app/modules/wiki/history/wiki-history-diff.directive.coffee +++ b/app/modules/wiki/history/wiki-history-diff.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/wiki/history/wiki-history-entry.directive.coffee b/app/modules/wiki/history/wiki-history-entry.directive.coffee index 7f0905ab..1f24956a 100644 --- a/app/modules/wiki/history/wiki-history-entry.directive.coffee +++ b/app/modules/wiki/history/wiki-history-entry.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/wiki/history/wiki-history.directive.coffee b/app/modules/wiki/history/wiki-history.directive.coffee index 34d96c31..fd179590 100644 --- a/app/modules/wiki/history/wiki-history.directive.coffee +++ b/app/modules/wiki/history/wiki-history.directive.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/wiki/history/wiki-history.module.coffee b/app/modules/wiki/history/wiki-history.module.coffee index 4ed5d8d0..6664daa7 100644 --- a/app/modules/wiki/history/wiki-history.module.coffee +++ b/app/modules/wiki/history/wiki-history.module.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/app/modules/wiki/history/wiki-history.service.coffee b/app/modules/wiki/history/wiki-history.service.coffee index 6b3107ad..3953d71f 100644 --- a/app/modules/wiki/history/wiki-history.service.coffee +++ b/app/modules/wiki/history/wiki-history.service.coffee @@ -1,5 +1,5 @@ ### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 diff --git a/scripts/add_licanse_to_coffee_files.py b/scripts/add_licanse_to_coffee_files.py index 4c8c2a55..8dc3fd40 100644 --- a/scripts/add_licanse_to_coffee_files.py +++ b/scripts/add_licanse_to_coffee_files.py @@ -1,7 +1,7 @@ import os, sys LICENSE = """### -# Copyright (C) 2014-2016 Taiga Agile LLC +# Copyright (C) 2014-2017 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 From 24722c4c7ec46ff8572ba26129da7e8151bc7aa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 20 Feb 2017 18:29:26 +0100 Subject: [PATCH 126/175] [i18n] Update locales --- app/locales/taiga/locale-ca.json | 32 ++++++++--------- app/locales/taiga/locale-de.json | 52 +++++++++++++-------------- app/locales/taiga/locale-es.json | 52 +++++++++++++-------------- app/locales/taiga/locale-fi.json | 32 ++++++++--------- app/locales/taiga/locale-fr.json | 52 +++++++++++++-------------- app/locales/taiga/locale-it.json | 52 +++++++++++++-------------- app/locales/taiga/locale-ja.json | 52 +++++++++++++-------------- app/locales/taiga/locale-ko.json | 52 +++++++++++++-------------- app/locales/taiga/locale-nb.json | 52 +++++++++++++-------------- app/locales/taiga/locale-nl.json | 32 ++++++++--------- app/locales/taiga/locale-pl.json | 40 ++++++++++----------- app/locales/taiga/locale-pt-br.json | 52 +++++++++++++-------------- app/locales/taiga/locale-ru.json | 36 +++++++++---------- app/locales/taiga/locale-sv.json | 34 +++++++++--------- app/locales/taiga/locale-tr.json | 32 ++++++++--------- app/locales/taiga/locale-zh-hans.json | 52 +++++++++++++-------------- app/locales/taiga/locale-zh-hant.json | 32 ++++++++--------- 17 files changed, 369 insertions(+), 369 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index ff233d20..c5374c73 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Els teus projectes", "PLACEHOLDER_SEARCH": "Cerca en...", "ACTION_CREATE_PROJECT": "Crear projecte", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importar projecte", "MANAGE_PROJECTS": "Gestiona els projectes", "TITLE_CREATE_PROJECT": "Crear projecte", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importar projecte", "TITLE_PRVIOUS_PROJECT": "Mostra projectes previs", "TITLE_NEXT_PROJECT": "Mostrar próxims projectes", "HELP_TITLE": "Pàgina d'ajuda de Taiga", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Arrossega els elements per endreçar" }, "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", - "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", + "TITLE": "Important Projecte", + "UPLOADING_FILE": "Pujant arxiu de dades", + "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": "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}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})", + "SYNC_SUCCESS": "El teu projecte s'ha importat correctament", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "SECTION_TITLE_CREATE_PROJECT": "Crear projecte", + "CREATE_PROJECT_TEXT": "Nou projecte. Qué il·lusió!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", + "CREATE_PROJECT": "Crear projecte", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index d175c304..5ae550bc 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Ihre Projekte", "PLACEHOLDER_SEARCH": "Suchen...", "ACTION_CREATE_PROJECT": "Projekt anlegen", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Projekt importieren", "MANAGE_PROJECTS": "Projekte verwalten", "TITLE_CREATE_PROJECT": "Projekt anlegen", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Projekt importieren", "TITLE_PRVIOUS_PROJECT": "Frühere Projekte anzeigen", "TITLE_NEXT_PROJECT": "Weitere Projekte zeigen", "HELP_TITLE": "Taiga Support Seite", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Benutzen Sie Drag & Drop zum neuen Ordnen" }, "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", - "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", + "TITLE": "Projekt importieren", + "UPLOADING_FILE": "Exportdatei wird hochgeladen", + "DESCRIPTION": "Dieser Vorgang kann etwas dauern. Bitte schliessen Sie das Fenster nicht!", + "ASYNC_IN_PROGRESS_TITLE": "Unsere Helferlein importieren Ihr Projekt", + "ASYNC_IN_PROGRESS_MESSAGE": "Dieser Vorgang könnte ein paar Minuten benötigen
    Nach Fertigstellung benachrichtigen wir Sie per E-Mail.", + "UPLOAD_IN_PROGRESS_MESSAGE": "Hochgeladen {{uploadedSize}} von {{totalSize}}", + "ERROR": "Unsere Helferlein haben Probleme beim Importieren Ihrer Daten. Bitte versuchen Sie es erneut.", + "ERROR_TOO_MANY_REQUEST": "Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut.", + "ERROR_MESSAGE": "Unsere Helferlein haben Probleme beim Importieren Ihrer Datei: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})", + "SYNC_SUCCESS": "Ihr Projekt wurde erfolgreich importiert", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "Das Projekt, dass Sie importieren möchten, hat {{members}} Mitglieder. Leider erlaubt ihr derzeitiger Plan nicht mehr als {{max_memberships}} Mitglieder pro Projekt. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie bitte den Administrator.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen.", "DESC": "Das Projekt, das Sie versuchen zu importieren, ist privat. Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte hinzuzufügen." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "Projekt erstellen", + "CREATE_PROJECT_TEXT": "Frisch und sauber. Wie aufregend!", + "CHOOSE_TEMPLATE": "Welches Template passt am besten zu Ihrem Projekt?", + "CHOOSE_TEMPLATE_TITLE": "Mehr Infos über Projekt-Templates", + "CHOOSE_TEMPLATE_INFO": "Weitere Infos", + "PROJECT_DETAILS": "Projekt Details", + "PUBLIC_PROJECT": "Öffentliches Projekt", + "PRIVATE_PROJECT": "Privates Projekt", + "CREATE_PROJECT": "Projekt anlegen", + "MAX_PRIVATE_PROJECTS": "Sie haben die maximale Anzahl privater Projekte erreicht", + "MAX_PUBLIC_PROJECTS": "Leider haben Sie die maximale Anzahl öffentlicher Projekte erreicht", + "CHANGE_PLANS": "Änderungs-Pläne" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 645b593b..74adace4 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Tus proyectos", "PLACEHOLDER_SEARCH": "Buscar en...", "ACTION_CREATE_PROJECT": "Crear proyecto", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importar proyecto", "MANAGE_PROJECTS": "Administrar proyectos", "TITLE_CREATE_PROJECT": "Crear proyecto", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importar proyecto", "TITLE_PRVIOUS_PROJECT": "Mostrar proyectos anteriores", "TITLE_NEXT_PROJECT": "Mostrar siguientes proyectos", "HELP_TITLE": "Página de Soporte de Taiga", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Arrastrar y soltar para reordenar" }, "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", - "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", + "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", + "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.", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "El proyecto que esta tratando de importar tiene {{members}} miembros, desafortunadamente, su plna actual solo le permite un maximo de {{max_memberships}} miembros por proyecto. si desea aumentar este limite por favor contacte al administrador.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Desafortunadamente, su plan actual no permite a los proyectos privados adicionales", "DESC": "El proyecto que trata de importar es privado. Desafortunadamente, su plan actual no le permite adicionar mas proyectos privados" @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "Crear Proyecto", + "CREATE_PROJECT_TEXT": "Fresco y claro. ¡Es emocionante!", + "CHOOSE_TEMPLATE": "¿Que plantilla se ajusta mejor con tu proyecto?", + "CHOOSE_TEMPLATE_TITLE": "Mas informacion acerca de la plantillas del proyecto", + "CHOOSE_TEMPLATE_INFO": "Mas información", + "PROJECT_DETAILS": "Detalles del proyecto", + "PUBLIC_PROJECT": "Proyecto público", + "PRIVATE_PROJECT": "Proyecto privado", + "CREATE_PROJECT": "Crear proyecto", + "MAX_PRIVATE_PROJECTS": "Has alcanzado el número máximo de proyectos privados", + "MAX_PUBLIC_PROJECTS": "Desafortunadamente, has alcanzado el número máximo de proyectos públicos", + "CHANGE_PLANS": "cambiar planes" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 213cc9b0..88fd19d0 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Projektisi", "PLACEHOLDER_SEARCH": "Hae täältä...", "ACTION_CREATE_PROJECT": "Luo projekti", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Luo projekti tiedostosta", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Create project", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Luo projekti tiedostosta", "TITLE_PRVIOUS_PROJECT": "Näytä aikaisemmat projektit", "TITLE_NEXT_PROJECT": "Näytä seuraavat projektit", "HELP_TITLE": "Taiga Support Page", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Drag & drop to reorder" }, "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", - "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", + "TITLE": "Luetaan sisään projektia", + "UPLOADING_FILE": "Ladataan tiedostoa", + "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": "LAdattu {{uploadedSize}} / {{totalSize}}", + "ERROR": "Oompa Loompas eivät onnistuneet tuomaan tiedostoasi. Yritä uudestaan.", + "ERROR_TOO_MANY_REQUEST": "Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan.", + "ERROR_MESSAGE": "Oompa Loompas eivät pysty lukemaan tiedostoasi: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})", + "SYNC_SUCCESS": "Projektisi on tuotu sisään onnistuneesti", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "SECTION_TITLE_CREATE_PROJECT": "Luo projekti", + "CREATE_PROJECT_TEXT": "Täysin koskematon. Jännittävää!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", + "CREATE_PROJECT": "Luo projekti", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 5defc21a..18d3dd79 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Vos projets", "PLACEHOLDER_SEARCH": "Rechercher dans...", "ACTION_CREATE_PROJECT": "Créer un projet", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importer un projet", "MANAGE_PROJECTS": "Gérer les projets", "TITLE_CREATE_PROJECT": "Créer un projet", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importer un projet", "TITLE_PRVIOUS_PROJECT": "Montrer les projets précédents", "TITLE_NEXT_PROJECT": "Montrer les projets suivants", "HELP_TITLE": "Page d'assistance Taiga", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Glisser-déposer pour réorganiser" }, "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", - "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", + "TITLE": "Importation du projet en cours", + "UPLOADING_FILE": "Dépôt du fichier de vidage", + "DESCRIPTION": "Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte.", + "ASYNC_IN_PROGRESS_TITLE": "Nos Oompa Loompas sont en train d'importer votre projet", + "ASYNC_IN_PROGRESS_MESSAGE": "Ce processus pourrait durer plusieurs minutes
    Nous vous enverrons un courriel quand ce sera prêt", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} de {{totalSize}} déposés", + "ERROR": "Nos Oompas Loompas ont rencontré des problèmes en important vos données de vidage. 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 vos données de vidage : {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})", + "SYNC_SUCCESS": "Votre projet a été importé avec succès", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "Le projet que vous voulez importer a {{members}} membres. Votre souscription actuelle vous permet un maximum de {{max_memberships}} membres par projet. Si vous désirez augmenter cette limite, merci de contacter un administrateur.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire.", "DESC": "Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "Créer un projet", + "CREATE_PROJECT_TEXT": "Tout beau, tout nouveau !", + "CHOOSE_TEMPLATE": "Quel modèle convient mieux à votre projet ?", + "CHOOSE_TEMPLATE_TITLE": "Plus d'information sur les templates de projets", + "CHOOSE_TEMPLATE_INFO": "Plus d'informations", + "PROJECT_DETAILS": "Détails du projet", + "PUBLIC_PROJECT": "Projet public", + "PRIVATE_PROJECT": "Projet privé", + "CREATE_PROJECT": "Créer un projet", + "MAX_PRIVATE_PROJECTS": "Vous avez atteint le nombre maximum de projets privés", + "MAX_PUBLIC_PROJECTS": "Désolé, vous avez atteint le nombre maximal de projet public.", + "CHANGE_PLANS": "changer de souscription" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index f183211a..9699d503 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Tuoi progetti", "PLACEHOLDER_SEARCH": "Cerca in...", "ACTION_CREATE_PROJECT": "Crea progetto", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importa progetto", "MANAGE_PROJECTS": "Gestisci Progetti", "TITLE_CREATE_PROJECT": "Crea progetto", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importa progetto", "TITLE_PRVIOUS_PROJECT": "Mostra i progetti precedenti", "TITLE_NEXT_PROJECT": "Progetto successivo", "HELP_TITLE": "Pagina di supporto Taiga", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Usa drag & drop per riordinare" }, "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", - "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", + "TITLE": "Importazione Progetto", + "UPLOADING_FILE": "Carico il file di dump", + "DESCRIPTION": "Questo processo puó durare un po', nel frattempo lasciare questa finestra aperta.", + "ASYNC_IN_PROGRESS_TITLE": "I nostri Oompa Loompa stanno lavorando per importare il tuo progetto!", + "ASYNC_IN_PROGRESS_MESSAGE": "Questo processo puó durare minuti.
    Verrá inviata una mail al suo completamento", + "UPLOAD_IN_PROGRESS_MESSAGE": "Caricati {{uploadedSize}} di {{totalSize}}", + "ERROR": "Mannaggia, i Oompa Loompa hanno qualche problema ad importare il dump. Prova di nuovo.", + "ERROR_TOO_MANY_REQUEST": "Scusaci, i nostri Oompa Loompa sono di nuovo occupati. Riprova di nuovo in qualche minuto.", + "ERROR_MESSAGE": "I nostri Oompa Loompa hanno qualche problema ad importare il dump dei tuoi dati: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})", + "SYNC_SUCCESS": "Il tuo progetto è stato importato con successo", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "Il progetto che stai provando a importare ha {{members}} membri, sfortunatamente, il tuo attuale abbonamento consente un massimo di {{max_membership}} membri per progetto. Se vuoi aumentare questo limite per favore contatta l'amministratore", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati", "DESC": "Il progetto che stai tentando di importare è privato. Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati" @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "Crea Progetto", + "CREATE_PROJECT_TEXT": "Nuovo di zecca. Vai così!", + "CHOOSE_TEMPLATE": "Quale template si adatta meglio al tuo progetto?", + "CHOOSE_TEMPLATE_TITLE": "Più info sui template di progetto", + "CHOOSE_TEMPLATE_INFO": "Più info", + "PROJECT_DETAILS": "Dettagli Progetto", + "PUBLIC_PROJECT": "Progetto Pubblico", + "PRIVATE_PROJECT": "Progetto Privato", + "CREATE_PROJECT": "Crea progetto", + "MAX_PRIVATE_PROJECTS": "Hai raggiunto il numero massimo di progetti privati", + "MAX_PUBLIC_PROJECTS": "Sfortunatamente. hai raggiunto il numero massimo di progetti pubblici", + "CHANGE_PLANS": "cambia abbonamento" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index ee51030f..34323074 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "あなたのプロジェクト", "PLACEHOLDER_SEARCH": "検索...", "ACTION_CREATE_PROJECT": "プロジェクトを作成", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "プロジェクトをインポート", "MANAGE_PROJECTS": "プロジェクト管理", "TITLE_CREATE_PROJECT": "プロジェクトを作成", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "プロジェクトをインポート", "TITLE_PRVIOUS_PROJECT": "前のプロジェクトを表示", "TITLE_NEXT_PROJECT": "次のプロジェクトを表示", "HELP_TITLE": "Taiga サポートページ", @@ -903,19 +903,19 @@ "ACTION_REORDER": "ドラッグ&ドロップで入れ替え" }, "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", - "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", + "TITLE": "プロジェクトをインポート中", + "UPLOADING_FILE": "ダンプファイルをアップロード中", + "DESCRIPTION": "このプロセスには時間がかかります。ウィンドウを開いたままにしていてください。", + "ASYNC_IN_PROGRESS_TITLE": "ウンパルンパたちがあなたのプロジェクトをインポートしています。", + "ASYNC_IN_PROGRESS_MESSAGE": "この処理には時間がかかります。
    準備が出来たらメールで通知します。", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 中 {{uploadedSize}} アップロード済み", + "ERROR": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。もう一度お試しください。", + "ERROR_TOO_MANY_REQUEST": "すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。", + "ERROR_MESSAGE": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。  \n{{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。", + "SYNC_SUCCESS": "プロジェクトのインポートに成功しました", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "インポートしようとしているプロジェクトのメンバー数は{{members}}名ですが、あなたの現在のプランでは1プロジェクトごとに最大{{max_memberships}}名のみ許可されています。 上限を増やしたい場合は管理者にお問い合わせください。", "PRIVATE_PROJECTS_SPACE": { "TITLE": "現在のプランではこれ以上の非公開プロジェクトは許可されていません。", "DESC": "インポートしようとしているプロジェクトは非公開プロジェクトです。現在のプランではこれ以上の非公開プロジェクトは許可されていません。" @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "プロジェクトを作成", + "CREATE_PROJECT_TEXT": "フレッシュでクリーン。わくわくしますね!", + "CHOOSE_TEMPLATE": "どちらのテンプレートがあなたのプロジェクトに適していますか?", + "CHOOSE_TEMPLATE_TITLE": "プロジェクトテンプレートの詳細", + "CHOOSE_TEMPLATE_INFO": "詳細表示", + "PROJECT_DETAILS": "プロジェクト詳細", + "PUBLIC_PROJECT": "パブリック プロジェクト", + "PRIVATE_PROJECT": "プライベート プロジェクト", + "CREATE_PROJECT": "プロジェクトを作成", + "MAX_PRIVATE_PROJECTS": "非公開プロジェクトの上限に達しました。", + "MAX_PUBLIC_PROJECTS": "公開プロジェクトの上限に達しました。", + "CHANGE_PLANS": "プランを変更" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index 1635f2ea..8cb4222a 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "프로젝트", "PLACEHOLDER_SEARCH": "검색하기", "ACTION_CREATE_PROJECT": "프로젝트 생성하기", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "프로젝트 불러오기", "MANAGE_PROJECTS": "프로젝트 관리하기", "TITLE_CREATE_PROJECT": "프로젝트 생성하기", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "프로젝트 불러오기", "TITLE_PRVIOUS_PROJECT": "이전 프로젝트 보기", "TITLE_NEXT_PROJECT": "다음 프로젝트 보기", "HELP_TITLE": "타이가 고객 지원 페이지", @@ -903,19 +903,19 @@ "ACTION_REORDER": "드래그&드롭으로 순서 바꾸기" }, "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", - "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", + "TITLE": "프로젝트 불러오기", + "UPLOADING_FILE": "덤프 파일 업로드 중", + "DESCRIPTION": "이 과정은 시간이 걸릴 수 있습니다. 이 창을 닫지 마세요.", + "ASYNC_IN_PROGRESS_TITLE": "움파룸파가 프로젝트를 불러오고 있습니다.", + "ASYNC_IN_PROGRESS_MESSAGE": "이 작업은 몇 분 정도 걸립니다.
    작업이 끝나면 이메일로 알려드릴게요.", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 중 {{uploadedSize}} 만큼 업로드했습니다", + "ERROR": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요.", + "ERROR_TOO_MANY_REQUEST": "죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?", + "ERROR_MESSAGE": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요. {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", + "SYNC_SUCCESS": "프로젝트를 불러오는 데 성공했습니다.", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "가져오기하려는 프로젝트에 {{members}} 명의 회원이 있습니다. 안타깝게도, 현재 당신의 설정에서는 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다. 최대 수용 가능 회원 수를 늘리고 싶다면 관리자에게 문의하십시오.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "안타깝게도, 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다.", "DESC": "가져오기하려는 프로젝트가 비공개 되어있습니다. 안타깝게도, 현재 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "프로젝트 생성하기", + "CREATE_PROJECT_TEXT": "시원하고 개운하네요! 너무 신나요!", + "CHOOSE_TEMPLATE": "당신의 프로젝트에 가장 적합한 템플릿이 무엇입니까?", + "CHOOSE_TEMPLATE_TITLE": "프로젝트 템플릿에 대한 더 많은 정보", + "CHOOSE_TEMPLATE_INFO": "더 많은 정보", + "PROJECT_DETAILS": "프로젝트 세부사항", + "PUBLIC_PROJECT": "공개된 프로젝트", + "PRIVATE_PROJECT": "비공개 프로젝트", + "CREATE_PROJECT": "프로젝트 생성하기", + "MAX_PRIVATE_PROJECTS": "최대 비공개 프로젝트 수에 도달하였습니다.", + "MAX_PUBLIC_PROJECTS": "안타깝게도, 당신은 최대 공개 프로젝트수에 도달했습니다.", + "CHANGE_PLANS": "계획 변경하기" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - 위키 - {{projectName}}", diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 4f60b96c..1dcdb9f5 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Dine prosjekter", "PLACEHOLDER_SEARCH": "Søk i...", "ACTION_CREATE_PROJECT": "Opprett prosjekt", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importer prosjekt", "MANAGE_PROJECTS": "Håndter prosjekter", "TITLE_CREATE_PROJECT": "Opprett prosjekt", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importer prosjekt", "TITLE_PRVIOUS_PROJECT": "Vis forrige prosjekter", "TITLE_NEXT_PROJECT": "Vis neste prosjekter", "HELP_TITLE": "Taiga Brukerstøtte", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Dra & slipp for å omorganisere" }, "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", - "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", + "TITLE": "Importer prosjekt", + "UPLOADING_FILE": "Laster opp dump-fil", + "DESCRIPTION": "Denne prosessen kan ta en stund, vennligst hold vinduet åpent.", + "ASYNC_IN_PROGRESS_TITLE": "Våre Oompa Loompaer importerer ditt prosjekt", + "ASYNC_IN_PROGRESS_MESSAGE": "Denne prosessen kan ta noen minutter
    Vi vil sende deg en e-post når den er klar", + "UPLOAD_IN_PROGRESS_MESSAGE": "Opplastet {{uploadedSize}} av {{totalSize}}", + "ERROR": "Våre Oompa Loompaer har problemer med å importere din data-dump. Vennligst prøv på nytt.", + "ERROR_TOO_MANY_REQUEST": "Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter.", + "ERROR_MESSAGE": "Våre Oompa Loompaer har problemer med å importere din data-dump: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})", + "SYNC_SUCCESS": "Importen av ditt prosjekt var vellykket", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "Prosjektet du prøver å importere har {{members}} medlemmer. Dessverre, din nåværende plan tillater kun {{max_memberships}} medlemmer per prosjekt. Hvis du ønsker å øke denne grensen, vennligst kontakt administratoren.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Dessverre, din nåværende plan tillater ikke private prosjekter", "DESC": "Prosjektet du prøver å importere er privat. Dessverre tillater ikke din gjeldende flere private prosjekter." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "Opprett prosjekt", + "CREATE_PROJECT_TEXT": "Friskt og stilrent. Så spennende!", + "CHOOSE_TEMPLATE": "Hvilken mal passer ditt prosjekt best?", + "CHOOSE_TEMPLATE_TITLE": "Mer info om prosjektmaler", + "CHOOSE_TEMPLATE_INFO": "Mer info", + "PROJECT_DETAILS": "Prosjektdetaljer", + "PUBLIC_PROJECT": "Offentlig Prosjekt", + "PRIVATE_PROJECT": "Privat Prosjekt", + "CREATE_PROJECT": "Opprett prosjekt", + "MAX_PRIVATE_PROJECTS": "Du har nådd maksimalt antall private prosjekter", + "MAX_PUBLIC_PROJECTS": "Dessverre, du har nådd maksimalt antall offentlige prosjekter", + "CHANGE_PLANS": "endre planer" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index 19d5463d..79aa10e5 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Jouw projecten", "PLACEHOLDER_SEARCH": "Zoeken in...", "ACTION_CREATE_PROJECT": "Project aanmaken", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importeer project", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Project aanmaken", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importeer project", "TITLE_PRVIOUS_PROJECT": "Toon voorgaande projecten", "TITLE_NEXT_PROJECT": "Toon volgende projecten", "HELP_TITLE": "Taiga support pagina", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Sleep om de volgorde te veranderen" }, "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", - "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", + "TITLE": "Importeren project", + "UPLOADING_FILE": "Bezig met uploaden dump bestand", + "DESCRIPTION": "Dit proces kan even duren, laat het venster even open alsjeblieft.", + "ASYNC_IN_PROGRESS_TITLE": "Onze Oempa-Loempa's zijn je project aan het importeren", + "ASYNC_IN_PROGRESS_MESSAGE": "Dit proces kan een paar minuten duren
    We sturen je een email als het gereed is", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} van {{totalSize}} geupload", + "ERROR": "Onze Oempa-Loempa's hebben wat problemen bij het importeren van de dump. Probeer het opnieuw.", + "ERROR_TOO_MANY_REQUEST": "Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten.", + "ERROR_MESSAGE": "Onze Oempa-Loempa's hebben wat problemen met het importeren van je dump: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})", + "SYNC_SUCCESS": "Je project werd met succes geïmporteerd", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "SECTION_TITLE_CREATE_PROJECT": "Project aanmaken", + "CREATE_PROJECT_TEXT": "Vers en proper. Spanned!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", + "CREATE_PROJECT": "Project aanmaken", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index 7058291e..4bd5c18a 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Twoje projekty", "PLACEHOLDER_SEARCH": "Szukaj w ...", "ACTION_CREATE_PROJECT": "Stwórz projekt", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importuj projekt", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Utwórz projekt", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importuj projekt", "TITLE_PRVIOUS_PROJECT": "Pokaż poprzedni projekt", "TITLE_NEXT_PROJECT": "Pokaż kolejne projekty", "HELP_TITLE": "Taiga strona wsparcia", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Przeciągnij i upuść żeby zmienić kolejność" }, "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", - "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", + "TITLE": "Importowanie Projektu", + "UPLOADING_FILE": "Umpa Lumpy ładują plik zrzutu", + "DESCRIPTION": "Proces może zająć chwilkę, proszę nie zamykaj okna.", + "ASYNC_IN_PROGRESS_TITLE": "Umpa Lumpy importują projekt", + "ASYNC_IN_PROGRESS_MESSAGE": "To może zając kilka minut.
    Otrzymasz mail gdy wszystko będzie gotowe.", + "UPLOAD_IN_PROGRESS_MESSAGE": "Wysłano {{uploadedSize}} z {{totalSize}}", + "ERROR": "Umpa Lumpy mają problem z importem. Spróbuj ponownie.", + "ERROR_TOO_MANY_REQUEST": "Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę.", + "ERROR_MESSAGE": "Przy imporcie wystąpił następujący problem: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})", + "SYNC_SUCCESS": "Twój projekt zaimportował się prawidłowo!", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,17 +1517,17 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "SECTION_TITLE_CREATE_PROJECT": "Utwórz projekt", + "CREATE_PROJECT_TEXT": "Nowy, zwinny! To takie ekscytujące!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", + "PUBLIC_PROJECT": "Projekt publiczny", + "PRIVATE_PROJECT": "Projekt prywatny", + "CREATE_PROJECT": "Utwórz projekt", + "MAX_PRIVATE_PROJECTS": "Osiągnąłeś maksymalną liczbę prywatnych projektów", + "MAX_PUBLIC_PROJECTS": "Niestety osiągnąłeś maksymalną liczbę publicznych projektów", "CHANGE_PLANS": "change plans" }, "WIKI": { diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index fd02e425..8dfe75e8 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Seus projetos", "PLACEHOLDER_SEARCH": "Procurar em...", "ACTION_CREATE_PROJECT": "Criar projeto", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importar projeto", "MANAGE_PROJECTS": "Gerenciar projetos", "TITLE_CREATE_PROJECT": "Criar projeto", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importar projeto", "TITLE_PRVIOUS_PROJECT": "Mostrar projetos prévios", "TITLE_NEXT_PROJECT": "Mostrar os próximos projetos", "HELP_TITLE": "Página de Suporte do Taiga", @@ -903,19 +903,19 @@ "ACTION_REORDER": "Seguro e arraste para ordenar" }, "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", - "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", + "TITLE": "Importando Projeto", + "UPLOADING_FILE": "Enviando arquivo de dump", + "DESCRIPTION": "Este processo pode levar algum tempo, mantenha a janela aberta por favor.", + "ASYNC_IN_PROGRESS_TITLE": "Nossos Oompa Loompas estão importando seu projeto", + "ASYNC_IN_PROGRESS_MESSAGE": "Este processo pode levar alguns minutos
    Enviaremos um email a você assim que estiver pronto", + "UPLOAD_IN_PROGRESS_MESSAGE": "Enviado {{uploadedSize}} de {{totalSize}}", + "ERROR": "Nossos Oompa Loompas tiveram alguns problemas importando os dados do seu dump. Tente novamente.", + "ERROR_TOO_MANY_REQUEST": "Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos.", + "ERROR_MESSAGE": "Nossos Oompa Loompas tiveram alguns problemas ao importar seu arquivo de despejo: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})", + "SYNC_SUCCESS": "Seu projeto foi importado com sucesso", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "O projeto que você está tentando importar tem {{members}} membros e infelizmente seu plano atual tem um limite máximo de {{max_memberships}} membros por projeto. Se você deseja aumentar este limite entre em contato com o administrador.", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Infelizmente, seu plano atual não permite projetos privados adicionais.", "DESC": "O projeto que você está tentando importar é privado. Infelizmente, seu plano plano atual não permite projetos privados adicionais." @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "Criar Projeto", + "CREATE_PROJECT_TEXT": "Novo em folha. Tão excitante!", + "CHOOSE_TEMPLATE": "Qual template se encaixa melhor no seu projeto?", + "CHOOSE_TEMPLATE_TITLE": "Mais informações sobre templates de projeto", + "CHOOSE_TEMPLATE_INFO": "Mais informações", + "PROJECT_DETAILS": "Detalhes do Projeto", + "PUBLIC_PROJECT": "Projeto Público", + "PRIVATE_PROJECT": "Projeto Privado", + "CREATE_PROJECT": "Criar projeto", + "MAX_PRIVATE_PROJECTS": "Você atingiu o número máximo de projetos privados", + "MAX_PUBLIC_PROJECTS": "Infelizmente, você atingiu o número máximo de projetos públicos", + "CHANGE_PLANS": "mudar planos" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index ba25c5a9..606915e0 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Ваши проекты", "PLACEHOLDER_SEARCH": "Искать в...", "ACTION_CREATE_PROJECT": "Создать проект", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Импортировать проект", "MANAGE_PROJECTS": "Управлять проектами", "TITLE_CREATE_PROJECT": "Создать проект", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Импортировать проект", "TITLE_PRVIOUS_PROJECT": "Показать предыдущие проекты", "TITLE_NEXT_PROJECT": "Показать следующие проекты", "HELP_TITLE": "Страница поддержки Taiga", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Можно перетаскивать мышкой" }, "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", - "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", + "TITLE": "Импорт проекта", + "UPLOADING_FILE": "Загрузить свалочный файл", + "DESCRIPTION": "Этот процесс может занять некоторое время. Пожалуйста, сохраняйте это окно открытым.", + "ASYNC_IN_PROGRESS_TITLE": "Oompa Loompas импортирует ваш проект", + "ASYNC_IN_PROGRESS_MESSAGE": "Этот процесс может занять несколько минут
    Мы отправим вам email, когда всё будет готово", + "UPLOAD_IN_PROGRESS_MESSAGE": "Загружено {{uploadedSize}} размера {{totalSize}}", + "ERROR": "У Oompa Loompas возникли проблемы при импорте резервной копии. Попробуйте еще раз.", + "ERROR_TOO_MANY_REQUEST": "Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут.", + "ERROR_MESSAGE": "У Oompa Loompas возникли проблемы при импорте резервной копии: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})", + "SYNC_SUCCESS": "Импорт проекта выполнен успешно", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "SECTION_TITLE_CREATE_PROJECT": "Создать проект", + "CREATE_PROJECT_TEXT": "Свежий и чистый! Так здóрово!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", + "CHOOSE_TEMPLATE_INFO": "Больше инфо", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", + "PRIVATE_PROJECT": "Частный проект", + "CREATE_PROJECT": "Создать проект", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 28880fb9..05890756 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Dina projekt", "PLACEHOLDER_SEARCH": "Sök i ...", "ACTION_CREATE_PROJECT": "Skapa projekt", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Importerar projekt", "MANAGE_PROJECTS": "Hantera projekt", "TITLE_CREATE_PROJECT": "Skapa projekt", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Importerar projekt", "TITLE_PRVIOUS_PROJECT": "Visa tidigare projekt", "TITLE_NEXT_PROJECT": "Visa nästa projekt", "HELP_TITLE": "Taiga hjälpsida", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Dra & släpp för att sortera" }, "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", - "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", + "TITLE": "Importerar projekt", + "UPLOADING_FILE": "Ladda hämtningsfilen", + "DESCRIPTION": "Den här processen kan ta en liten stund, vänligen försök med fönstret öppet. ", + "ASYNC_IN_PROGRESS_TITLE": "Våra Oompa Loompier importerar ditt projekt", + "ASYNC_IN_PROGRESS_MESSAGE": "Den här processen kan ta några minuter
    . Vi vill skicka dig en e-post när det blir klart. ", + "UPLOAD_IN_PROGRESS_MESSAGE": "Laddat upp {{uploadedSize}} av {{totalSize}}", + "ERROR": "Våra Oompa Loompier har problem med att importera din hämtningsfil. Vänligen försök igen. ", + "ERROR_TOO_MANY_REQUEST": "Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. ", + "ERROR_MESSAGE": "Våra Oompa Loompier har lite problem med att importera dina hämtningsdata: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})", + "SYNC_SUCCESS": "Ditt projekt är korrekt importerad", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "SECTION_TITLE_CREATE_PROJECT": "Skapa projekt", + "CREATE_PROJECT_TEXT": "Fräscht och rent. Så trevligt!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", + "PRIVATE_PROJECT": "Privat Projekt", + "CREATE_PROJECT": "Skapa projekt", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 9f47d8c7..9b111a85 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "Projeleriniz", "PLACEHOLDER_SEARCH": "Aranan konum...", "ACTION_CREATE_PROJECT": "Proje Oluştur", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "Projeyi İçe Aktar", "MANAGE_PROJECTS": "Projeleri yönet", "TITLE_CREATE_PROJECT": "Proje oluştur", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "Projeyi İçe Aktar", "TITLE_PRVIOUS_PROJECT": "Önceki projeleri göster", "TITLE_NEXT_PROJECT": "Sonraki projeleri göster", "HELP_TITLE": "Taiga Destek Sayfası", @@ -903,17 +903,17 @@ "ACTION_REORDER": "Yeniden sıralamak için sürükleyin ve bırakın" }, "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", - "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", + "TITLE": "Proje İçe Aktarılıyor", + "UPLOADING_FILE": "Döküm dosyanız karşıya yükleniyor", + "DESCRIPTION": "Bu işlem biraz sürecek, lütfen pencereyi kapatmayın.", + "ASYNC_IN_PROGRESS_TITLE": "Bizim honki ponkiler projenizi içeriye aktarıyor", + "ASYNC_IN_PROGRESS_MESSAGE": "Bu işlem bir kaç dakika sürecek
    Hazır olduğunda bir e-posta göndereceğiz", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} in {{uploadedSize}} kadarı karşıya yüklendi", + "ERROR": "Sarı çizmeli memmet ağamız döküm dosyanızı içeri aktarırken birkaç problem yaşadı. Lütfen yeniden deneyin.", + "ERROR_TOO_MANY_REQUEST": "Üzgünüm, bizim honki ponkiler şu anda çok meşgul. Lütfen birkaç dakika içinde yeniden deneyin.", + "ERROR_MESSAGE": "Honki ponkilerimiz döküm dosyanızı içeri aktarırken birkaç problem yaşadı: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin", + "SYNC_SUCCESS": "Projeniz başarıyla içe aktarıldı", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "SECTION_TITLE_CREATE_PROJECT": "Proje Oluştur", + "CREATE_PROJECT_TEXT": "Taze ve temiz. Heycan verici!", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", + "CREATE_PROJECT": "Proje oluştur", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index 75e46509..8c9dea98 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "你的项目", "PLACEHOLDER_SEARCH": "搜索", "ACTION_CREATE_PROJECT": "创建项目", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "导入项目", "MANAGE_PROJECTS": "管理项目", "TITLE_CREATE_PROJECT": "创建项目", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "导入项目", "TITLE_PRVIOUS_PROJECT": "显示过去项目", "TITLE_NEXT_PROJECT": "显示下一个任务", "HELP_TITLE": "Taiga支持页", @@ -903,19 +903,19 @@ "ACTION_REORDER": "通过拖动来改变显示顺序" }, "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", - "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", + "TITLE": "导入项目中", + "UPLOADING_FILE": "上传倾倒档案", + "DESCRIPTION": "这个过桯要花点时间,请保持视窗开启", + "ASYNC_IN_PROGRESS_TITLE": "我们正在导入你的项目", + "ASYNC_IN_PROGRESS_MESSAGE": "这个过程要花上一点时间
    当弄好时我们会发给你一封邮件", + "UPLOAD_IN_PROGRESS_MESSAGE": "已上传 {{totalSize}}中的{{uploadedSize}}", + "ERROR": "系统在滙进你倒入的资料时遇上一些问题,请再试一次", + "ERROR_TOO_MANY_REQUEST": "抱歉系统繁忙中,请稍后再试试", + "ERROR_MESSAGE": "我们的系统无法导入你的资料", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})", + "SYNC_SUCCESS": "你的项目已成功导入", "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC": "你正在导入的项目有 {{members}} 位成员,不幸的是,根据你当前的计划,每个项目最多允许 {{max_memberships}} 位成员。如果你希望增加这个限制请联系管理员。", "PRIVATE_PROJECTS_SPACE": { "TITLE": "对不起,你当前的计划不允许额外的私有项目", "DESC": "你尝试导入的项目是私有的。不幸的是,你当前的计划不允许额外的私有项目。" @@ -1517,18 +1517,18 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" + "SECTION_TITLE_CREATE_PROJECT": "创建项目", + "CREATE_PROJECT_TEXT": "清新与整洁,让人兴奋的项目", + "CHOOSE_TEMPLATE": "哪个模板最适合你的项目?", + "CHOOSE_TEMPLATE_TITLE": "了解关于项目模板的更多知识", + "CHOOSE_TEMPLATE_INFO": "更多信息", + "PROJECT_DETAILS": "项目细节", + "PUBLIC_PROJECT": "公开项目", + "PRIVATE_PROJECT": "私有项目", + "CREATE_PROJECT": "创建项目", + "MAX_PRIVATE_PROJECTS": "你已经达到了私有项目的最大成员数目", + "MAX_PUBLIC_PROJECTS": "对不起,你已经达了公开项目的最大成员上限", + "CHANGE_PLANS": "改变计划" }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - 维基 - {{projectName}}", diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 834179c8..44cec5ac 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -873,10 +873,10 @@ "SECTION_TITLE": "你的專案", "PLACEHOLDER_SEARCH": "搜尋", "ACTION_CREATE_PROJECT": "創建專案", - "ACTION_IMPORT_PROJECT": "Import project", + "ACTION_IMPORT_PROJECT": "滙入專案", "MANAGE_PROJECTS": "管理專案", "TITLE_CREATE_PROJECT": "創建專案", - "TITLE_IMPORT_PROJECT": "Import project", + "TITLE_IMPORT_PROJECT": "滙入專案", "TITLE_PRVIOUS_PROJECT": "顯示過去專案", "TITLE_NEXT_PROJECT": "顯示下一個任務", "HELP_TITLE": "Taiga支援頁", @@ -903,17 +903,17 @@ "ACTION_REORDER": "拖移 & 丟到來記錄" }, "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", - "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", + "TITLE": "滙入專案中", + "UPLOADING_FILE": "上傳傾倒檔案", + "DESCRIPTION": "這個過桯要花點時間,請保持视窗開啟", + "ASYNC_IN_PROGRESS_TITLE": "我們的工程師對你的專案很重要哦", + "ASYNC_IN_PROGRESS_MESSAGE": "這個過程要花上一點時間
    當弄好時我們會發給你一封郵件", + "UPLOAD_IN_PROGRESS_MESSAGE": "已上傳 {{totalSize}}中的{{uploadedSize}} ", + "ERROR": "系統在滙進你倒入的資料時遇上一些問題,請再試一次", + "ERROR_TOO_MANY_REQUEST": "抱歉系統繁忙中,請稍後再試試 ", + "ERROR_MESSAGE": "我們的系統無法滙入你的資料", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})", + "SYNC_SUCCESS": "你的專案已成功滙入", "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", "PRIVATE_PROJECTS_SPACE": { @@ -1517,15 +1517,15 @@ } }, "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Create Project", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", + "SECTION_TITLE_CREATE_PROJECT": "創建專案", + "CREATE_PROJECT_TEXT": "新鮮與乾淨,太好了", "CHOOSE_TEMPLATE": "Which template fits your project best?", "CHOOSE_TEMPLATE_TITLE": "More info about project templates", "CHOOSE_TEMPLATE_INFO": "More info", "PROJECT_DETAILS": "Project Details", "PUBLIC_PROJECT": "Public Project", "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", + "CREATE_PROJECT": "創建專案", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", "CHANGE_PLANS": "change plans" From e6b2a91ed3ed6b6dd1b80cdaead6865b81917370 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Mon, 20 Feb 2017 14:47:13 +0100 Subject: [PATCH 127/175] ie editor bugs --- app/coffee/modules/common.coffee | 6 +----- app/modules/components/wysiwyg/wysiwyg.directive.coffee | 9 +++++++-- app/modules/components/wysiwyg/wysiwyg.scss | 1 - app/modules/components/wysiwyg/wysiwyg.service.coffee | 3 +-- app/partials/common/components/wysiwyg-toolbar.jade | 8 ++++---- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/app/coffee/modules/common.coffee b/app/coffee/modules/common.coffee index 6499272d..11455fa6 100644 --- a/app/coffee/modules/common.coffee +++ b/app/coffee/modules/common.coffee @@ -378,11 +378,7 @@ Svg = () -> {{svgTitle}} - + {{svgTitleTranslate | translate: svgTitleTranslateValues}} """ diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index f937f2d6..927a767f 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -148,6 +148,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.required = !!$attrs.$attr.required $scope.editMode = isEditOnly || false $scope.mode = $storage.get('editor-mode', 'html') + $scope.markdown = '' wysiwygService.loadEmojis() @@ -166,7 +167,9 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.mode = mode mediumInstance.trigger('editableBlur', {}, editorMedium[0]) - $scope.save = () -> + $scope.save = (e) -> + e.preventDefault() if e + if $scope.mode == 'html' updateMarkdownWithCurrentHtml() @@ -179,7 +182,9 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad return - $scope.cancel = () -> + $scope.cancel = (e) -> + e.preventDefault() if e + if !isEditOnly $scope.editMode = false diff --git a/app/modules/components/wysiwyg/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss index ad20e9fd..4bfce409 100644 --- a/app/modules/components/wysiwyg/wysiwyg.scss +++ b/app/modules/components/wysiwyg/wysiwyg.scss @@ -78,7 +78,6 @@ } p { margin-bottom: 1rem; - max-width: 80rem; word-wrap: break-word; } .codehilite { diff --git a/app/modules/components/wysiwyg/wysiwyg.service.coffee b/app/modules/components/wysiwyg/wysiwyg.service.coffee index 84b1069b..67236ffa 100644 --- a/app/modules/components/wysiwyg/wysiwyg.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.service.coffee @@ -66,8 +66,7 @@ class WysiwygService return text removeTrailingListBr: (text) -> - regex = new RegExp(/
  • (.*?)
    <\/li>/, 'g') - return text.replace(regex, '
  • $1
  • ') + return text.replace(/
  • (.*?)
    <\/li>/g, '
  • $1
  • ') getMarkdown: (html) -> # https://github.com/yabwe/medium-editor/issues/543 diff --git a/app/partials/common/components/wysiwyg-toolbar.jade b/app/partials/common/components/wysiwyg-toolbar.jade index af77eedd..67ca9673 100644 --- a/app/partials/common/components/wysiwyg-toolbar.jade +++ b/app/partials/common/components/wysiwyg-toolbar.jade @@ -8,8 +8,8 @@ ) textarea.markdown.e2e-markdown-textarea( - placeholder="{{placeholder}}" - ng-change="changeMarkdown()" + ng-attr-placeholder="{{placeholder}}" + ng-change="changeMarkdown(markdown)" ng-model="markdown" ng-show="mode == 'markdown' && editMode" ) @@ -47,12 +47,12 @@ ng-class="{disabled: required && !markdown.length}" tg-loading="saving" href="#", - ng-click="save()" + ng-click="save($event)" ) tg-svg(svg-icon="icon-save") a.e2e-cancel-editor( href="#", - ng-click="cancel()" + ng-click="cancel($event)" title="{{ 'COMMON.CANCEL' | translate }}" ) tg-svg(svg-icon="icon-close") From 4d9ac44dbaefaafe0d05d1523928bc1d32884ee8 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Tue, 21 Feb 2017 16:53:12 +0100 Subject: [PATCH 128/175] Fixing epics e2e tests --- e2e/helpers/epics-dashboard-helper.js | 2 ++ package.json | 2 +- prism-languages.json | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/e2e/helpers/epics-dashboard-helper.js b/e2e/helpers/epics-dashboard-helper.js index 787acd1c..b09e923b 100644 --- a/e2e/helpers/epics-dashboard-helper.js +++ b/e2e/helpers/epics-dashboard-helper.js @@ -22,6 +22,7 @@ helper.epic = function() { $('.e2e-create-epic-blocked').click(); $('.e2e-create-epic-blocked-note').clear().sendKeys(date + description); $('.e2e-create-epic-button').click(); + await browser.waitForAngular(); }, displayUserStoriesinEpic: async function() { utils.common.takeScreenshot("epics", "epics-child-closed"); @@ -79,6 +80,7 @@ helper.epic = function() { $('.e2e-epics-column-button').click(); utils.common.takeScreenshot("epics", "epics-edit-columns"); $$('.e2e-epics-column-dropdown .check').first().click(); + await browser.waitForAngular(); } } diff --git a/package.json b/package.json index 80fa4db2..a0ccf7d2 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "devDependencies": { "angular-mocks": "1.5.5", - "babel-cli": "^6.6.5", + "babel-cli": "^6.23.0", "babel-polyfill": "^6.7.4", "babel-preset-es2015": "^6.6.0", "babel-preset-stage-0": "^6.5.0", diff --git a/prism-languages.json b/prism-languages.json index be5b8e15..6d79b676 100644 --- a/prism-languages.json +++ b/prism-languages.json @@ -1 +1 @@ -[{"file":"prism-abap.min.js","name":"abap"},{"file":"prism-actionscript.min.js","name":"actionscript"},{"file":"prism-apacheconf.min.js","name":"apacheconf"},{"file":"prism-apl.min.js","name":"apl"},{"file":"prism-applescript.min.js","name":"applescript"},{"file":"prism-asciidoc.min.js","name":"asciidoc"},{"file":"prism-aspnet.min.js","name":"aspnet"},{"file":"prism-autohotkey.min.js","name":"autohotkey"},{"file":"prism-autoit.min.js","name":"autoit"},{"file":"prism-bash.min.js","name":"bash"},{"file":"prism-basic.min.js","name":"basic"},{"file":"prism-batch.min.js","name":"batch"},{"file":"prism-bison.min.js","name":"bison"},{"file":"prism-brainfuck.min.js","name":"brainfuck"},{"file":"prism-bro.min.js","name":"bro"},{"file":"prism-c.min.js","name":"c"},{"file":"prism-clike.min.js","name":"clike"},{"file":"prism-coffeescript.min.js","name":"coffeescript"},{"file":"prism-core.min.js","name":"core"},{"file":"prism-cpp.min.js","name":"cpp"},{"file":"prism-crystal.min.js","name":"crystal"},{"file":"prism-csharp.min.js","name":"csharp"},{"file":"prism-css-extras.min.js","name":"css-extras"},{"file":"prism-css.min.js","name":"css"},{"file":"prism-d.min.js","name":"d"},{"file":"prism-dart.min.js","name":"dart"},{"file":"prism-diff.min.js","name":"diff"},{"file":"prism-docker.min.js","name":"docker"},{"file":"prism-eiffel.min.js","name":"eiffel"},{"file":"prism-elixir.min.js","name":"elixir"},{"file":"prism-erlang.min.js","name":"erlang"},{"file":"prism-fortran.min.js","name":"fortran"},{"file":"prism-fsharp.min.js","name":"fsharp"},{"file":"prism-gherkin.min.js","name":"gherkin"},{"file":"prism-git.min.js","name":"git"},{"file":"prism-glsl.min.js","name":"glsl"},{"file":"prism-go.min.js","name":"go"},{"file":"prism-groovy.min.js","name":"groovy"},{"file":"prism-haml.min.js","name":"haml"},{"file":"prism-handlebars.min.js","name":"handlebars"},{"file":"prism-haskell.min.js","name":"haskell"},{"file":"prism-haxe.min.js","name":"haxe"},{"file":"prism-http.min.js","name":"http"},{"file":"prism-icon.min.js","name":"icon"},{"file":"prism-inform7.min.js","name":"inform7"},{"file":"prism-ini.min.js","name":"ini"},{"file":"prism-j.min.js","name":"j"},{"file":"prism-jade.min.js","name":"jade"},{"file":"prism-java.min.js","name":"java"},{"file":"prism-javascript.min.js","name":"javascript"},{"file":"prism-json.min.js","name":"json"},{"file":"prism-jsx.min.js","name":"jsx"},{"file":"prism-julia.min.js","name":"julia"},{"file":"prism-keyman.min.js","name":"keyman"},{"file":"prism-kotlin.min.js","name":"kotlin"},{"file":"prism-latex.min.js","name":"latex"},{"file":"prism-less.min.js","name":"less"},{"file":"prism-lolcode.min.js","name":"lolcode"},{"file":"prism-lua.min.js","name":"lua"},{"file":"prism-makefile.min.js","name":"makefile"},{"file":"prism-markdown.min.js","name":"markdown"},{"file":"prism-markup.min.js","name":"markup"},{"file":"prism-matlab.min.js","name":"matlab"},{"file":"prism-mel.min.js","name":"mel"},{"file":"prism-mizar.min.js","name":"mizar"},{"file":"prism-monkey.min.js","name":"monkey"},{"file":"prism-nasm.min.js","name":"nasm"},{"file":"prism-nginx.min.js","name":"nginx"},{"file":"prism-nim.min.js","name":"nim"},{"file":"prism-nix.min.js","name":"nix"},{"file":"prism-nsis.min.js","name":"nsis"},{"file":"prism-objectivec.min.js","name":"objectivec"},{"file":"prism-ocaml.min.js","name":"ocaml"},{"file":"prism-oz.min.js","name":"oz"},{"file":"prism-parigp.min.js","name":"parigp"},{"file":"prism-parser.min.js","name":"parser"},{"file":"prism-pascal.min.js","name":"pascal"},{"file":"prism-perl.min.js","name":"perl"},{"file":"prism-php-extras.min.js","name":"php-extras"},{"file":"prism-php.min.js","name":"php"},{"file":"prism-powershell.min.js","name":"powershell"},{"file":"prism-processing.min.js","name":"processing"},{"file":"prism-prolog.min.js","name":"prolog"},{"file":"prism-protobuf.min.js","name":"protobuf"},{"file":"prism-puppet.min.js","name":"puppet"},{"file":"prism-pure.min.js","name":"pure"},{"file":"prism-python.min.js","name":"python"},{"file":"prism-q.min.js","name":"q"},{"file":"prism-qore.min.js","name":"qore"},{"file":"prism-r.min.js","name":"r"},{"file":"prism-rest.min.js","name":"rest"},{"file":"prism-rip.min.js","name":"rip"},{"file":"prism-roboconf.min.js","name":"roboconf"},{"file":"prism-ruby.min.js","name":"ruby"},{"file":"prism-rust.min.js","name":"rust"},{"file":"prism-sas.min.js","name":"sas"},{"file":"prism-sass.min.js","name":"sass"},{"file":"prism-scala.min.js","name":"scala"},{"file":"prism-scheme.min.js","name":"scheme"},{"file":"prism-scss.min.js","name":"scss"},{"file":"prism-smalltalk.min.js","name":"smalltalk"},{"file":"prism-smarty.min.js","name":"smarty"},{"file":"prism-sql.min.js","name":"sql"},{"file":"prism-stylus.min.js","name":"stylus"},{"file":"prism-swift.min.js","name":"swift"},{"file":"prism-tcl.min.js","name":"tcl"},{"file":"prism-textile.min.js","name":"textile"},{"file":"prism-twig.min.js","name":"twig"},{"file":"prism-typescript.min.js","name":"typescript"},{"file":"prism-verilog.min.js","name":"verilog"},{"file":"prism-vhdl.min.js","name":"vhdl"},{"file":"prism-vim.min.js","name":"vim"},{"file":"prism-wiki.min.js","name":"wiki"},{"file":"prism-yaml.min.js","name":"yaml"}] \ No newline at end of file +[{"file":"prism-abap.min.js","name":"abap"},{"file":"prism-actionscript.min.js","name":"actionscript"},{"file":"prism-ada.min.js","name":"ada"},{"file":"prism-apacheconf.min.js","name":"apacheconf"},{"file":"prism-apl.min.js","name":"apl"},{"file":"prism-applescript.min.js","name":"applescript"},{"file":"prism-asciidoc.min.js","name":"asciidoc"},{"file":"prism-aspnet.min.js","name":"aspnet"},{"file":"prism-autohotkey.min.js","name":"autohotkey"},{"file":"prism-autoit.min.js","name":"autoit"},{"file":"prism-bash.min.js","name":"bash"},{"file":"prism-basic.min.js","name":"basic"},{"file":"prism-batch.min.js","name":"batch"},{"file":"prism-bison.min.js","name":"bison"},{"file":"prism-brainfuck.min.js","name":"brainfuck"},{"file":"prism-bro.min.js","name":"bro"},{"file":"prism-c.min.js","name":"c"},{"file":"prism-clike.min.js","name":"clike"},{"file":"prism-coffeescript.min.js","name":"coffeescript"},{"file":"prism-core.min.js","name":"core"},{"file":"prism-cpp.min.js","name":"cpp"},{"file":"prism-crystal.min.js","name":"crystal"},{"file":"prism-csharp.min.js","name":"csharp"},{"file":"prism-css-extras.min.js","name":"css-extras"},{"file":"prism-css.min.js","name":"css"},{"file":"prism-d.min.js","name":"d"},{"file":"prism-dart.min.js","name":"dart"},{"file":"prism-diff.min.js","name":"diff"},{"file":"prism-docker.min.js","name":"docker"},{"file":"prism-eiffel.min.js","name":"eiffel"},{"file":"prism-elixir.min.js","name":"elixir"},{"file":"prism-erlang.min.js","name":"erlang"},{"file":"prism-fortran.min.js","name":"fortran"},{"file":"prism-fsharp.min.js","name":"fsharp"},{"file":"prism-gherkin.min.js","name":"gherkin"},{"file":"prism-git.min.js","name":"git"},{"file":"prism-glsl.min.js","name":"glsl"},{"file":"prism-go.min.js","name":"go"},{"file":"prism-graphql.min.js","name":"graphql"},{"file":"prism-groovy.min.js","name":"groovy"},{"file":"prism-haml.min.js","name":"haml"},{"file":"prism-handlebars.min.js","name":"handlebars"},{"file":"prism-haskell.min.js","name":"haskell"},{"file":"prism-haxe.min.js","name":"haxe"},{"file":"prism-http.min.js","name":"http"},{"file":"prism-icon.min.js","name":"icon"},{"file":"prism-inform7.min.js","name":"inform7"},{"file":"prism-ini.min.js","name":"ini"},{"file":"prism-j.min.js","name":"j"},{"file":"prism-jade.min.js","name":"jade"},{"file":"prism-java.min.js","name":"java"},{"file":"prism-javascript.min.js","name":"javascript"},{"file":"prism-jolie.min.js","name":"jolie"},{"file":"prism-json.min.js","name":"json"},{"file":"prism-jsx.min.js","name":"jsx"},{"file":"prism-julia.min.js","name":"julia"},{"file":"prism-keyman.min.js","name":"keyman"},{"file":"prism-kotlin.min.js","name":"kotlin"},{"file":"prism-latex.min.js","name":"latex"},{"file":"prism-less.min.js","name":"less"},{"file":"prism-livescript.min.js","name":"livescript"},{"file":"prism-lolcode.min.js","name":"lolcode"},{"file":"prism-lua.min.js","name":"lua"},{"file":"prism-makefile.min.js","name":"makefile"},{"file":"prism-markdown.min.js","name":"markdown"},{"file":"prism-markup.min.js","name":"markup"},{"file":"prism-matlab.min.js","name":"matlab"},{"file":"prism-mel.min.js","name":"mel"},{"file":"prism-mizar.min.js","name":"mizar"},{"file":"prism-monkey.min.js","name":"monkey"},{"file":"prism-nasm.min.js","name":"nasm"},{"file":"prism-nginx.min.js","name":"nginx"},{"file":"prism-nim.min.js","name":"nim"},{"file":"prism-nix.min.js","name":"nix"},{"file":"prism-nsis.min.js","name":"nsis"},{"file":"prism-objectivec.min.js","name":"objectivec"},{"file":"prism-ocaml.min.js","name":"ocaml"},{"file":"prism-oz.min.js","name":"oz"},{"file":"prism-parigp.min.js","name":"parigp"},{"file":"prism-parser.min.js","name":"parser"},{"file":"prism-pascal.min.js","name":"pascal"},{"file":"prism-perl.min.js","name":"perl"},{"file":"prism-php-extras.min.js","name":"php-extras"},{"file":"prism-php.min.js","name":"php"},{"file":"prism-powershell.min.js","name":"powershell"},{"file":"prism-processing.min.js","name":"processing"},{"file":"prism-prolog.min.js","name":"prolog"},{"file":"prism-properties.min.js","name":"properties"},{"file":"prism-protobuf.min.js","name":"protobuf"},{"file":"prism-puppet.min.js","name":"puppet"},{"file":"prism-pure.min.js","name":"pure"},{"file":"prism-python.min.js","name":"python"},{"file":"prism-q.min.js","name":"q"},{"file":"prism-qore.min.js","name":"qore"},{"file":"prism-r.min.js","name":"r"},{"file":"prism-reason.min.js","name":"reason"},{"file":"prism-rest.min.js","name":"rest"},{"file":"prism-rip.min.js","name":"rip"},{"file":"prism-roboconf.min.js","name":"roboconf"},{"file":"prism-ruby.min.js","name":"ruby"},{"file":"prism-rust.min.js","name":"rust"},{"file":"prism-sas.min.js","name":"sas"},{"file":"prism-sass.min.js","name":"sass"},{"file":"prism-scala.min.js","name":"scala"},{"file":"prism-scheme.min.js","name":"scheme"},{"file":"prism-scss.min.js","name":"scss"},{"file":"prism-smalltalk.min.js","name":"smalltalk"},{"file":"prism-smarty.min.js","name":"smarty"},{"file":"prism-sql.min.js","name":"sql"},{"file":"prism-stylus.min.js","name":"stylus"},{"file":"prism-swift.min.js","name":"swift"},{"file":"prism-tcl.min.js","name":"tcl"},{"file":"prism-textile.min.js","name":"textile"},{"file":"prism-twig.min.js","name":"twig"},{"file":"prism-typescript.min.js","name":"typescript"},{"file":"prism-verilog.min.js","name":"verilog"},{"file":"prism-vhdl.min.js","name":"vhdl"},{"file":"prism-vim.min.js","name":"vim"},{"file":"prism-wiki.min.js","name":"wiki"},{"file":"prism-xojo.min.js","name":"xojo"},{"file":"prism-yaml.min.js","name":"yaml"}] \ No newline at end of file From 901eb6323ed516735ef36b43a82ecb87f0d352ca Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 22 Feb 2017 08:24:47 +0100 Subject: [PATCH 129/175] Fixing block e2e tests --- e2e/helpers/detail-helper.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/e2e/helpers/detail-helper.js b/e2e/helpers/detail-helper.js index 3051b6fd..d6a1d676 100644 --- a/e2e/helpers/detail-helper.js +++ b/e2e/helpers/detail-helper.js @@ -261,8 +261,9 @@ helper.blockLightbox = function() { waitClose: function() { return utils.notifications.success.close(); }, - fill: function(text) { + fill: async function(text) { el.$('textarea').sendKeys(text); + await browser.waitForAngular(); }, submit: async function() { el.$('a.button-green').click(); From 688555734f47ea2e12ab5a3fbfaac2873503459e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 22 Feb 2017 17:15:21 +0100 Subject: [PATCH 130/175] Update CHANGELOG --- CHANGELOG.md | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32421c32..af771a08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,22 +3,29 @@ ## 3.1.0 No name yet (no date yet) ### Features +- New project creation form: Now you can: + - duplicate a project. + - import from Taiga. + - import from Trello. + - import from Jira. + - import from GitHub. + - import from Asana. +- Improve add-members form: Now users can select between their contacts or type an email. - Contact with the project: if the projects have this module enabled Taiga users can contact them. - Velocity forecasting. Create sprints according to team velocity. -- Remove bower, now use only npm packages. - Add new wysiwyg editor (like the Medunm editor) with emojis, local storage changes, mentions... - Add rich text custom fields (with a wysiwyg editor like descreption or comments). -- Add thumbnails and preview for PSD files. -- Add thumbnails and preview for SVG files. -- Improve add-members form: Now users can select between their contacts or type an email. -- New project creation with importing +- Add thumbnails and preview for: + - PSD files. + - SVG files. - i18n: - - Add japanese (ja) translation. - - Add korean (ko) translation. - - Add chinese simplified (zh-Hans) translation. + - Add japanese (ja) translation. + - Add korean (ko) translation. + - Add chinese simplified (zh-Hans) translation. ### Misc - Lots of small and not so small bugfixes. +- Remove bower, now use only npm packages. ## 3.0.0 Stellaria Borealis (2016-10-02) From 8bd4345c368110c3eeeff51300171fe0bb43978f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Thu, 23 Feb 2017 09:22:09 +0100 Subject: [PATCH 131/175] Fixed text auth without perms --- e2e/suites/auth/auth.e2e.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/suites/auth/auth.e2e.js b/e2e/suites/auth/auth.e2e.js index ff4557c4..4345e5b1 100644 --- a/e2e/suites/auth/auth.e2e.js +++ b/e2e/suites/auth/auth.e2e.js @@ -47,7 +47,7 @@ describe('auth', function() { let url = await browser.getCurrentUrl(); - expect(url).to.be.equal(browser.params.glob.host + 'login?next=' + encodeURIComponent('/' + path)); + expect(url).to.be.equal(browser.params.glob.host + 'login?unauthorized&next=' + encodeURIComponent('/' + path)); }); it("login redirect to the previous one", async function() { From 3779c6f56915551294060134cbfef13ed21b026e Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 23 Feb 2017 09:51:50 +0100 Subject: [PATCH 132/175] Fixing custom fields e2e tests --- .../admin/attributes/custom-fields.e2e.js | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/e2e/suites/admin/attributes/custom-fields.e2e.js b/e2e/suites/admin/attributes/custom-fields.e2e.js index aef42ac7..11221c3b 100644 --- a/e2e/suites/admin/attributes/custom-fields.e2e.js +++ b/e2e/suites/admin/attributes/custom-fields.e2e.js @@ -18,17 +18,18 @@ describe('custom-fields', function() { describe('create custom fields', function() { describe('epics', function() { let typeIndex = 0; + let timestamp = new Date().getTime(); it('create', async function() { let oldCountCustomFields = await customFieldsHelper.getCustomFiledsByType(typeIndex).count(); - await customFieldsHelper.create(typeIndex, 'test1-text', 'desc1', 1); + await customFieldsHelper.create(typeIndex, 'test1-text'+timestamp, 'desc1', 1); // debounce :( await utils.notifications.success.open(); await browser.sleep(2000); - await customFieldsHelper.create(typeIndex, 'test1-multi', 'desc1', 3); + await customFieldsHelper.create(typeIndex, 'test1-multi'+timestamp, 'desc1', 3); // debounce :( await utils.notifications.success.open(); @@ -40,7 +41,7 @@ describe('custom-fields', function() { }); it('edit', async function() { - customFieldsHelper.edit(typeIndex, 0, 'edit', 'desc2', 2); + customFieldsHelper.edit(typeIndex, 0, 'edit'+timestamp, 'desc2', 2); let open = await utils.notifications.success.open(); @@ -74,17 +75,18 @@ describe('custom-fields', function() { describe('userstories', function() { let typeIndex = 1; + let timestamp = new Date().getTime(); it('create', async function() { let oldCountCustomFields = await customFieldsHelper.getCustomFiledsByType(typeIndex).count(); - await customFieldsHelper.create(typeIndex, 'test1-text', 'desc1', 1); + await customFieldsHelper.create(typeIndex, 'test1-text'+timestamp, 'desc1', 1); // debounce :( await utils.notifications.success.open(); await browser.sleep(2000); - await customFieldsHelper.create(typeIndex, 'test1-multi', 'desc1', 3); + await customFieldsHelper.create(typeIndex, 'test1-multi'+timestamp, 'desc1', 3); // debounce :( await utils.notifications.success.open(); @@ -96,7 +98,7 @@ describe('custom-fields', function() { }); it('edit', async function() { - await customFieldsHelper.edit(typeIndex, 0, 'edit', 'desc2', 1); + await customFieldsHelper.edit(typeIndex, 0, 'edit'+timestamp, 'desc2', 1); let open = await utils.notifications.success.open(); @@ -130,15 +132,16 @@ describe('custom-fields', function() { describe('tasks', function() { let typeIndex = 2; + let timestamp = new Date().getTime(); it('create', async function() { let oldCountCustomFields = await customFieldsHelper.getCustomFiledsByType(typeIndex).count(); - await customFieldsHelper.create(typeIndex, 'test1-text', 'desc1', 1); + await customFieldsHelper.create(typeIndex, 'test1-text'+timestamp, 'desc1', 1); // debounce :( await utils.notifications.success.open(); await browser.sleep(2500); - await customFieldsHelper.create(typeIndex, 'test1-multi', 'desc1', 3); + await customFieldsHelper.create(typeIndex, 'test1-multi'+timestamp, 'desc1', 3); // debounce :( await utils.notifications.success.open(); await browser.sleep(2500); @@ -149,7 +152,7 @@ describe('custom-fields', function() { }); it('edit', async function() { - customFieldsHelper.edit(typeIndex, 0, 'edit', 'desc2', 2); + customFieldsHelper.edit(typeIndex, 0, 'edit'+timestamp, 'desc2', 2); let open = await utils.notifications.success.open(); @@ -183,17 +186,18 @@ describe('custom-fields', function() { describe('issues', function() { let typeIndex = 3; + let timestamp = new Date().getTime(); it('create', async function() { let oldCountCustomFields = await customFieldsHelper.getCustomFiledsByType(typeIndex).count(); - await customFieldsHelper.create(typeIndex, 'test1-text', 'desc1', 1); + await customFieldsHelper.create(typeIndex, 'test1-text'+timestamp, 'desc1', 1); // debounce :( await utils.notifications.success.open(); await browser.sleep(2000); - await customFieldsHelper.create(typeIndex, 'test1-multi', 'desc1', 3); + await customFieldsHelper.create(typeIndex, 'test1-multi'+timestamp, 'desc1', 3); // debounce :( await utils.notifications.success.open(); @@ -205,7 +209,7 @@ describe('custom-fields', function() { }); it('edit', async function() { - customFieldsHelper.edit(typeIndex, 0, 'edit', 'desc2', 2); + customFieldsHelper.edit(typeIndex, 0, 'edit'+timestamp, 'desc2', 2); let open = await utils.notifications.success.open(); From 95cc401208dcaf75cc69a67c271bda3aa492919c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Thu, 23 Feb 2017 10:20:39 +0100 Subject: [PATCH 133/175] Removed getOuterHTML and getInnerHTML and replaced with getAttribute --- e2e/helpers/detail-helper.js | 4 +- e2e/helpers/wiki-helper.js | 2 +- e2e/shared/wysiwyg.js | 22 +++++----- e2e/suites/home.e2e.js | 2 +- .../user-profile/user-profile-votes.e2e.js | 32 +++++++-------- .../user-profile/user-profile-watched.e2e.js | 40 +++++++++---------- e2e/utils/common.js | 8 ++-- 7 files changed, 55 insertions(+), 55 deletions(-) diff --git a/e2e/helpers/detail-helper.js b/e2e/helpers/detail-helper.js index d6a1d676..74834f39 100644 --- a/e2e/helpers/detail-helper.js +++ b/e2e/helpers/detail-helper.js @@ -38,7 +38,7 @@ helper.description = function(){ }, getInnerHtml: async function(text){ - let html = await el.$(".wysiwyg.editable").getInnerHtml(); + let html = await el.$(".wysiwyg.editable").getAttribute("innerHTML"); return html; }, @@ -109,7 +109,7 @@ helper.statusSelector = function() { return this.getSelectedStatus(); }, getSelectedStatus: async function(){ - return el.$$('.detail-status-inner .e2e-status').first().getInnerHtml(); + return el.$$('.detail-status-inner .e2e-status').first().getAttribute("innerHTML"); } }; diff --git a/e2e/helpers/wiki-helper.js b/e2e/helpers/wiki-helper.js index c648d0c5..549b7a23 100644 --- a/e2e/helpers/wiki-helper.js +++ b/e2e/helpers/wiki-helper.js @@ -82,7 +82,7 @@ helper.editor = function(){ }, getInnerHtml: async function(text){ - let wikiText = await el.$(".view-wiki-content .wysiwyg").getInnerHtml(); + let wikiText = await el.$(".view-wiki-content .wysiwyg").getAttribute("innerHTML"); return wikiText; }, diff --git a/e2e/shared/wysiwyg.js b/e2e/shared/wysiwyg.js index db9c012c..4dc3097a 100644 --- a/e2e/shared/wysiwyg.js +++ b/e2e/shared/wysiwyg.js @@ -153,7 +153,7 @@ shared.wysiwygTestingComments = function(parentSelector, section) { htmlMode(); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.eql('

    test2

    \n'); @@ -229,7 +229,7 @@ shared.wysiwygTestingComments = function(parentSelector, section) { $$('.medium-mention li').get(2).click(); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.eql('

    @user8 

    '); @@ -251,7 +251,7 @@ shared.wysiwygTestingComments = function(parentSelector, section) { $$('.medium-mention li').get(2).click(); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.include('1f604.png'); @@ -267,13 +267,13 @@ shared.wysiwygTestingComments = function(parentSelector, section) { }); it('cancel', async () => { - let prevHtml = await editor.getInnerHtml(); + let prevHtml = await editor.getAttribute("innerHTML"); await edit(editor, editorWrapper, 'xxx yyy zzz'); await cancelEdition(editorWrapper); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.equal(prevHtml); }); @@ -362,7 +362,7 @@ shared.wysiwygTesting = function(parentSelector) { resetSelection(); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.eql('

    test

    '); @@ -388,7 +388,7 @@ shared.wysiwygTesting = function(parentSelector) { htmlMode(); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.eql('

    test2

    \n'); }); @@ -455,7 +455,7 @@ shared.wysiwygTesting = function(parentSelector) { $$('.medium-mention li').get(2).click(); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.eql('

    @user8 

    '); @@ -475,7 +475,7 @@ shared.wysiwygTesting = function(parentSelector) { $$('.medium-mention li').get(2).click(); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.include('1f604.png'); @@ -487,13 +487,13 @@ shared.wysiwygTesting = function(parentSelector) { }); it('cancel', async () => { - let prevHtml = await editor.getInnerHtml(); + let prevHtml = await editor.getAttribute("innerHTML"); await edit(editor, editorWrapper, 'xxx yyy zzz'); await cancelEdition(editorWrapper); - let html = await editor.getInnerHtml(); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.equal(prevHtml); }); diff --git a/e2e/suites/home.e2e.js b/e2e/suites/home.e2e.js index 71d26bd0..58186112 100644 --- a/e2e/suites/home.e2e.js +++ b/e2e/suites/home.e2e.js @@ -60,7 +60,7 @@ describe('home', function() { }); it('projects menu has the new order', async function() { - var firstElementText = await $$('div[tg-dropdown-project-list] ul a span').first().getInnerHtml(); + var firstElementText = await $$('div[tg-dropdown-project-list] ul a span').first().getAttribute("innerHTML"); expect(firstElementText).to.be.equal(draggedElementText); }); diff --git a/e2e/suites/user-profile/user-profile-votes.e2e.js b/e2e/suites/user-profile/user-profile-votes.e2e.js index f1402e8b..115c07ee 100644 --- a/e2e/suites/user-profile/user-profile-votes.e2e.js +++ b/e2e/suites/user-profile/user-profile-votes.e2e.js @@ -41,49 +41,49 @@ describe('user profile - votes', function() { }); it('votes tab - filter epics', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(1).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('votes tab - filter user stories', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(2).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('votes tab - filter tasks', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(3).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('votes tab - filter issues', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(4).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); @@ -143,49 +143,49 @@ describe('user profile - votes', function() { }); it('votes tab - filter epics', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(1).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('votes tab - filter user stories', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(2).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('votes tab - filter tasks', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(3).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('votes tab - filter issues', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(4).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); diff --git a/e2e/suites/user-profile/user-profile-watched.e2e.js b/e2e/suites/user-profile/user-profile-watched.e2e.js index df85a428..195a8960 100644 --- a/e2e/suites/user-profile/user-profile-watched.e2e.js +++ b/e2e/suites/user-profile/user-profile-watched.e2e.js @@ -42,62 +42,62 @@ describe('user profile - watched', function() { }); it('watched tab - filter projects', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(1).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('watched tab - filter epics', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(2).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('watched tab - filter user stories', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(3).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('watched tab - filter tasks', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(4).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('watched tab - filter issues', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(5).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); @@ -157,61 +157,61 @@ describe('user profile - watched', function() { }); it('watched tab - filter projects', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(1).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('watched tab - filter epics', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(2).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('watched tab - filter user stories', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(3).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('watched tab - filter tasks', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(4).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); it('watched tab - filter issues', async function() { - let allItems = await $('div[infinite-scroll]').getInnerHtml(); + let allItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); await $$('div.filters > a').get(5).click(); await browser.waitForAngular(); - let filteredItems = await $('div[infinite-scroll]').getInnerHtml(); + let filteredItems = await $('div[infinite-scroll]').getAttribute("innerHTML"); expect(allItems).to.be.not.equal(filteredItems); }); diff --git a/e2e/utils/common.js b/e2e/utils/common.js index d3a3c4dc..6c998675 100644 --- a/e2e/utils/common.js +++ b/e2e/utils/common.js @@ -328,11 +328,11 @@ common.outerHtmlChanges = async function(el='body') { el = $(el); } - let html = await el.getOuterHtml(); + let html = await el.getAttribute('outerHTML'); return function() { return browser.wait(async function() { - let newhtml = await el.getOuterHtml(); + let newhtml = await el.getAttribute('outerHTML'); return html !== newhtml; }, 5000).then(function() { @@ -346,11 +346,11 @@ common.innerHtmlChanges = async function(el='body') { el = $(el); } - let html = await el.getInnerHtml(); + let html = await el.getAttribute('innerHTML'); return function() { return browser.wait(async function() { - let newhtml = await el.getOuterHtml(); + let newhtml = await el.getAttribute('outerHTML'); return html !== newhtml; }, 5000).then(function() { From 02b9e5c74394808ec1751f9c805882b9bf08b80a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Thu, 23 Feb 2017 10:53:53 +0100 Subject: [PATCH 134/175] Ensure that success message is closed until try to continue clicking unwatch --- e2e/suites/project-home.e2e.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/suites/project-home.e2e.js b/e2e/suites/project-home.e2e.js index 6278abd7..a6973587 100644 --- a/e2e/suites/project-home.e2e.js +++ b/e2e/suites/project-home.e2e.js @@ -90,7 +90,7 @@ describe('project home', function() { await form.$('.e2e-lightbox-contact-project-message').sendKeys('contact'); form.$('.e2e-lightbox-contact-project-button').click(); await utils.notifications.success.open(); - + await utils.notifications.success.close(); }); it('unwatch', async function() { From a96df9f31e19781af662f70fe26331e339157976 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 23 Feb 2017 12:31:52 +0100 Subject: [PATCH 135/175] Fixing admin e2e tests --- e2e/utils/common.js | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/e2e/utils/common.js b/e2e/utils/common.js index 6c998675..fbad28e4 100644 --- a/e2e/utils/common.js +++ b/e2e/utils/common.js @@ -481,23 +481,17 @@ common.closeJoyride = async function() { }; common.createProject = async function(members = []) { - var createProject = require('../helpers').createProject; - var notifications = require('./notifications'); + var createProjectHelper = require('../helpers/create-project-helper'); + var newProjectScreen = createProjectHelper.newProjectScreen(); - browser.get(browser.params.glob.host + 'projects/'); + browser.get(browser.params.glob.host + 'project/new'); await common.waitLoader(); - - let lb = createProject.createProjectLightbox(); - - createProject.openWizard(); - - await lb.waitOpen(); - - lb.name().sendKeys('aaa'); - - lb.description().sendKeys('bbb'); - - await lb.submit(); + await newProjectScreen.selectScrumOption(); + let projectName = 'name ' + Date.now(); + let projectDescription = 'description ' + Date.now(); + await newProjectScreen.fillNameAndDescription(projectName, projectDescription); + await newProjectScreen.createProject(); + let url = await browser.getCurrentUrl(); if (members.length) { var adminMembershipsHelper = require('../helpers').adminMemberships; @@ -516,6 +510,7 @@ common.createProject = async function(members = []) { for(var i = 0; i < members.length; i++) { newMemberLightbox.newEmail(members[i]); + newMemberLightbox.setRole(0); } newMemberLightbox.submit(); From 0b31cd0106d50dca15f630b5261bc00057de3749 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 23 Feb 2017 12:35:46 +0100 Subject: [PATCH 136/175] Fixing team e2e tests --- e2e/suites/team.e2e.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/suites/team.e2e.js b/e2e/suites/team.e2e.js index d147cac3..4a85fb0e 100644 --- a/e2e/suites/team.e2e.js +++ b/e2e/suites/team.e2e.js @@ -61,7 +61,7 @@ describe('team', function() { it('team filled', async function() { let total = await teamHelper.team().count(); - expect(total).to.be.equal(10); + expect(total).to.be.equal(9); }); it('search username', async function() { From 3f09356f2ea500be4bd5abe4fa7b5674bf4adc32 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 23 Feb 2017 14:39:52 +0100 Subject: [PATCH 137/175] Fixing userProfile e2e tests --- e2e/suites/user-profile/user-profile-votes.e2e.js | 6 ++++-- e2e/suites/user-profile/user-profile-watched.e2e.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/e2e/suites/user-profile/user-profile-votes.e2e.js b/e2e/suites/user-profile/user-profile-votes.e2e.js index 115c07ee..24695a48 100644 --- a/e2e/suites/user-profile/user-profile-votes.e2e.js +++ b/e2e/suites/user-profile/user-profile-votes.e2e.js @@ -137,6 +137,8 @@ describe('user profile - votes', function() { let endTotal = await $$('div[infinite-scroll] > div').count(); + console.log(startTotal, endTotal); + let hasMoreItems = startTotal < endTotal; expect(hasMoreItems).to.be.equal(true); @@ -205,9 +207,9 @@ describe('user profile - votes', function() { await utils.common.clear($('div.searchbox > input')); await htmlChanges(); - filteredItems = await $$('div[infinite-scroll] > div').count(); + let unfilteredItems = await $$('div[infinite-scroll] > div').count(); - expect(allItems).to.be.equal(filteredItems); + expect(unfilteredItems).to.be.not.equal(filteredItems); }); }); diff --git a/e2e/suites/user-profile/user-profile-watched.e2e.js b/e2e/suites/user-profile/user-profile-watched.e2e.js index 195a8960..5de5b4bc 100644 --- a/e2e/suites/user-profile/user-profile-watched.e2e.js +++ b/e2e/suites/user-profile/user-profile-watched.e2e.js @@ -16,7 +16,7 @@ describe('user profile - watched', function() { $$('.tab').get(3).click(); - await helper.waitLoader(); + await browser.waitForAngular(); utils.common.takeScreenshot('user-profile', 'current-user-watched'); }); From d0cafea3747f9f7bfa24f3652928800a62fa24c8 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 23 Feb 2017 14:44:59 +0100 Subject: [PATCH 138/175] Removing unnecessary console.log --- e2e/suites/user-profile/user-profile-votes.e2e.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/e2e/suites/user-profile/user-profile-votes.e2e.js b/e2e/suites/user-profile/user-profile-votes.e2e.js index 24695a48..b3df6cc7 100644 --- a/e2e/suites/user-profile/user-profile-votes.e2e.js +++ b/e2e/suites/user-profile/user-profile-votes.e2e.js @@ -137,8 +137,6 @@ describe('user profile - votes', function() { let endTotal = await $$('div[infinite-scroll] > div').count(); - console.log(startTotal, endTotal); - let hasMoreItems = startTotal < endTotal; expect(hasMoreItems).to.be.equal(true); From 1f218c7a38eb12fc9b8c45fe837897c014cba009 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Thu, 23 Feb 2017 14:51:50 +0100 Subject: [PATCH 139/175] Fixing userProfile e2e tests --- e2e/suites/user-profile/user-profile-likes.e2e.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/suites/user-profile/user-profile-likes.e2e.js b/e2e/suites/user-profile/user-profile-likes.e2e.js index 5f162ac0..0e3b75f0 100644 --- a/e2e/suites/user-profile/user-profile-likes.e2e.js +++ b/e2e/suites/user-profile/user-profile-likes.e2e.js @@ -16,7 +16,7 @@ describe('user profile - likes', function() { $$('.tab').get(1).click(); - await helper.waitLoader(); + await browser.waitForAngular(); utils.common.takeScreenshot('user-profile', 'current-user-likes'); }); From 3e83dfb81e21163024161a7a32780c573045b873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Thu, 23 Feb 2017 16:15:02 +0100 Subject: [PATCH 140/175] Fixed kanban filtering --- e2e/shared/filters.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/e2e/shared/filters.js b/e2e/shared/filters.js index 3cc193ad..93977b8b 100644 --- a/e2e/shared/filters.js +++ b/e2e/shared/filters.js @@ -43,6 +43,7 @@ module.exports = function(name, counter) { }); it('save custom filters', async () => { + await filterHelper.openCustomFiltersCategory() let len = await counter(); let customFiltersSize = await filterHelper.getCustomFilters().count(); @@ -51,6 +52,8 @@ module.exports = function(name, counter) { await filterHelper.clearFilters(); await filterHelper.firterByLastCustomFilter(); + await browser.sleep(200); + let newLength = await counter(); let newCustomFiltersSize = await filterHelper.getCustomFilters().count(); From aaf90fbf428cdc8440bea74f3c001e964c6325d4 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 24 Feb 2017 09:31:55 +0100 Subject: [PATCH 141/175] Fixing createProject e2e tests --- .../create/duplicate/duplicate-project.controller.coffee | 3 ++- e2e/suites/create-project/duplicate.e2e.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/modules/projects/create/duplicate/duplicate-project.controller.coffee b/app/modules/projects/create/duplicate/duplicate-project.controller.coffee index 278f37f7..7395a941 100644 --- a/app/modules/projects/create/duplicate/duplicate-project.controller.coffee +++ b/app/modules/projects/create/duplicate/duplicate-project.controller.coffee @@ -44,7 +44,7 @@ class DuplicateProjectController refreshReferenceProject: (slug) -> @projectsService.getProjectBySlug(slug).then (project) => @.referenceProject = project - @.members = project.get('members') + @.members = project.get('members').filter (it) => return it.get('id') != @.user.get('id') @.invitedMembers = @.members.map (it) -> return it.get('id') @.checkUsersLimit() @@ -63,6 +63,7 @@ class DuplicateProjectController submit: () -> projectId = @.referenceProject.get('id') data = @.projectForm + data.users = @.invitedMembers @.formSubmitLoading = true @projectsService.duplicate(projectId, data).then (newProject) => diff --git a/e2e/suites/create-project/duplicate.e2e.js b/e2e/suites/create-project/duplicate.e2e.js index 767e7de3..2ed3af95 100644 --- a/e2e/suites/create-project/duplicate.e2e.js +++ b/e2e/suites/create-project/duplicate.e2e.js @@ -20,6 +20,7 @@ describe('create-duplicate-delete project', function() { let projectName = 'duplicated-project-' + Date.now(); newProjectScreen.fillNameAndDescription(projectName, 'Lorem Ipsum') await newProjectScreen.createProject(); + await browser.waitForAngular(); let url = await browser.getCurrentUrl(); expect(url).to.be.equal(browser.params.glob.host + 'project/admin-' + projectName + '/'); }); From 7a00f04f4a00fd38284643cbc7a858d81861415f Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 24 Feb 2017 10:15:00 +0100 Subject: [PATCH 142/175] Fixing transferProject e2e tests --- e2e/suites/transfer-project.e2e.js | 17 +++++++++-------- e2e/utils/common.js | 4 +++- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/e2e/suites/transfer-project.e2e.js b/e2e/suites/transfer-project.e2e.js index 22b15d4b..c51e2395 100644 --- a/e2e/suites/transfer-project.e2e.js +++ b/e2e/suites/transfer-project.e2e.js @@ -8,8 +8,9 @@ chai.use(chaiAsPromised); var expect = chai.expect; describe('transfer project', () => { + let projectSlug = ''; before(async () => { - await utils.common.createProject(['user5@taigaio.demo']); + projectSlug = await utils.common.createProject(['user5@taigaio.demo']); await utils.nav .init() @@ -22,7 +23,7 @@ describe('transfer project', () => { await lb.waitOpen(); - lb.search('Alicia Flores'); + lb.search('Angela Perez'); lb.select(0); lb.addComment('text'); @@ -41,9 +42,9 @@ describe('transfer project', () => { }); it('reject', async () => { - let token = await utils.common.getTransferProjectToken('admin-aaa', 'user5'); + let token = await utils.common.getTransferProjectToken(projectSlug, 'user5'); - browser.get(browser.params.glob.host + 'project/admin-aaa/transfer/' + token); + browser.get(browser.params.glob.host + 'project/'+ projectSlug +'/transfer/' + token); await utils.common.waitLoader(); @@ -57,9 +58,9 @@ describe('transfer project', () => { }); it('accept', async () => { - let token = await utils.common.getTransferProjectToken('admin-aaa', 'user5'); + let token = await utils.common.getTransferProjectToken(projectSlug, 'user5'); - browser.get(browser.params.glob.host + 'project/admin-aaa/transfer/' + token); + browser.get(browser.params.glob.host + 'project/' + projectSlug + '/transfer/' + token); await utils.common.waitLoader(); @@ -78,9 +79,9 @@ describe('transfer project', () => { max_memberships_public_projects: 0 }); - let token = await utils.common.getTransferProjectToken('admin-aaa', 'user5'); + let token = await utils.common.getTransferProjectToken(projectSlug, 'user5'); - browser.get(browser.params.glob.host + 'project/admin-aaa/transfer/' + token); + browser.get(browser.params.glob.host + 'project/'+ projectSlug +'/transfer/' + token); await utils.common.waitLoader(); diff --git a/e2e/utils/common.js b/e2e/utils/common.js index fbad28e4..d78feafe 100644 --- a/e2e/utils/common.js +++ b/e2e/utils/common.js @@ -491,7 +491,8 @@ common.createProject = async function(members = []) { let projectDescription = 'description ' + Date.now(); await newProjectScreen.fillNameAndDescription(projectName, projectDescription); await newProjectScreen.createProject(); - let url = await browser.getCurrentUrl(); + let projectUrl = await browser.getCurrentUrl() + let projectSlug = projectUrl.split('/')[4]; if (members.length) { var adminMembershipsHelper = require('../helpers').adminMemberships; @@ -517,6 +518,7 @@ common.createProject = async function(members = []) { await newMemberLightbox.waitClose(); } + return projectSlug; }; common.getTransferProjectToken = function(projectSlug, username) { From e2ed2ff7ae7ed60a51a55b98cfb4bd764ca13ad6 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Fri, 24 Feb 2017 11:31:29 +0100 Subject: [PATCH 143/175] Fixing issues e2e tests --- e2e/shared/filters.js | 8 -------- e2e/suites/issues/issues.e2e.js | 9 +++------ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/e2e/shared/filters.js b/e2e/shared/filters.js index 93977b8b..f8049df8 100644 --- a/e2e/shared/filters.js +++ b/e2e/shared/filters.js @@ -43,24 +43,16 @@ module.exports = function(name, counter) { }); it('save custom filters', async () => { - await filterHelper.openCustomFiltersCategory() - let len = await counter(); let customFiltersSize = await filterHelper.getCustomFilters().count(); await filterHelper.firterByCategoryWithContent(); await filterHelper.saveFilter("custom-filter"); await filterHelper.clearFilters(); - await filterHelper.firterByLastCustomFilter(); - await browser.sleep(200); - - let newLength = await counter(); let newCustomFiltersSize = await filterHelper.getCustomFilters().count(); - expect(newLength).to.be.below(len); expect(newCustomFiltersSize).to.be.equal(customFiltersSize + 1); - await filterHelper.clearFilters(); }); it('remove custom filters', async () => { diff --git a/e2e/suites/issues/issues.e2e.js b/e2e/suites/issues/issues.e2e.js index 1ead1c3a..39b7bbf0 100644 --- a/e2e/suites/issues/issues.e2e.js +++ b/e2e/suites/issues/issues.e2e.js @@ -13,7 +13,7 @@ describe('issues list', function() { before(async function() { browser.get(browser.params.glob.host + 'project/project-3/issues'); - await utils.common.waitLoader(); + await browser.waitForAngular(); utils.common.takeScreenshot('issues', 'issues'); }); @@ -95,13 +95,10 @@ describe('issues list', function() { // test every column order for(let i = 0; i < 7; i++) { - let htmlChanges = await utils.common.outerHtmlChanges(table); issuesHelper.clickColumn(i); - await htmlChanges(); - - htmlChanges = await utils.common.outerHtmlChanges(table); + await browser.waitForAngular(); issuesHelper.clickColumn(i); - await htmlChanges(); + await browser.waitForAngular(); } }); From d233ea2ef2ceef1334f7c57b79483ff0f8a04787 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 27 Feb 2017 10:47:00 +0100 Subject: [PATCH 144/175] Fixing user stories e2e tests --- app/coffee/modules/related-tasks.coffee | 11 +++++++++-- e2e/helpers/us-detail-helper.js | 8 +++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/app/coffee/modules/related-tasks.coffee b/app/coffee/modules/related-tasks.coffee index 1c180850..9d42ae32 100644 --- a/app/coffee/modules/related-tasks.coffee +++ b/app/coffee/modules/related-tasks.coffee @@ -34,6 +34,8 @@ RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $tem templateEdit = $template.get("task/related-task-row-edit.html", true) link = ($scope, $el, $attrs, $model) -> + @childScope = $scope.$new() + saveTask = debounce 2000, (task) -> task.subject = $el.find('input').val() @@ -53,7 +55,10 @@ RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $tem return promise renderEdit = (task) -> - $el.html($compile(templateEdit({task: task}))($scope)) + @childScope.$destroy() + @childScope = $scope.$new() + $el.off() + $el.html($compile(templateEdit({task: task}))(childScope)) $el.find(".task-name input").val(task.subject) @@ -72,6 +77,8 @@ RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $tem renderView($model.$modelValue) renderView = (task) -> + @childScope.$destroy() + @childScope = $scope.$new() $el.off() perms = { @@ -79,7 +86,7 @@ RelatedTaskRowDirective = ($repo, $compile, $confirm, $rootscope, $loading, $tem delete_task: $scope.project.my_permissions.indexOf("delete_task") != -1 } - $el.html($compile(templateView({task: task, perms: perms}))($scope)) + $el.html($compile(templateView({task: task, perms: perms}))(childScope)) $el.on "click", ".edit-task", -> renderEdit($model.$modelValue) diff --git a/e2e/helpers/us-detail-helper.js b/e2e/helpers/us-detail-helper.js index b419d433..7509831e 100644 --- a/e2e/helpers/us-detail-helper.js +++ b/e2e/helpers/us-detail-helper.js @@ -32,15 +32,17 @@ helper.createRelatedTasks = function(name, status, assigned_to) { let form = $('.related-task-create-form'); - return helper.relatedTaskForm(form, status, assigned_to); + return helper.relatedTaskForm(form, name, status, assigned_to); }; -helper.editRelatedTasks = function(taskIndex, name, status, assigned_to) { +helper.editRelatedTasks = async function(taskIndex, name, status, assigned_to) { let task = helper.relatedTasks().get(taskIndex); task.$('.edit-task').click(); - return helper.relatedTaskForm(task, status, assigned_to); + helper.relatedTaskForm(task, name, status, assigned_to); + + await browser.sleep(30000); }; helper.editRelatedTasksEnabled = function() { From 57b34e0fa7cc8323301cfa2eeecae013ff51e1de Mon Sep 17 00:00:00 2001 From: xaviju Date: Mon, 27 Feb 2017 10:49:21 +0100 Subject: [PATCH 145/175] Fix leading 0 --- app/styles/dependencies/mixins/create.scss | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/styles/dependencies/mixins/create.scss b/app/styles/dependencies/mixins/create.scss index cdf763c5..0a02611b 100644 --- a/app/styles/dependencies/mixins/create.scss +++ b/app/styles/dependencies/mixins/create.scss @@ -9,11 +9,11 @@ label { @include font-size(small); display: block; - margin-bottom: 0.25rem; + margin-bottom: .25rem; .mumble { @include font-type(light); - margin-left: 0.25rem; + margin-left: .25rem; } } @@ -53,7 +53,7 @@ .icon { @include svg-size(1.5rem); - margin-right: 0.5rem; + margin-right: .5rem; vertical-align: middle; } } @@ -102,7 +102,7 @@ text-transform: uppercase; span { - margin-left: 0.5rem; + margin-left: .5rem; } } @@ -119,7 +119,7 @@ li { &:hover { background: rgba($primary, .1); - transition: background 0.3s ease-in; + transition: background .3s ease-in; } &:first-child { @@ -154,7 +154,7 @@ margin-top: 1rem; max-height: 120px; overflow: hidden; - transition: all 0.3s 0.2s cubic-bezier(0, 0, .53, 1.32); + transition: all .3s .2s cubic-bezier(0, 0, .53, 1.32); &.ng-hide { line-height: 0; @@ -170,7 +170,7 @@ &:hover { svg { fill: $primary; - transition: fill 0.2s linear; + transition: fill .2s linear; } } @@ -191,7 +191,7 @@ button { @include font-size(large); - padding: 0.75rem; + padding: .75rem; } &-submit { From d1ee2f745c0eb9695389151d9df76c0b72c3026b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 27 Feb 2017 11:08:00 +0100 Subject: [PATCH 146/175] Fix indent --- app/modules/projects/create/github-import/github-import.jade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/modules/projects/create/github-import/github-import.jade b/app/modules/projects/create/github-import/github-import.jade index 21bfee8b..f69ea30d 100644 --- a/app/modules/projects/create/github-import/github-import.jade +++ b/app/modules/projects/create/github-import/github-import.jade @@ -1,5 +1,5 @@ .create-project.import-project(ng-if="vm.step == 'autorization-github'") - p autorization... + p autorization... tg-import-project-selector( From bf8e6ee4ac7f7548060c82e6660d819853a5c3c1 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 27 Feb 2017 11:58:49 +0100 Subject: [PATCH 147/175] Fixing karma tests --- .../duplicate/duplicate-project.controller.spec.coffee | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/modules/projects/create/duplicate/duplicate-project.controller.spec.coffee b/app/modules/projects/create/duplicate/duplicate-project.controller.spec.coffee index 92c35ebe..dc06e995 100644 --- a/app/modules/projects/create/duplicate/duplicate-project.controller.spec.coffee +++ b/app/modules/projects/create/duplicate/duplicate-project.controller.spec.coffee @@ -87,7 +87,11 @@ describe "DuplicateProjectController", -> } ]) - + ctrl.user = Immutable.fromJS([ + { + id: 1 + } + ]) ctrl.canCreatePublicProjects = mocks.currentUserService.canCreatePublicProjects() ctrl.canCreatePrivateProjects = mocks.currentUserService.canCreatePublicProjects() @@ -125,7 +129,7 @@ describe "DuplicateProjectController", -> ctrl.refreshReferenceProject(slug).then () -> expect(ctrl.referenceProject).to.be.equal(project) - expect(ctrl.members).to.be.equal(project.get('members')) + expect(ctrl.members.toJS()).to.be.eql(project.get('members').toJS()) expect(ctrl.invitedMembers.toJS()).to.be.eql([1, 2, 3]) it 'check users limits', () -> From f59e468d000d690c02c293e879a8e0a3d23195cd Mon Sep 17 00:00:00 2001 From: xaviju Date: Mon, 27 Feb 2017 12:18:39 +0100 Subject: [PATCH 148/175] Restore import subtitle --- app/locales/taiga/locale-en.json | 3 ++- app/modules/projects/create/import/import-header.jade | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index b1b6ed0f..3b9e9984 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -939,7 +939,7 @@ "DUPLICATE": "Duplicate project", "DUPLICATE_DESC": "Start clean and keep your configuration", "IMPORT": "Import project", - "IMPORT_DESC": "Import from Taiga, Trello, Jira, Github...", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", "INVITE": "Invite to the project", "SOLO_PROJECT": "You'll be alone in this project", "INVITE_LATER": "(You'll be able to invite more members later)", @@ -972,6 +972,7 @@ }, "IMPORT": { "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", "IMPORT": "Import", "ARCHIVED": "Archived", "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", diff --git a/app/modules/projects/create/import/import-header.jade b/app/modules/projects/create/import/import-header.jade index 0daaa50e..f2c0560f 100644 --- a/app/modules/projects/create/import/import-header.jade +++ b/app/modules/projects/create/import/import-header.jade @@ -1,2 +1,3 @@ section.import-project-from h1.create-project-title(translate="PROJECT.IMPORT.TITLE") + h3.create-project-description(translate="PROJECT.IMPORT.DESCRIPTION") From 2a2034eaa9fcea0e6697ca8ccaa3fbbc96effe1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Mon, 27 Feb 2017 12:32:46 +0100 Subject: [PATCH 149/175] Replacing sleeps with wait until success notification is closed --- e2e/suites/admin/attributes/custom-fields.e2e.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/e2e/suites/admin/attributes/custom-fields.e2e.js b/e2e/suites/admin/attributes/custom-fields.e2e.js index 11221c3b..5a6b7470 100644 --- a/e2e/suites/admin/attributes/custom-fields.e2e.js +++ b/e2e/suites/admin/attributes/custom-fields.e2e.js @@ -27,13 +27,13 @@ describe('custom-fields', function() { // debounce :( await utils.notifications.success.open(); - await browser.sleep(2000); + await utils.notifications.success.close(); await customFieldsHelper.create(typeIndex, 'test1-multi'+timestamp, 'desc1', 3); // debounce :( await utils.notifications.success.open(); - await browser.sleep(2000); + await utils.notifications.success.close(); let countCustomFields = await customFieldsHelper.getCustomFiledsByType(typeIndex).count(); @@ -84,13 +84,13 @@ describe('custom-fields', function() { // debounce :( await utils.notifications.success.open(); - await browser.sleep(2000); + await utils.notifications.success.close(); await customFieldsHelper.create(typeIndex, 'test1-multi'+timestamp, 'desc1', 3); // debounce :( await utils.notifications.success.open(); - await browser.sleep(2000); + await utils.notifications.success.close(); let countCustomFields = await customFieldsHelper.getCustomFiledsByType(typeIndex).count(); @@ -139,12 +139,12 @@ describe('custom-fields', function() { await customFieldsHelper.create(typeIndex, 'test1-text'+timestamp, 'desc1', 1); // debounce :( await utils.notifications.success.open(); - await browser.sleep(2500); + await utils.notifications.success.close(); await customFieldsHelper.create(typeIndex, 'test1-multi'+timestamp, 'desc1', 3); // debounce :( await utils.notifications.success.open(); - await browser.sleep(2500); + await utils.notifications.success.close(); let countCustomFields = await customFieldsHelper.getCustomFiledsByType(typeIndex).count(); @@ -195,13 +195,13 @@ describe('custom-fields', function() { // debounce :( await utils.notifications.success.open(); - await browser.sleep(2000); + await utils.notifications.success.close(); await customFieldsHelper.create(typeIndex, 'test1-multi'+timestamp, 'desc1', 3); // debounce :( await utils.notifications.success.open(); - await browser.sleep(2000); + await utils.notifications.success.close(); let countCustomFields = await customFieldsHelper.getCustomFiledsByType(typeIndex).count(); From ebf160f61f5853bd73ff1f89946d7a184586ffa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 27 Feb 2017 17:33:32 +0100 Subject: [PATCH 150/175] Fix importers --- app/locales/taiga/locale-ca.json | 210 +++++++++++++----- app/locales/taiga/locale-de.json | 210 +++++++++++++----- app/locales/taiga/locale-en.json | 8 + app/locales/taiga/locale-es.json | 210 +++++++++++++----- app/locales/taiga/locale-fi.json | 210 +++++++++++++----- app/locales/taiga/locale-fr.json | 210 +++++++++++++----- app/locales/taiga/locale-it.json | 210 +++++++++++++----- app/locales/taiga/locale-ja.json | 210 +++++++++++++----- app/locales/taiga/locale-ko.json | 210 +++++++++++++----- app/locales/taiga/locale-nb.json | 210 +++++++++++++----- app/locales/taiga/locale-nl.json | 210 +++++++++++++----- app/locales/taiga/locale-pl.json | 210 +++++++++++++----- app/locales/taiga/locale-pt-br.json | 210 +++++++++++++----- app/locales/taiga/locale-ru.json | 210 +++++++++++++----- app/locales/taiga/locale-sv.json | 210 +++++++++++++----- app/locales/taiga/locale-tr.json | 210 +++++++++++++----- app/locales/taiga/locale-zh-hans.json | 210 +++++++++++++----- app/locales/taiga/locale-zh-hant.json | 210 +++++++++++++----- .../import/import-project.service.coffee | 8 +- 19 files changed, 2649 insertions(+), 937 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index c5374c73..590161e3 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?" }, "FILTERS": { - "TITLE": "Filtres", "INPUT_PLACEHOLDER": "Descripció o referència", "TITLE_ACTION_FILTER_BUTTON": "cerca", + "TITLE": "Filtres", "INPUT_SEARCH_PLACEHOLDER": "Descripció o ref", "TITLE_ACTION_SEARCH": "Cerca", "ACTION_SAVE_CUSTOM_FILTER": "Guarda com a filtre", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Els teus projectes", "PLACEHOLDER_SEARCH": "Cerca en...", "ACTION_CREATE_PROJECT": "Crear projecte", - "ACTION_IMPORT_PROJECT": "Importar projecte", "MANAGE_PROJECTS": "Gestiona els projectes", "TITLE_CREATE_PROJECT": "Crear projecte", - "TITLE_IMPORT_PROJECT": "Importar projecte", "TITLE_PRVIOUS_PROJECT": "Mostra projectes previs", "TITLE_NEXT_PROJECT": "Mostrar próxims projectes", "HELP_TITLE": "Pàgina d'ajuda de Taiga", @@ -902,44 +900,6 @@ "DISCOVER": "Descobreix", "ACTION_REORDER": "Arrossega els elements per endreçar" }, - "IMPORT": { - "TITLE": "Important Projecte", - "UPLOADING_FILE": "Pujant arxiu de dades", - "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": "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}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})", - "SYNC_SUCCESS": "El teu projecte s'ha importat correctament", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "M'agrada", "LIKED": "T'agrada", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Crear projecte", + "FRESH": "Nou projecte. Qué il·lusió!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importar projecte", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Nou projecte. Qué il·lusió!", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Crear projecte", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "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": "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}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})", + "SYNC_SUCCESS": "El teu projecte s'ha importat correctament", + "IMPORT": "Import", + "ARCHIVED": "Archived", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Assign", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "Important Projecte", + "DESCRIPTION": "Aquest procés pot durar una mica, pero favor mantinga la finestra oberta" + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Incidències", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- utilitza el tema per defecte --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Crear projecte", - "CREATE_PROJECT_TEXT": "Nou projecte. Qué il·lusió!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Crear projecte", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index 5ae550bc..29bfa7ab 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Alle Werte in benutzerdefinierten Feldern werden gelöscht.\n Sind Sie sicher, dass Sie fortfahren wollen?" }, "FILTERS": { - "TITLE": "Filter", "INPUT_PLACEHOLDER": "Betreff oder Verweis", "TITLE_ACTION_FILTER_BUTTON": "suche", + "TITLE": "Filter", "INPUT_SEARCH_PLACEHOLDER": "Thema oder ref", "TITLE_ACTION_SEARCH": "Suche", "ACTION_SAVE_CUSTOM_FILTER": "Als Benutzerfilter speichern", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Ihre Projekte", "PLACEHOLDER_SEARCH": "Suchen...", "ACTION_CREATE_PROJECT": "Projekt anlegen", - "ACTION_IMPORT_PROJECT": "Projekt importieren", "MANAGE_PROJECTS": "Projekte verwalten", "TITLE_CREATE_PROJECT": "Projekt anlegen", - "TITLE_IMPORT_PROJECT": "Projekt importieren", "TITLE_PRVIOUS_PROJECT": "Frühere Projekte anzeigen", "TITLE_NEXT_PROJECT": "Weitere Projekte zeigen", "HELP_TITLE": "Taiga Support Seite", @@ -902,44 +900,6 @@ "DISCOVER": "Entdecken", "ACTION_REORDER": "Benutzen Sie Drag & Drop zum neuen Ordnen" }, - "IMPORT": { - "TITLE": "Projekt importieren", - "UPLOADING_FILE": "Exportdatei wird hochgeladen", - "DESCRIPTION": "Dieser Vorgang kann etwas dauern. Bitte schliessen Sie das Fenster nicht!", - "ASYNC_IN_PROGRESS_TITLE": "Unsere Helferlein importieren Ihr Projekt", - "ASYNC_IN_PROGRESS_MESSAGE": "Dieser Vorgang könnte ein paar Minuten benötigen
    Nach Fertigstellung benachrichtigen wir Sie per E-Mail.", - "UPLOAD_IN_PROGRESS_MESSAGE": "Hochgeladen {{uploadedSize}} von {{totalSize}}", - "ERROR": "Unsere Helferlein haben Probleme beim Importieren Ihrer Daten. Bitte versuchen Sie es erneut.", - "ERROR_TOO_MANY_REQUEST": "Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut.", - "ERROR_MESSAGE": "Unsere Helferlein haben Probleme beim Importieren Ihrer Datei: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})", - "SYNC_SUCCESS": "Ihr Projekt wurde erfolgreich importiert", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "Das Projekt, dass Sie importieren möchten, hat {{members}} Mitglieder. Leider erlaubt ihr derzeitiger Plan nicht mehr als {{max_memberships}} Mitglieder pro Projekt. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie bitte den Administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen.", - "DESC": "Das Projekt, das Sie versuchen zu importieren, ist privat. Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte hinzuzufügen." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte anzulegen.", - "DESC": "Das Projekt, das Sie versuchen zu importieren, ist öffentlich. Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte hinzuzufügen." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Ihr derzeitiger Plan erlaubt maximal {{max_memberships}} Mitglieder pro privatem Projekt" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Ihr derzeitiger Plan erlaubt maximal {{max_memberships}} Mitglieder pro öffentlichem Projekt" - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen oder eine Erhöhung von mehr als {{max_memberships}} Mitglieder pro privatem Projekt", - "DESC": "Das Projekt, dass Sie importieren möchten, ist privat und hat {{members}} Mitglieder." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte anzulegen oder eine Erhöhung von mehr als {{max_memberships}} Mitglieder pro öffentlichem Projekt", - "DESC": "Das Projekt, dass Sie importieren möchten, ist öffentlich und hat mehr als {{members}} Mitglieder." - } - } - }, "LIKE_BUTTON": { "LIKE": "Gefällt mir", "LIKED": "Gefällt mir", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Projekt erstellen", + "FRESH": "Frisch und sauber. Wie aufregend!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Projekt importieren", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Zurück", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Öffentliches Projekt", + "PRIVATE_PROJECT": "Privates Projekt", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Frisch und sauber. Wie aufregend!", + "CHOOSE_TEMPLATE_TITLE": "Mehr Infos über Projekt-Templates", + "CHOOSE_TEMPLATE_INFO": "Weitere Infos", + "PROJECT_DETAILS": "Projekt Details", + "PUBLIC_PROJECT": "Öffentliches Projekt", + "PRIVATE_PROJECT": "Privates Projekt", + "CREATE_PROJECT": "Projekt anlegen", + "CHANGE_PLANS": "Änderungs-Pläne" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Unsere Helferlein importieren Ihr Projekt", + "ASYNC_IN_PROGRESS_MESSAGE": "Dieser Vorgang könnte ein paar Minuten benötigen
    Nach Fertigstellung benachrichtigen wir Sie per E-Mail.", + "UPLOAD_IN_PROGRESS_MESSAGE": "Hochgeladen {{uploadedSize}} von {{totalSize}}", + "ERROR": "Unsere Helferlein haben Probleme beim Importieren Ihrer Daten. Bitte versuchen Sie es erneut.", + "ERROR_TOO_MANY_REQUEST": "Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut.", + "ERROR_MESSAGE": "Unsere Helferlein haben Probleme beim Importieren Ihrer Datei: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})", + "SYNC_SUCCESS": "Ihr Projekt wurde erfolgreich importiert", + "IMPORT": "Import", + "ARCHIVED": "Archiviert", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Projektmitglieder", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Zuweisen", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen.", + "DESC": "Das Projekt, das Sie versuchen zu importieren, ist privat. Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte hinzuzufügen." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte anzulegen.", + "DESC": "Das Projekt, das Sie versuchen zu importieren, ist öffentlich. Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte hinzuzufügen." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Ihr derzeitiger Plan erlaubt maximal {{max_memberships}} Mitglieder pro privatem Projekt" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Ihr derzeitiger Plan erlaubt maximal {{max_memberships}} Mitglieder pro öffentlichem Projekt" + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen oder eine Erhöhung von mehr als {{max_memberships}} Mitglieder pro privatem Projekt", + "DESC": "Das Projekt, dass Sie importieren möchten, ist privat und hat {{members}} Mitglieder." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte anzulegen oder eine Erhöhung von mehr als {{max_memberships}} Mitglieder pro öffentlichem Projekt", + "DESC": "Das Projekt, dass Sie importieren möchten, ist öffentlich und hat mehr als {{members}} Mitglieder." + } + }, + "IN_PROGRESS": { + "TITLE": "Projekt importieren", + "DESCRIPTION": "Dieser Vorgang kann etwas dauern. Bitte schliessen Sie das Fenster nicht!" + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Projektmitglieder", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Projektmitglieder" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Projektmitglieder", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Tickets", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- Standard-Theme benutzen --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Projekt erstellen", - "CREATE_PROJECT_TEXT": "Frisch und sauber. Wie aufregend!", - "CHOOSE_TEMPLATE": "Welches Template passt am besten zu Ihrem Projekt?", - "CHOOSE_TEMPLATE_TITLE": "Mehr Infos über Projekt-Templates", - "CHOOSE_TEMPLATE_INFO": "Weitere Infos", - "PROJECT_DETAILS": "Projekt Details", - "PUBLIC_PROJECT": "Öffentliches Projekt", - "PRIVATE_PROJECT": "Privates Projekt", - "CREATE_PROJECT": "Projekt anlegen", - "MAX_PRIVATE_PROJECTS": "Sie haben die maximale Anzahl privater Projekte erreicht", - "MAX_PUBLIC_PROJECTS": "Leider haben Sie die maximale Anzahl öffentlicher Projekte erreicht", - "CHANGE_PLANS": "Änderungs-Pläne" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Letzte Bearbeitung am {{lastModifiedDate}} ({{totalEditions}} Gesamtzahl der Bearbeitungen) Inhalt: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 3b9e9984..3391d6fd 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -973,6 +973,14 @@ "IMPORT": { "TITLE": "Import Project", "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "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", "IMPORT": "Import", "ARCHIVED": "Archived", "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 74adace4..6e92e02d 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Se borrarán todos los valores de este atributo personalizado. \n¿Estás seguro de que quieres continuar?" }, "FILTERS": { - "TITLE": "Filtros", "INPUT_PLACEHOLDER": "Asunto o referencia", "TITLE_ACTION_FILTER_BUTTON": "busqueda", + "TITLE": "Filtros", "INPUT_SEARCH_PLACEHOLDER": "Asunto o referencia", "TITLE_ACTION_SEARCH": "Buscar", "ACTION_SAVE_CUSTOM_FILTER": "guardar como filtro personalizado", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Tus proyectos", "PLACEHOLDER_SEARCH": "Buscar en...", "ACTION_CREATE_PROJECT": "Crear proyecto", - "ACTION_IMPORT_PROJECT": "Importar proyecto", "MANAGE_PROJECTS": "Administrar proyectos", "TITLE_CREATE_PROJECT": "Crear proyecto", - "TITLE_IMPORT_PROJECT": "Importar proyecto", "TITLE_PRVIOUS_PROJECT": "Mostrar proyectos anteriores", "TITLE_NEXT_PROJECT": "Mostrar siguientes proyectos", "HELP_TITLE": "Página de Soporte de Taiga", @@ -902,44 +900,6 @@ "DISCOVER": "Descubrir", "ACTION_REORDER": "Arrastrar y soltar para reordenar" }, - "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", - "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.", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "El proyecto que esta tratando de importar tiene {{members}} miembros, desafortunadamente, su plna actual solo le permite un maximo de {{max_memberships}} miembros por proyecto. si desea aumentar este limite por favor contacte al administrador.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Desafortunadamente, su plan actual no permite a los proyectos privados adicionales", - "DESC": "El proyecto que trata de importar es privado. Desafortunadamente, su plan actual no le permite adicionar mas proyectos privados" - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Desafortunadamente, su plan actual no permite adicionar mas proyectos publicos", - "DESC": "El proyecto que estás intento importar es público. Desafortunadamente, tu plan actual no permite proyectos públicos adicionales." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Su plan actual solo permite un numero maximo de {{max_memberships}} miembros por proyecto privado" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Su plan actual solo permite un maximo de {{max_memberships}} miembros por proyecto publico." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Desafortunadamente tu plan actual no permite proyectos privados adicionales o un incremento de más de {{max_memberships}} miembros por proyecto privado", - "DESC": "El proyecto que estás intentando importar es privado y tiene {{members}} miembros." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Desafortunadamente su plan actual no le permite adicionar proyectos publicos o un aumento de {{max_memberships}} miembros por proyecto publico", - "DESC": "El proyecto que estás intentando importar es público y tiene más de {{members}} miembros." - } - } - }, "LIKE_BUTTON": { "LIKE": "Me gusta", "LIKED": "Me gusta", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contacta con el equipo de proyecto", "CONTACT_BUTTON": "Contacta con el proyecto" + }, + "CREATE": { + "TITLE": "Crear Proyecto", + "FRESH": "Fresco y claro. ¡Es emocionante!", + "CHOOSE_TEMPLATE": "¿Que plantilla se ajusta mejor con tu proyecto?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicar proyecto", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importar proyecto", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invitar al proyecto", + "SOLO_PROJECT": "Estarás solo en este proyecto", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "l", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Proyecto público", + "PRIVATE_PROJECT": "Proyecto privado", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "Nuevos detalles del proyecto", + "PROJECT_TITLE": "Nombre del proyecto", + "PROJECT_DESCRIPTION": "Descripción del proyecto" + }, + "DUPLICATE": { + "TITLE": "Duplicar Proyecto", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Elije uno de tus proyectos para duplicar", + "DETAILS": "Nuevos detalles del proyecto", + "CREATE_PROJECT_TEXT": "Fresco y claro. ¡Es emocionante!", + "CHOOSE_TEMPLATE_TITLE": "Mas informacion acerca de la plantillas del proyecto", + "CHOOSE_TEMPLATE_INFO": "Mas información", + "PROJECT_DETAILS": "Detalles del proyecto", + "PUBLIC_PROJECT": "Proyecto público", + "PRIVATE_PROJECT": "Proyecto privado", + "CREATE_PROJECT": "Crear proyecto", + "CHANGE_PLANS": "cambiar planes" + }, + "IMPORT": { + "TITLE": "Importar Proyecto", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "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.", + "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.", + "IMPORT": "Importar", + "ARCHIVED": "Archivada", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Escribe el email que utiliza en Taiga", + "EMAIL_NOT_FOUND": "No hemos encontrado ningún usuario con este email ", + "ACCEEDE": "Acceder", + "PROJECT_MEMBERS": "Miembros del proyecto", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Selecciona un usuario", + "LINKS": "Enlaces con {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Asignar", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Desafortunadamente, su plan actual no permite a los proyectos privados adicionales", + "DESC": "El proyecto que trata de importar es privado. Desafortunadamente, su plan actual no le permite adicionar mas proyectos privados" + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Desafortunadamente, su plan actual no permite adicionar mas proyectos publicos", + "DESC": "El proyecto que estás intento importar es público. Desafortunadamente, tu plan actual no permite proyectos públicos adicionales." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Su plan actual solo permite un numero maximo de {{max_memberships}} miembros por proyecto privado" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Su plan actual solo permite un maximo de {{max_memberships}} miembros por proyecto publico." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Desafortunadamente tu plan actual no permite proyectos privados adicionales o un incremento de más de {{max_memberships}} miembros por proyecto privado", + "DESC": "El proyecto que estás intentando importar es privado y tiene {{members}} miembros." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Desafortunadamente su plan actual no le permite adicionar proyectos publicos o un aumento de {{max_memberships}} miembros por proyecto publico", + "DESC": "El proyecto que estás intentando importar es público y tiene más de {{members}} miembros." + } + }, + "IN_PROGRESS": { + "TITLE": "Importando Proyecto", + "DESCRIPTION": "Este proceso puede tardar un ratito, por favor mantén la ventana abierta." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Verificar contactos" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Miembros del proyecto", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "ll", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Miembros del proyecto" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Tu URL de Jira", + "PROJECT_MEMBERS": "Miembros del proyecto", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Peticiones", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- usar tema por defecto --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Crear Proyecto", - "CREATE_PROJECT_TEXT": "Fresco y claro. ¡Es emocionante!", - "CHOOSE_TEMPLATE": "¿Que plantilla se ajusta mejor con tu proyecto?", - "CHOOSE_TEMPLATE_TITLE": "Mas informacion acerca de la plantillas del proyecto", - "CHOOSE_TEMPLATE_INFO": "Mas información", - "PROJECT_DETAILS": "Detalles del proyecto", - "PUBLIC_PROJECT": "Proyecto público", - "PRIVATE_PROJECT": "Proyecto privado", - "CREATE_PROJECT": "Crear proyecto", - "MAX_PRIVATE_PROJECTS": "Has alcanzado el número máximo de proyectos privados", - "MAX_PUBLIC_PROJECTS": "Desafortunadamente, has alcanzado el número máximo de proyectos públicos", - "CHANGE_PLANS": "cambiar planes" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "última edición el {{lastModifiedDate}} ({{totalEditions}} ediciones en total) Contenido: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 88fd19d0..77d1b45f 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?" }, "FILTERS": { - "TITLE": "Suodattimet", "INPUT_PLACEHOLDER": "Aihe tai viittaus", "TITLE_ACTION_FILTER_BUTTON": "hae", + "TITLE": "Suodattimet", "INPUT_SEARCH_PLACEHOLDER": "Otsikko tai viittaus", "TITLE_ACTION_SEARCH": "Hae", "ACTION_SAVE_CUSTOM_FILTER": "tallenna omaksi suodattimeksi", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Projektisi", "PLACEHOLDER_SEARCH": "Hae täältä...", "ACTION_CREATE_PROJECT": "Luo projekti", - "ACTION_IMPORT_PROJECT": "Luo projekti tiedostosta", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Create project", - "TITLE_IMPORT_PROJECT": "Luo projekti tiedostosta", "TITLE_PRVIOUS_PROJECT": "Näytä aikaisemmat projektit", "TITLE_NEXT_PROJECT": "Näytä seuraavat projektit", "HELP_TITLE": "Taiga Support Page", @@ -902,44 +900,6 @@ "DISCOVER": "Discover", "ACTION_REORDER": "Drag & drop to reorder" }, - "IMPORT": { - "TITLE": "Luetaan sisään projektia", - "UPLOADING_FILE": "Ladataan tiedostoa", - "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": "LAdattu {{uploadedSize}} / {{totalSize}}", - "ERROR": "Oompa Loompas eivät onnistuneet tuomaan tiedostoasi. Yritä uudestaan.", - "ERROR_TOO_MANY_REQUEST": "Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan.", - "ERROR_MESSAGE": "Oompa Loompas eivät pysty lukemaan tiedostoasi: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})", - "SYNC_SUCCESS": "Projektisi on tuotu sisään onnistuneesti", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "Like", "LIKED": "Liked", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Luo projekti", + "FRESH": "Täysin koskematon. Jännittävää!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Luo projekti tiedostosta", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Palvelin", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Täysin koskematon. Jännittävää!", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Luo projekti", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "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": "LAdattu {{uploadedSize}} / {{totalSize}}", + "ERROR": "Oompa Loompas eivät onnistuneet tuomaan tiedostoasi. Yritä uudestaan.", + "ERROR_TOO_MANY_REQUEST": "Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan.", + "ERROR_MESSAGE": "Oompa Loompas eivät pysty lukemaan tiedostoasi: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})", + "SYNC_SUCCESS": "Projektisi on tuotu sisään onnistuneesti", + "IMPORT": "Import", + "ARCHIVED": "Arkistoitu", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Assign", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "Luetaan sisään projektia", + "DESCRIPTION": "Tämä voi kestää hetken, pidä ikkuna auki." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Pyynnöt", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- use default theme --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Luo projekti", - "CREATE_PROJECT_TEXT": "Täysin koskematon. Jännittävää!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Luo projekti", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 18d3dd79..90e98069 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Souvenez-vous que toutes les valeurs de ce champ personnalisé vont être effacées.\nEtes-vous sûr de vouloir continuer ?" }, "FILTERS": { - "TITLE": "Filtres", "INPUT_PLACEHOLDER": "Objet ou référence", "TITLE_ACTION_FILTER_BUTTON": "recherche", + "TITLE": "Filtres", "INPUT_SEARCH_PLACEHOLDER": "Objet ou réf.", "TITLE_ACTION_SEARCH": "Rechercher", "ACTION_SAVE_CUSTOM_FILTER": "sauvegarder en tant que filtre personnalisé", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Vos projets", "PLACEHOLDER_SEARCH": "Rechercher dans...", "ACTION_CREATE_PROJECT": "Créer un projet", - "ACTION_IMPORT_PROJECT": "Importer un projet", "MANAGE_PROJECTS": "Gérer les projets", "TITLE_CREATE_PROJECT": "Créer un projet", - "TITLE_IMPORT_PROJECT": "Importer un projet", "TITLE_PRVIOUS_PROJECT": "Montrer les projets précédents", "TITLE_NEXT_PROJECT": "Montrer les projets suivants", "HELP_TITLE": "Page d'assistance Taiga", @@ -902,44 +900,6 @@ "DISCOVER": "Découvrir", "ACTION_REORDER": "Glisser-déposer pour réorganiser" }, - "IMPORT": { - "TITLE": "Importation du projet en cours", - "UPLOADING_FILE": "Dépôt du fichier de vidage", - "DESCRIPTION": "Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte.", - "ASYNC_IN_PROGRESS_TITLE": "Nos Oompa Loompas sont en train d'importer votre projet", - "ASYNC_IN_PROGRESS_MESSAGE": "Ce processus pourrait durer plusieurs minutes
    Nous vous enverrons un courriel quand ce sera prêt", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} de {{totalSize}} déposés", - "ERROR": "Nos Oompas Loompas ont rencontré des problèmes en important vos données de vidage. 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 vos données de vidage : {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})", - "SYNC_SUCCESS": "Votre projet a été importé avec succès", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "Le projet que vous voulez importer a {{members}} membres. Votre souscription actuelle vous permet un maximum de {{max_memberships}} membres par projet. Si vous désirez augmenter cette limite, merci de contacter un administrateur.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire.", - "DESC": "Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet public supplémentaire.", - "DESC": "Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet public supplémentaire." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Votre souscription actuelle permet un maximum de {{max_memberships}} par projet privé." - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Votre souscription actuelle permet un maximum de {{max_memberships}} par projet public." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Désolé, votre souscription actuelle ne permet ni d'ajouter des projets privés supplémentaire, ni d'avoir plus de {{max_memberships}} membres par projet privé.", - "DESC": "Le projet que vous voulez importer est privé et a {{members}} membres." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Désolé, votre souscription actuelle ne permet ni d'ajouter des projets publics supplémentaire, ni d'avoir plus de {{max_memberships}} membres par projet public.", - "DESC": "Le projet que vous voulez importer est public et a {{members}} membres." - } - } - }, "LIKE_BUTTON": { "LIKE": "J'aime", "LIKED": "J'aime", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contactez l'équipe du projet", "CONTACT_BUTTON": "Contactez le projet" + }, + "CREATE": { + "TITLE": "Créer un projet", + "FRESH": "Tout beau, tout nouveau !", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importer un projet", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Projet public", + "PRIVATE_PROJECT": "Projet privé", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Tout beau, tout nouveau !", + "CHOOSE_TEMPLATE_TITLE": "Plus d'information sur les templates de projets", + "CHOOSE_TEMPLATE_INFO": "Plus d'informations", + "PROJECT_DETAILS": "Détails du projet", + "PUBLIC_PROJECT": "Projet public", + "PRIVATE_PROJECT": "Projet privé", + "CREATE_PROJECT": "Créer un projet", + "CHANGE_PLANS": "changer de souscription" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Nos Oompa Loompas sont en train d'importer votre projet", + "ASYNC_IN_PROGRESS_MESSAGE": "Ce processus pourrait durer plusieurs minutes
    Nous vous enverrons un courriel quand ce sera prêt", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} de {{totalSize}} déposés", + "ERROR": "Nos Oompas Loompas ont rencontré des problèmes en important vos données de vidage. 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 vos données de vidage : {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})", + "SYNC_SUCCESS": "Votre projet a été importé avec succès", + "IMPORT": "Import", + "ARCHIVED": "Archivé", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Membres du projet", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Affecter", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire.", + "DESC": "Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet public supplémentaire.", + "DESC": "Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet public supplémentaire." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Votre souscription actuelle permet un maximum de {{max_memberships}} par projet privé." + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Votre souscription actuelle permet un maximum de {{max_memberships}} par projet public." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Désolé, votre souscription actuelle ne permet ni d'ajouter des projets privés supplémentaire, ni d'avoir plus de {{max_memberships}} membres par projet privé.", + "DESC": "Le projet que vous voulez importer est privé et a {{members}} membres." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Désolé, votre souscription actuelle ne permet ni d'ajouter des projets publics supplémentaire, ni d'avoir plus de {{max_memberships}} membres par projet public.", + "DESC": "Le projet que vous voulez importer est public et a {{members}} membres." + } + }, + "IN_PROGRESS": { + "TITLE": "Importation du projet en cours", + "DESCRIPTION": "Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Membres du projet", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Membres du projet" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Membres du projet", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Tickets", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- utiliser le thème par défaut --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Créer un projet", - "CREATE_PROJECT_TEXT": "Tout beau, tout nouveau !", - "CHOOSE_TEMPLATE": "Quel modèle convient mieux à votre projet ?", - "CHOOSE_TEMPLATE_TITLE": "Plus d'information sur les templates de projets", - "CHOOSE_TEMPLATE_INFO": "Plus d'informations", - "PROJECT_DETAILS": "Détails du projet", - "PUBLIC_PROJECT": "Projet public", - "PRIVATE_PROJECT": "Projet privé", - "CREATE_PROJECT": "Créer un projet", - "MAX_PRIVATE_PROJECTS": "Vous avez atteint le nombre maximum de projets privés", - "MAX_PUBLIC_PROJECTS": "Désolé, vous avez atteint le nombre maximal de projet public.", - "CHANGE_PLANS": "changer de souscription" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Dernière modification le {{lastModifiedDate}} ({{totalEditions}} modifications en tout) Contenu : {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 9699d503..95b3add9 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Ricorda che tutti i valori in questo campo custom andranno persi.\nSei sicuro di voler continuare?" }, "FILTERS": { - "TITLE": "Filtri", "INPUT_PLACEHOLDER": "Soggetto o referenza", "TITLE_ACTION_FILTER_BUTTON": "cerca", + "TITLE": "Filtri", "INPUT_SEARCH_PLACEHOLDER": "Soggetto o referenza", "TITLE_ACTION_SEARCH": "Cerca", "ACTION_SAVE_CUSTOM_FILTER": "salva come filtro personalizzato", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Tuoi progetti", "PLACEHOLDER_SEARCH": "Cerca in...", "ACTION_CREATE_PROJECT": "Crea progetto", - "ACTION_IMPORT_PROJECT": "Importa progetto", "MANAGE_PROJECTS": "Gestisci Progetti", "TITLE_CREATE_PROJECT": "Crea progetto", - "TITLE_IMPORT_PROJECT": "Importa progetto", "TITLE_PRVIOUS_PROJECT": "Mostra i progetti precedenti", "TITLE_NEXT_PROJECT": "Progetto successivo", "HELP_TITLE": "Pagina di supporto Taiga", @@ -902,44 +900,6 @@ "DISCOVER": "Scopri", "ACTION_REORDER": "Usa drag & drop per riordinare" }, - "IMPORT": { - "TITLE": "Importazione Progetto", - "UPLOADING_FILE": "Carico il file di dump", - "DESCRIPTION": "Questo processo puó durare un po', nel frattempo lasciare questa finestra aperta.", - "ASYNC_IN_PROGRESS_TITLE": "I nostri Oompa Loompa stanno lavorando per importare il tuo progetto!", - "ASYNC_IN_PROGRESS_MESSAGE": "Questo processo puó durare minuti.
    Verrá inviata una mail al suo completamento", - "UPLOAD_IN_PROGRESS_MESSAGE": "Caricati {{uploadedSize}} di {{totalSize}}", - "ERROR": "Mannaggia, i Oompa Loompa hanno qualche problema ad importare il dump. Prova di nuovo.", - "ERROR_TOO_MANY_REQUEST": "Scusaci, i nostri Oompa Loompa sono di nuovo occupati. Riprova di nuovo in qualche minuto.", - "ERROR_MESSAGE": "I nostri Oompa Loompa hanno qualche problema ad importare il dump dei tuoi dati: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})", - "SYNC_SUCCESS": "Il tuo progetto è stato importato con successo", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "Il progetto che stai provando a importare ha {{members}} membri, sfortunatamente, il tuo attuale abbonamento consente un massimo di {{max_membership}} membri per progetto. Se vuoi aumentare questo limite per favore contatta l'amministratore", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati", - "DESC": "Il progetto che stai tentando di importare è privato. Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati" - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Sfortunatamente, il tuo attuale abbonamento non permette altri progetti pubblici", - "DESC": "Il progetto che stai provando a importare è pubblico. Sfortunatamente, il tuo attuale abbonamento non consente ulteriori progetti pubblici." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Il tuo abbonamento attuale permette al massimo {{max_memberships}} membri per progetto privato" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": " abbonamento attuale permette al masismo {{max_memberships}} membri per progetto pubblico." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Sfortunatamente il tuo abbonamento attuale non permette ulteriori progetti privati o un aumento di più di {{max_memberships}} membri per progetto privato", - "DESC": "Il progetto che stai provando a importare è privato e ha {{members}} membri." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Sfortunatamente il tuo attuale abbonamento non permette altri progetti pubblici o un aumento dii più di {{max_memberships}} membri per progetto pubblico", - "DESC": "Il progetto che stai cercando di importare è pubblico e ha più di {{members}} membri." - } - } - }, "LIKE_BUTTON": { "LIKE": "Mi piace", "LIKED": "Piaciuto", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contatta il team di progetto", "CONTACT_BUTTON": "Contatta il progetto" + }, + "CREATE": { + "TITLE": "Crea Progetto", + "FRESH": "Nuovo di zecca. Vai così!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importa progetto", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Progetto Pubblico", + "PRIVATE_PROJECT": "Progetto Privato", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Nuovo di zecca. Vai così!", + "CHOOSE_TEMPLATE_TITLE": "Più info sui template di progetto", + "CHOOSE_TEMPLATE_INFO": "Più info", + "PROJECT_DETAILS": "Dettagli Progetto", + "PUBLIC_PROJECT": "Progetto Pubblico", + "PRIVATE_PROJECT": "Progetto Privato", + "CREATE_PROJECT": "Crea progetto", + "CHANGE_PLANS": "cambia abbonamento" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "I nostri Oompa Loompa stanno lavorando per importare il tuo progetto!", + "ASYNC_IN_PROGRESS_MESSAGE": "Questo processo puó durare minuti.
    Verrá inviata una mail al suo completamento", + "UPLOAD_IN_PROGRESS_MESSAGE": "Caricati {{uploadedSize}} di {{totalSize}}", + "ERROR": "Mannaggia, i Oompa Loompa hanno qualche problema ad importare il dump. Prova di nuovo.", + "ERROR_TOO_MANY_REQUEST": "Scusaci, i nostri Oompa Loompa sono di nuovo occupati. Riprova di nuovo in qualche minuto.", + "ERROR_MESSAGE": "I nostri Oompa Loompa hanno qualche problema ad importare il dump dei tuoi dati: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})", + "SYNC_SUCCESS": "Il tuo progetto è stato importato con successo", + "IMPORT": "Import", + "ARCHIVED": "Archiviato", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Assegna", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati", + "DESC": "Il progetto che stai tentando di importare è privato. Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati" + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Sfortunatamente, il tuo attuale abbonamento non permette altri progetti pubblici", + "DESC": "Il progetto che stai provando a importare è pubblico. Sfortunatamente, il tuo attuale abbonamento non consente ulteriori progetti pubblici." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Il tuo abbonamento attuale permette al massimo {{max_memberships}} membri per progetto privato" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": " abbonamento attuale permette al masismo {{max_memberships}} membri per progetto pubblico." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Sfortunatamente il tuo abbonamento attuale non permette ulteriori progetti privati o un aumento di più di {{max_memberships}} membri per progetto privato", + "DESC": "Il progetto che stai provando a importare è privato e ha {{members}} membri." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Sfortunatamente il tuo attuale abbonamento non permette altri progetti pubblici o un aumento dii più di {{max_memberships}} membri per progetto pubblico", + "DESC": "Il progetto che stai cercando di importare è pubblico e ha più di {{members}} membri." + } + }, + "IN_PROGRESS": { + "TITLE": "Importazione Progetto", + "DESCRIPTION": "Questo processo puó durare un po', nel frattempo lasciare questa finestra aperta." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "problemi", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- usa tema predefinito --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Crea Progetto", - "CREATE_PROJECT_TEXT": "Nuovo di zecca. Vai così!", - "CHOOSE_TEMPLATE": "Quale template si adatta meglio al tuo progetto?", - "CHOOSE_TEMPLATE_TITLE": "Più info sui template di progetto", - "CHOOSE_TEMPLATE_INFO": "Più info", - "PROJECT_DETAILS": "Dettagli Progetto", - "PUBLIC_PROJECT": "Progetto Pubblico", - "PRIVATE_PROJECT": "Progetto Privato", - "CREATE_PROJECT": "Crea progetto", - "MAX_PRIVATE_PROJECTS": "Hai raggiunto il numero massimo di progetti privati", - "MAX_PUBLIC_PROJECTS": "Sfortunatamente. hai raggiunto il numero massimo di progetti pubblici", - "CHANGE_PLANS": "cambia abbonamento" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "L'ultima versione su {{lastModifiedDate}} ({{totalEditions}} versioni in totale) Contenuto: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index 34323074..76990141 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "このカスタムフィールドのすべての値が削除されることになります。\n本当にこのまま続行してもよろしいですか?" }, "FILTERS": { - "TITLE": "フィルター", "INPUT_PLACEHOLDER": "Subject or reference", "TITLE_ACTION_FILTER_BUTTON": "検索", + "TITLE": "フィルター", "INPUT_SEARCH_PLACEHOLDER": "Subject or ref", "TITLE_ACTION_SEARCH": "検索", "ACTION_SAVE_CUSTOM_FILTER": "カスタムフィルターとして保存する", @@ -873,10 +873,8 @@ "SECTION_TITLE": "あなたのプロジェクト", "PLACEHOLDER_SEARCH": "検索...", "ACTION_CREATE_PROJECT": "プロジェクトを作成", - "ACTION_IMPORT_PROJECT": "プロジェクトをインポート", "MANAGE_PROJECTS": "プロジェクト管理", "TITLE_CREATE_PROJECT": "プロジェクトを作成", - "TITLE_IMPORT_PROJECT": "プロジェクトをインポート", "TITLE_PRVIOUS_PROJECT": "前のプロジェクトを表示", "TITLE_NEXT_PROJECT": "次のプロジェクトを表示", "HELP_TITLE": "Taiga サポートページ", @@ -902,44 +900,6 @@ "DISCOVER": "探す", "ACTION_REORDER": "ドラッグ&ドロップで入れ替え" }, - "IMPORT": { - "TITLE": "プロジェクトをインポート中", - "UPLOADING_FILE": "ダンプファイルをアップロード中", - "DESCRIPTION": "このプロセスには時間がかかります。ウィンドウを開いたままにしていてください。", - "ASYNC_IN_PROGRESS_TITLE": "ウンパルンパたちがあなたのプロジェクトをインポートしています。", - "ASYNC_IN_PROGRESS_MESSAGE": "この処理には時間がかかります。
    準備が出来たらメールで通知します。", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 中 {{uploadedSize}} アップロード済み", - "ERROR": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。もう一度お試しください。", - "ERROR_TOO_MANY_REQUEST": "すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。", - "ERROR_MESSAGE": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。  \n{{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。", - "SYNC_SUCCESS": "プロジェクトのインポートに成功しました", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "インポートしようとしているプロジェクトのメンバー数は{{members}}名ですが、あなたの現在のプランでは1プロジェクトごとに最大{{max_memberships}}名のみ許可されています。 上限を増やしたい場合は管理者にお問い合わせください。", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "現在のプランではこれ以上の非公開プロジェクトは許可されていません。", - "DESC": "インポートしようとしているプロジェクトは非公開プロジェクトです。現在のプランではこれ以上の非公開プロジェクトは許可されていません。" - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "現在のプランではこれ以上の公開プロジェクトは許可されていません。", - "DESC": "インポートしようとしているプロジェクトは公開プロジェクトです。現在のプランではこれ以上の公開プロジェクトは許可されていません。" - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "現在のプランでは非公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "現在のプランでは公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。" - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "現在のプランではこれ以上の非公開プロジェクトの作成や、一つの非公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。", - "DESC": "インポートしようとしているのは非公開プロジェクトで{{members}}名のメンバーがいます。" - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "現在のプランではこれ以上の公開プロジェクトの作成や、一つの公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。", - "DESC": "インポートしようとしているのは公開プロジェクトで{{members}}名以上のメンバーがいます。" - } - } - }, "LIKE_BUTTON": { "LIKE": "いいね", "LIKED": "いいね", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "プロジェクトを作成", + "FRESH": "フレッシュでクリーン。わくわくしますね!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "スクラム", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "かんばん", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "プロジェクトをインポート", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "バックエンド", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "パブリック プロジェクト", + "PRIVATE_PROJECT": "プライベート プロジェクト", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "フレッシュでクリーン。わくわくしますね!", + "CHOOSE_TEMPLATE_TITLE": "プロジェクトテンプレートの詳細", + "CHOOSE_TEMPLATE_INFO": "詳細表示", + "PROJECT_DETAILS": "プロジェクト詳細", + "PUBLIC_PROJECT": "パブリック プロジェクト", + "PRIVATE_PROJECT": "プライベート プロジェクト", + "CREATE_PROJECT": "プロジェクトを作成", + "CHANGE_PLANS": "プランを変更" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "ウンパルンパたちがあなたのプロジェクトをインポートしています。", + "ASYNC_IN_PROGRESS_MESSAGE": "この処理には時間がかかります。
    準備が出来たらメールで通知します。", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 中 {{uploadedSize}} アップロード済み", + "ERROR": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。もう一度お試しください。", + "ERROR_TOO_MANY_REQUEST": "すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。", + "ERROR_MESSAGE": "ウンパルンパたちはダンプファイルのインポートに手こずっているようです。  \n{{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。", + "SYNC_SUCCESS": "プロジェクトのインポートに成功しました", + "IMPORT": "Import", + "ARCHIVED": "アーカイブ", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "プロジェクトメンバー", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "アサイン", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "現在のプランではこれ以上の非公開プロジェクトは許可されていません。", + "DESC": "インポートしようとしているプロジェクトは非公開プロジェクトです。現在のプランではこれ以上の非公開プロジェクトは許可されていません。" + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "現在のプランではこれ以上の公開プロジェクトは許可されていません。", + "DESC": "インポートしようとしているプロジェクトは公開プロジェクトです。現在のプランではこれ以上の公開プロジェクトは許可されていません。" + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "現在のプランでは非公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "現在のプランでは公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。" + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "現在のプランではこれ以上の非公開プロジェクトの作成や、一つの非公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。", + "DESC": "インポートしようとしているのは非公開プロジェクトで{{members}}名のメンバーがいます。" + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "現在のプランではこれ以上の公開プロジェクトの作成や、一つの公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。", + "DESC": "インポートしようとしているのは公開プロジェクトで{{members}}名以上のメンバーがいます。" + } + }, + "IN_PROGRESS": { + "TITLE": "プロジェクトをインポート中", + "DESCRIPTION": "このプロセスには時間がかかります。ウィンドウを開いたままにしていてください。" + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "プロジェクトメンバー", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "かんばん", + "SCRUM_PROJECT": "スクラム", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "プロジェクトメンバー" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "プロジェクトメンバー", + "KANBAN_PROJECT": "かんばん", + "SCRUM_PROJECT": "スクラム", + "ISSUES_PROJECT": "課題", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- デフォルトのテーマを使用 --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "プロジェクトを作成", - "CREATE_PROJECT_TEXT": "フレッシュでクリーン。わくわくしますね!", - "CHOOSE_TEMPLATE": "どちらのテンプレートがあなたのプロジェクトに適していますか?", - "CHOOSE_TEMPLATE_TITLE": "プロジェクトテンプレートの詳細", - "CHOOSE_TEMPLATE_INFO": "詳細表示", - "PROJECT_DETAILS": "プロジェクト詳細", - "PUBLIC_PROJECT": "パブリック プロジェクト", - "PRIVATE_PROJECT": "プライベート プロジェクト", - "CREATE_PROJECT": "プロジェクトを作成", - "MAX_PRIVATE_PROJECTS": "非公開プロジェクトの上限に達しました。", - "MAX_PUBLIC_PROJECTS": "公開プロジェクトの上限に達しました。", - "CHANGE_PLANS": "プランを変更" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "{{lastModifiedDate}} に最後に編集がありました。(合計 {{totalEditions}} 件) 内容: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index 8cb4222a..f1379939 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "이 사용자 정의 필드의 모든 값이 삭제된다는 점을 기억하십시오.\n계속 하시겠습니까?" }, "FILTERS": { - "TITLE": "필터", "INPUT_PLACEHOLDER": "제목 또는 참조", "TITLE_ACTION_FILTER_BUTTON": "검색하기", + "TITLE": "필터", "INPUT_SEARCH_PLACEHOLDER": "제목 또는 참조", "TITLE_ACTION_SEARCH": "검색", "ACTION_SAVE_CUSTOM_FILTER": "커스컴 필터 저장하기", @@ -873,10 +873,8 @@ "SECTION_TITLE": "프로젝트", "PLACEHOLDER_SEARCH": "검색하기", "ACTION_CREATE_PROJECT": "프로젝트 생성하기", - "ACTION_IMPORT_PROJECT": "프로젝트 불러오기", "MANAGE_PROJECTS": "프로젝트 관리하기", "TITLE_CREATE_PROJECT": "프로젝트 생성하기", - "TITLE_IMPORT_PROJECT": "프로젝트 불러오기", "TITLE_PRVIOUS_PROJECT": "이전 프로젝트 보기", "TITLE_NEXT_PROJECT": "다음 프로젝트 보기", "HELP_TITLE": "타이가 고객 지원 페이지", @@ -902,44 +900,6 @@ "DISCOVER": "찾기", "ACTION_REORDER": "드래그&드롭으로 순서 바꾸기" }, - "IMPORT": { - "TITLE": "프로젝트 불러오기", - "UPLOADING_FILE": "덤프 파일 업로드 중", - "DESCRIPTION": "이 과정은 시간이 걸릴 수 있습니다. 이 창을 닫지 마세요.", - "ASYNC_IN_PROGRESS_TITLE": "움파룸파가 프로젝트를 불러오고 있습니다.", - "ASYNC_IN_PROGRESS_MESSAGE": "이 작업은 몇 분 정도 걸립니다.
    작업이 끝나면 이메일로 알려드릴게요.", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 중 {{uploadedSize}} 만큼 업로드했습니다", - "ERROR": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요.", - "ERROR_TOO_MANY_REQUEST": "죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?", - "ERROR_MESSAGE": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요. {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", - "SYNC_SUCCESS": "프로젝트를 불러오는 데 성공했습니다.", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "가져오기하려는 프로젝트에 {{members}} 명의 회원이 있습니다. 안타깝게도, 현재 당신의 설정에서는 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다. 최대 수용 가능 회원 수를 늘리고 싶다면 관리자에게 문의하십시오.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "안타깝게도, 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다.", - "DESC": "가져오기하려는 프로젝트가 비공개 되어있습니다. 안타깝게도, 현재 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "안타깝게도, 당신의 현재 설정에는 추가 공공 프로젝트가 허용되어있지 않습니다.", - "DESC": "가져오기 하려는 프로젝트는 공공 프로젝트입니다. 안타깝게도, 당신의 현재 섲렁에는 추가 공공 프로젝트가 허용되어있지 않습니다." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "현재 당신의 설정으로는 비공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다." - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "현재 당신의 설정으로는 공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "안타깝게도 현재 당신의 설정으로는 추가 비공개 프로젝트가 허용되지 않았거나 비공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.", - "DESC": "가져오기 하려는 프로젝트가 비공개이며 {{members}} 명의 회원이 있습니다." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "안타깝게도 현재 당신의 설정으로는 추가 공개 프로젝트가 허용되지 않았거나 공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.", - "DESC": "가져오기 하려는 프로젝트는 공개되어있으며 {{members}} 이상의 회원이 존재합니다." - } - } - }, "LIKE_BUTTON": { "LIKE": "좋아요", "LIKED": "좋아함", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "프로젝트 팀 문의", "CONTACT_BUTTON": "프로젝트 문의" + }, + "CREATE": { + "TITLE": "프로젝트 생성하기", + "FRESH": "시원하고 개운하네요! 너무 신나요!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "스크럼", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "칸반", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "프로젝트 불러오기", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "이전", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "공개된 프로젝트", + "PRIVATE_PROJECT": "비공개 프로젝트", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "시원하고 개운하네요! 너무 신나요!", + "CHOOSE_TEMPLATE_TITLE": "프로젝트 템플릿에 대한 더 많은 정보", + "CHOOSE_TEMPLATE_INFO": "더 많은 정보", + "PROJECT_DETAILS": "프로젝트 세부사항", + "PUBLIC_PROJECT": "공개된 프로젝트", + "PRIVATE_PROJECT": "비공개 프로젝트", + "CREATE_PROJECT": "프로젝트 생성하기", + "CHANGE_PLANS": "계획 변경하기" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "움파룸파가 프로젝트를 불러오고 있습니다.", + "ASYNC_IN_PROGRESS_MESSAGE": "이 작업은 몇 분 정도 걸립니다.
    작업이 끝나면 이메일로 알려드릴게요.", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} 중 {{uploadedSize}} 만큼 업로드했습니다", + "ERROR": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요.", + "ERROR_TOO_MANY_REQUEST": "죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?", + "ERROR_MESSAGE": "움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요. {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", + "SYNC_SUCCESS": "프로젝트를 불러오는 데 성공했습니다.", + "IMPORT": "Import", + "ARCHIVED": "보관됨", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "프로젝트 회원", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "할당", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "안타깝게도, 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다.", + "DESC": "가져오기하려는 프로젝트가 비공개 되어있습니다. 안타깝게도, 현재 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "안타깝게도, 당신의 현재 설정에는 추가 공공 프로젝트가 허용되어있지 않습니다.", + "DESC": "가져오기 하려는 프로젝트는 공공 프로젝트입니다. 안타깝게도, 당신의 현재 섲렁에는 추가 공공 프로젝트가 허용되어있지 않습니다." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "현재 당신의 설정으로는 비공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다." + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "현재 당신의 설정으로는 공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "안타깝게도 현재 당신의 설정으로는 추가 비공개 프로젝트가 허용되지 않았거나 비공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.", + "DESC": "가져오기 하려는 프로젝트가 비공개이며 {{members}} 명의 회원이 있습니다." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "안타깝게도 현재 당신의 설정으로는 추가 공개 프로젝트가 허용되지 않았거나 공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.", + "DESC": "가져오기 하려는 프로젝트는 공개되어있으며 {{members}} 이상의 회원이 존재합니다." + } + }, + "IN_PROGRESS": { + "TITLE": "프로젝트 불러오기", + "DESCRIPTION": "이 과정은 시간이 걸릴 수 있습니다. 이 창을 닫지 마세요." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "프로젝트 회원", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "칸반", + "SCRUM_PROJECT": "스크럼", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "프로젝트 회원" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "프로젝트 회원", + "KANBAN_PROJECT": "칸반", + "SCRUM_PROJECT": "스크럼", + "ISSUES_PROJECT": "이슈", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- 기본 테마 사용하기 --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "프로젝트 생성하기", - "CREATE_PROJECT_TEXT": "시원하고 개운하네요! 너무 신나요!", - "CHOOSE_TEMPLATE": "당신의 프로젝트에 가장 적합한 템플릿이 무엇입니까?", - "CHOOSE_TEMPLATE_TITLE": "프로젝트 템플릿에 대한 더 많은 정보", - "CHOOSE_TEMPLATE_INFO": "더 많은 정보", - "PROJECT_DETAILS": "프로젝트 세부사항", - "PUBLIC_PROJECT": "공개된 프로젝트", - "PRIVATE_PROJECT": "비공개 프로젝트", - "CREATE_PROJECT": "프로젝트 생성하기", - "MAX_PRIVATE_PROJECTS": "최대 비공개 프로젝트 수에 도달하였습니다.", - "MAX_PUBLIC_PROJECTS": "안타깝게도, 당신은 최대 공개 프로젝트수에 도달했습니다.", - "CHANGE_PLANS": "계획 변경하기" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - 위키 - {{projectName}}", "PAGE_DESCRIPTION": "{{lastModifiedDate}}에 최종 수정 (총 {{totalEditions}} 회 수정) 내용: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 1dcdb9f5..688e0e83 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Husk at alle verdier i dette egendefinerte feltet vil bli slettet.\nEr du sikker på at du vil fortsette?" }, "FILTERS": { - "TITLE": "Filtre", "INPUT_PLACEHOLDER": "Subjekt eller referanse", "TITLE_ACTION_FILTER_BUTTON": "Søk", + "TITLE": "Filtre", "INPUT_SEARCH_PLACEHOLDER": "Subjekt eller referanse", "TITLE_ACTION_SEARCH": "Søk", "ACTION_SAVE_CUSTOM_FILTER": "lagre som egendefinert filter", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Dine prosjekter", "PLACEHOLDER_SEARCH": "Søk i...", "ACTION_CREATE_PROJECT": "Opprett prosjekt", - "ACTION_IMPORT_PROJECT": "Importer prosjekt", "MANAGE_PROJECTS": "Håndter prosjekter", "TITLE_CREATE_PROJECT": "Opprett prosjekt", - "TITLE_IMPORT_PROJECT": "Importer prosjekt", "TITLE_PRVIOUS_PROJECT": "Vis forrige prosjekter", "TITLE_NEXT_PROJECT": "Vis neste prosjekter", "HELP_TITLE": "Taiga Brukerstøtte", @@ -902,44 +900,6 @@ "DISCOVER": "Oppdag", "ACTION_REORDER": "Dra & slipp for å omorganisere" }, - "IMPORT": { - "TITLE": "Importer prosjekt", - "UPLOADING_FILE": "Laster opp dump-fil", - "DESCRIPTION": "Denne prosessen kan ta en stund, vennligst hold vinduet åpent.", - "ASYNC_IN_PROGRESS_TITLE": "Våre Oompa Loompaer importerer ditt prosjekt", - "ASYNC_IN_PROGRESS_MESSAGE": "Denne prosessen kan ta noen minutter
    Vi vil sende deg en e-post når den er klar", - "UPLOAD_IN_PROGRESS_MESSAGE": "Opplastet {{uploadedSize}} av {{totalSize}}", - "ERROR": "Våre Oompa Loompaer har problemer med å importere din data-dump. Vennligst prøv på nytt.", - "ERROR_TOO_MANY_REQUEST": "Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter.", - "ERROR_MESSAGE": "Våre Oompa Loompaer har problemer med å importere din data-dump: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})", - "SYNC_SUCCESS": "Importen av ditt prosjekt var vellykket", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "Prosjektet du prøver å importere har {{members}} medlemmer. Dessverre, din nåværende plan tillater kun {{max_memberships}} medlemmer per prosjekt. Hvis du ønsker å øke denne grensen, vennligst kontakt administratoren.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Dessverre, din nåværende plan tillater ikke private prosjekter", - "DESC": "Prosjektet du prøver å importere er privat. Dessverre tillater ikke din gjeldende flere private prosjekter." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Dessverre din gjeldende plan tillatee ikke flere offentlige prosjekter", - "DESC": "Prosjektet du prøver å importere er offentlig. Dessverre, din nåværende plan tillater ikke offentlige prosjekter." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Din nåværende plan tillater et maksimalt antall av {{max_memberships}} medlemmer per private prosjekt" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Din nåværende plan tillater maksimum {{max_memberships}} medlemmer per offentlige prosjekt." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Dessverre, din nåværende plan tillater ikke flere private prosjekter eller mer enn {{max_memberships}} medlemmer per private prosjekt", - "DESC": "Prosjektet som du prøver å importere er privat og har {{members}} medlemmer." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Dessverre, din nåværende plan tillater ikke flere offentlige prosjekter eller en økning til fler enn {{max_memberships}} medlemmer per offentlige prosjekt", - "DESC": "Prosjektet du prøver å importere er offentlig og har fler enn {{members}} medlemmer." - } - } - }, "LIKE_BUTTON": { "LIKE": "Liker", "LIKED": "Likt", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Opprett prosjekt", + "FRESH": "Friskt og stilrent. Så spennende!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importer prosjekt", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Offentlig Prosjekt", + "PRIVATE_PROJECT": "Privat Prosjekt", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Friskt og stilrent. Så spennende!", + "CHOOSE_TEMPLATE_TITLE": "Mer info om prosjektmaler", + "CHOOSE_TEMPLATE_INFO": "Mer info", + "PROJECT_DETAILS": "Prosjektdetaljer", + "PUBLIC_PROJECT": "Offentlig Prosjekt", + "PRIVATE_PROJECT": "Privat Prosjekt", + "CREATE_PROJECT": "Opprett prosjekt", + "CHANGE_PLANS": "endre planer" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Våre Oompa Loompaer importerer ditt prosjekt", + "ASYNC_IN_PROGRESS_MESSAGE": "Denne prosessen kan ta noen minutter
    Vi vil sende deg en e-post når den er klar", + "UPLOAD_IN_PROGRESS_MESSAGE": "Opplastet {{uploadedSize}} av {{totalSize}}", + "ERROR": "Våre Oompa Loompaer har problemer med å importere din data-dump. Vennligst prøv på nytt.", + "ERROR_TOO_MANY_REQUEST": "Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter.", + "ERROR_MESSAGE": "Våre Oompa Loompaer har problemer med å importere din data-dump: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})", + "SYNC_SUCCESS": "Importen av ditt prosjekt var vellykket", + "IMPORT": "Import", + "ARCHIVED": "Arkivert", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Prosjektmedlemmer", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Tildel", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Dessverre, din nåværende plan tillater ikke private prosjekter", + "DESC": "Prosjektet du prøver å importere er privat. Dessverre tillater ikke din gjeldende flere private prosjekter." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Dessverre din gjeldende plan tillatee ikke flere offentlige prosjekter", + "DESC": "Prosjektet du prøver å importere er offentlig. Dessverre, din nåværende plan tillater ikke offentlige prosjekter." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Din nåværende plan tillater et maksimalt antall av {{max_memberships}} medlemmer per private prosjekt" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Din nåværende plan tillater maksimum {{max_memberships}} medlemmer per offentlige prosjekt." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Dessverre, din nåværende plan tillater ikke flere private prosjekter eller mer enn {{max_memberships}} medlemmer per private prosjekt", + "DESC": "Prosjektet som du prøver å importere er privat og har {{members}} medlemmer." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Dessverre, din nåværende plan tillater ikke flere offentlige prosjekter eller en økning til fler enn {{max_memberships}} medlemmer per offentlige prosjekt", + "DESC": "Prosjektet du prøver å importere er offentlig og har fler enn {{members}} medlemmer." + } + }, + "IN_PROGRESS": { + "TITLE": "Importer prosjekt", + "DESCRIPTION": "Denne prosessen kan ta en stund, vennligst hold vinduet åpent." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Prosjektmedlemmer", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Prosjektmedlemmer" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Prosjektmedlemmer", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Hendelser", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- bruk standard tema --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Opprett prosjekt", - "CREATE_PROJECT_TEXT": "Friskt og stilrent. Så spennende!", - "CHOOSE_TEMPLATE": "Hvilken mal passer ditt prosjekt best?", - "CHOOSE_TEMPLATE_TITLE": "Mer info om prosjektmaler", - "CHOOSE_TEMPLATE_INFO": "Mer info", - "PROJECT_DETAILS": "Prosjektdetaljer", - "PUBLIC_PROJECT": "Offentlig Prosjekt", - "PRIVATE_PROJECT": "Privat Prosjekt", - "CREATE_PROJECT": "Opprett prosjekt", - "MAX_PRIVATE_PROJECTS": "Du har nådd maksimalt antall private prosjekter", - "MAX_PUBLIC_PROJECTS": "Dessverre, du har nådd maksimalt antall offentlige prosjekter", - "CHANGE_PLANS": "endre planer" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Siste versjon: {{lastModifiedDate}} ({{totalEditions}} versjoner totalt) Innhold: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index 79aa10e5..d1c1e5fb 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?" }, "FILTERS": { - "TITLE": "Filters", "INPUT_PLACEHOLDER": "Onderwerp of referentie", "TITLE_ACTION_FILTER_BUTTON": "zoek", + "TITLE": "Filters", "INPUT_SEARCH_PLACEHOLDER": "Onderwerp of ref.", "TITLE_ACTION_SEARCH": "Zoek", "ACTION_SAVE_CUSTOM_FILTER": "Als eigen filter opslaan", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Jouw projecten", "PLACEHOLDER_SEARCH": "Zoeken in...", "ACTION_CREATE_PROJECT": "Project aanmaken", - "ACTION_IMPORT_PROJECT": "Importeer project", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Project aanmaken", - "TITLE_IMPORT_PROJECT": "Importeer project", "TITLE_PRVIOUS_PROJECT": "Toon voorgaande projecten", "TITLE_NEXT_PROJECT": "Toon volgende projecten", "HELP_TITLE": "Taiga support pagina", @@ -902,44 +900,6 @@ "DISCOVER": "Ontdek", "ACTION_REORDER": "Sleep om de volgorde te veranderen" }, - "IMPORT": { - "TITLE": "Importeren project", - "UPLOADING_FILE": "Bezig met uploaden dump bestand", - "DESCRIPTION": "Dit proces kan even duren, laat het venster even open alsjeblieft.", - "ASYNC_IN_PROGRESS_TITLE": "Onze Oempa-Loempa's zijn je project aan het importeren", - "ASYNC_IN_PROGRESS_MESSAGE": "Dit proces kan een paar minuten duren
    We sturen je een email als het gereed is", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} van {{totalSize}} geupload", - "ERROR": "Onze Oempa-Loempa's hebben wat problemen bij het importeren van de dump. Probeer het opnieuw.", - "ERROR_TOO_MANY_REQUEST": "Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten.", - "ERROR_MESSAGE": "Onze Oempa-Loempa's hebben wat problemen met het importeren van je dump: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})", - "SYNC_SUCCESS": "Je project werd met succes geïmporteerd", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "Vind ik leuk", "LIKED": "Leuk gevonden", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Project aanmaken", + "FRESH": "Vers en proper. Spanned!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importeer project", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Vers en proper. Spanned!", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Project aanmaken", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Onze Oempa-Loempa's zijn je project aan het importeren", + "ASYNC_IN_PROGRESS_MESSAGE": "Dit proces kan een paar minuten duren
    We sturen je een email als het gereed is", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{uploadedSize}} van {{totalSize}} geupload", + "ERROR": "Onze Oempa-Loempa's hebben wat problemen bij het importeren van de dump. Probeer het opnieuw.", + "ERROR_TOO_MANY_REQUEST": "Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten.", + "ERROR_MESSAGE": "Onze Oempa-Loempa's hebben wat problemen met het importeren van je dump: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})", + "SYNC_SUCCESS": "Je project werd met succes geïmporteerd", + "IMPORT": "Import", + "ARCHIVED": "Gearchiveerd", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Assign", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "Importeren project", + "DESCRIPTION": "Dit proces kan even duren, laat het venster even open alsjeblieft." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Issues", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- gebruikt standaard thema --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Project aanmaken", - "CREATE_PROJECT_TEXT": "Vers en proper. Spanned!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Project aanmaken", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Laatst bewerkt op {{lastModifiedDate}} ({{totalEditions}} keer bewerkt in totaal) Inhoud: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index 4bd5c18a..6c027988 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?" }, "FILTERS": { - "TITLE": "Filtry", "INPUT_PLACEHOLDER": "Temat lub odniesienie", "TITLE_ACTION_FILTER_BUTTON": "szukaj", + "TITLE": "Filtry", "INPUT_SEARCH_PLACEHOLDER": "Temat lub referencja", "TITLE_ACTION_SEARCH": "Szukaj", "ACTION_SAVE_CUSTOM_FILTER": "zapisz jako filtr niestandardowy", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Twoje projekty", "PLACEHOLDER_SEARCH": "Szukaj w ...", "ACTION_CREATE_PROJECT": "Stwórz projekt", - "ACTION_IMPORT_PROJECT": "Importuj projekt", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Utwórz projekt", - "TITLE_IMPORT_PROJECT": "Importuj projekt", "TITLE_PRVIOUS_PROJECT": "Pokaż poprzedni projekt", "TITLE_NEXT_PROJECT": "Pokaż kolejne projekty", "HELP_TITLE": "Taiga strona wsparcia", @@ -902,44 +900,6 @@ "DISCOVER": "Odkryj", "ACTION_REORDER": "Przeciągnij i upuść żeby zmienić kolejność" }, - "IMPORT": { - "TITLE": "Importowanie Projektu", - "UPLOADING_FILE": "Umpa Lumpy ładują plik zrzutu", - "DESCRIPTION": "Proces może zająć chwilkę, proszę nie zamykaj okna.", - "ASYNC_IN_PROGRESS_TITLE": "Umpa Lumpy importują projekt", - "ASYNC_IN_PROGRESS_MESSAGE": "To może zając kilka minut.
    Otrzymasz mail gdy wszystko będzie gotowe.", - "UPLOAD_IN_PROGRESS_MESSAGE": "Wysłano {{uploadedSize}} z {{totalSize}}", - "ERROR": "Umpa Lumpy mają problem z importem. Spróbuj ponownie.", - "ERROR_TOO_MANY_REQUEST": "Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę.", - "ERROR_MESSAGE": "Przy imporcie wystąpił następujący problem: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})", - "SYNC_SUCCESS": "Twój projekt zaimportował się prawidłowo!", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "Like", "LIKED": "Liked", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Utwórz projekt", + "FRESH": "Nowy, zwinny! To takie ekscytujące!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importuj projekt", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Projekt publiczny", + "PRIVATE_PROJECT": "Projekt prywatny", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Nowy, zwinny! To takie ekscytujące!", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Projekt publiczny", + "PRIVATE_PROJECT": "Projekt prywatny", + "CREATE_PROJECT": "Utwórz projekt", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Umpa Lumpy importują projekt", + "ASYNC_IN_PROGRESS_MESSAGE": "To może zając kilka minut.
    Otrzymasz mail gdy wszystko będzie gotowe.", + "UPLOAD_IN_PROGRESS_MESSAGE": "Wysłano {{uploadedSize}} z {{totalSize}}", + "ERROR": "Umpa Lumpy mają problem z importem. Spróbuj ponownie.", + "ERROR_TOO_MANY_REQUEST": "Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę.", + "ERROR_MESSAGE": "Przy imporcie wystąpił następujący problem: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})", + "SYNC_SUCCESS": "Twój projekt zaimportował się prawidłowo!", + "IMPORT": "Import", + "ARCHIVED": "Zarchiwizowane", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Assign", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "Importowanie Projektu", + "DESCRIPTION": "Proces może zająć chwilkę, proszę nie zamykaj okna." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Zgłoszenia", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- używaj domyślnego szablonu --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Utwórz projekt", - "CREATE_PROJECT_TEXT": "Nowy, zwinny! To takie ekscytujące!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Projekt publiczny", - "PRIVATE_PROJECT": "Projekt prywatny", - "CREATE_PROJECT": "Utwórz projekt", - "MAX_PRIVATE_PROJECTS": "Osiągnąłeś maksymalną liczbę prywatnych projektów", - "MAX_PUBLIC_PROJECTS": "Niestety osiągnąłeś maksymalną liczbę publicznych projektów", - "CHANGE_PLANS": "change plans" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Ostatnio edytowane dnia {{lastModifiedDate}} ({{totalEditions}} edycji łącznie) Zawartość: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index 8dfe75e8..a86a5bb6 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Lembre-se que todos os valores neste campo customizado serão deletados.\nVocê tem certeza que quer continuar?" }, "FILTERS": { - "TITLE": "Filtros", "INPUT_PLACEHOLDER": "Assunto ou referência", "TITLE_ACTION_FILTER_BUTTON": "procurar", + "TITLE": "Filtros", "INPUT_SEARCH_PLACEHOLDER": "Assunto ou ref", "TITLE_ACTION_SEARCH": "Procurar", "ACTION_SAVE_CUSTOM_FILTER": "salve como filtro personalizado", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Seus projetos", "PLACEHOLDER_SEARCH": "Procurar em...", "ACTION_CREATE_PROJECT": "Criar projeto", - "ACTION_IMPORT_PROJECT": "Importar projeto", "MANAGE_PROJECTS": "Gerenciar projetos", "TITLE_CREATE_PROJECT": "Criar projeto", - "TITLE_IMPORT_PROJECT": "Importar projeto", "TITLE_PRVIOUS_PROJECT": "Mostrar projetos prévios", "TITLE_NEXT_PROJECT": "Mostrar os próximos projetos", "HELP_TITLE": "Página de Suporte do Taiga", @@ -902,44 +900,6 @@ "DISCOVER": "Descubra", "ACTION_REORDER": "Seguro e arraste para ordenar" }, - "IMPORT": { - "TITLE": "Importando Projeto", - "UPLOADING_FILE": "Enviando arquivo de dump", - "DESCRIPTION": "Este processo pode levar algum tempo, mantenha a janela aberta por favor.", - "ASYNC_IN_PROGRESS_TITLE": "Nossos Oompa Loompas estão importando seu projeto", - "ASYNC_IN_PROGRESS_MESSAGE": "Este processo pode levar alguns minutos
    Enviaremos um email a você assim que estiver pronto", - "UPLOAD_IN_PROGRESS_MESSAGE": "Enviado {{uploadedSize}} de {{totalSize}}", - "ERROR": "Nossos Oompa Loompas tiveram alguns problemas importando os dados do seu dump. Tente novamente.", - "ERROR_TOO_MANY_REQUEST": "Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos.", - "ERROR_MESSAGE": "Nossos Oompa Loompas tiveram alguns problemas ao importar seu arquivo de despejo: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})", - "SYNC_SUCCESS": "Seu projeto foi importado com sucesso", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "O projeto que você está tentando importar tem {{members}} membros e infelizmente seu plano atual tem um limite máximo de {{max_memberships}} membros por projeto. Se você deseja aumentar este limite entre em contato com o administrador.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Infelizmente, seu plano atual não permite projetos privados adicionais.", - "DESC": "O projeto que você está tentando importar é privado. Infelizmente, seu plano plano atual não permite projetos privados adicionais." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Infelizmente, seu plano atual não permite projetos públicos adicionais.", - "DESC": "O projeto que você está tentando importar é público. Infelizmente, seu plano plano atual não permite projetos públicos adicionais." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Seu plano atual permite um máximo de {{max_memberships}} membros por projeto privado" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Seu plano atual permite um máximo de {{max_memberships}} membros por projeto público." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Infelizmente, seu plano atual não permite projetos privados adicionais ou um aumento de mais de {{max_memberships}} membros por projeto privado.", - "DESC": "O projeto que você está tentando importar é privado e tem {{members}} membros." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Infelizmente, seu plano atual não permite projetos públicos adicionais ou um aumento de mais de {{max_memberships}} membros por projeto público.", - "DESC": "O projeto que você está tentando importar é público e tem mais que {{members}} membros." - } - } - }, "LIKE_BUTTON": { "LIKE": "Curtir", "LIKED": "Curtiu", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Criar Projeto", + "FRESH": "Novo em folha. Tão excitante!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importar projeto", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Back", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Projeto Público", + "PRIVATE_PROJECT": "Projeto Privado", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Novo em folha. Tão excitante!", + "CHOOSE_TEMPLATE_TITLE": "Mais informações sobre templates de projeto", + "CHOOSE_TEMPLATE_INFO": "Mais informações", + "PROJECT_DETAILS": "Detalhes do Projeto", + "PUBLIC_PROJECT": "Projeto Público", + "PRIVATE_PROJECT": "Projeto Privado", + "CREATE_PROJECT": "Criar projeto", + "CHANGE_PLANS": "mudar planos" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Nossos Oompa Loompas estão importando seu projeto", + "ASYNC_IN_PROGRESS_MESSAGE": "Este processo pode levar alguns minutos
    Enviaremos um email a você assim que estiver pronto", + "UPLOAD_IN_PROGRESS_MESSAGE": "Enviado {{uploadedSize}} de {{totalSize}}", + "ERROR": "Nossos Oompa Loompas tiveram alguns problemas importando os dados do seu dump. Tente novamente.", + "ERROR_TOO_MANY_REQUEST": "Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos.", + "ERROR_MESSAGE": "Nossos Oompa Loompas tiveram alguns problemas ao importar seu arquivo de despejo: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})", + "SYNC_SUCCESS": "Seu projeto foi importado com sucesso", + "IMPORT": "Import", + "ARCHIVED": "Arquivado", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Membros do Projeto", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Atribuir", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Infelizmente, seu plano atual não permite projetos privados adicionais.", + "DESC": "O projeto que você está tentando importar é privado. Infelizmente, seu plano plano atual não permite projetos privados adicionais." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Infelizmente, seu plano atual não permite projetos públicos adicionais.", + "DESC": "O projeto que você está tentando importar é público. Infelizmente, seu plano plano atual não permite projetos públicos adicionais." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Seu plano atual permite um máximo de {{max_memberships}} membros por projeto privado" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Seu plano atual permite um máximo de {{max_memberships}} membros por projeto público." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Infelizmente, seu plano atual não permite projetos privados adicionais ou um aumento de mais de {{max_memberships}} membros por projeto privado.", + "DESC": "O projeto que você está tentando importar é privado e tem {{members}} membros." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Infelizmente, seu plano atual não permite projetos públicos adicionais ou um aumento de mais de {{max_memberships}} membros por projeto público.", + "DESC": "O projeto que você está tentando importar é público e tem mais que {{members}} membros." + } + }, + "IN_PROGRESS": { + "TITLE": "Importando Projeto", + "DESCRIPTION": "Este processo pode levar algum tempo, mantenha a janela aberta por favor." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Membros do Projeto", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Membros do Projeto" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Membros do Projeto", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Tipos de problemas", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- usar tema padrão --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Criar Projeto", - "CREATE_PROJECT_TEXT": "Novo em folha. Tão excitante!", - "CHOOSE_TEMPLATE": "Qual template se encaixa melhor no seu projeto?", - "CHOOSE_TEMPLATE_TITLE": "Mais informações sobre templates de projeto", - "CHOOSE_TEMPLATE_INFO": "Mais informações", - "PROJECT_DETAILS": "Detalhes do Projeto", - "PUBLIC_PROJECT": "Projeto Público", - "PRIVATE_PROJECT": "Projeto Privado", - "CREATE_PROJECT": "Criar projeto", - "MAX_PRIVATE_PROJECTS": "Você atingiu o número máximo de projetos privados", - "MAX_PUBLIC_PROJECTS": "Infelizmente, você atingiu o número máximo de projetos públicos", - "CHANGE_PLANS": "mudar planos" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Ultima edição em {{lastModifiedDate}} ({{totalEditions}} total de edições) Conteúdo: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index 606915e0..1348d620 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?" }, "FILTERS": { - "TITLE": "Фильтры", "INPUT_PLACEHOLDER": "Название ссылки", "TITLE_ACTION_FILTER_BUTTON": "поиск", + "TITLE": "Фильтры", "INPUT_SEARCH_PLACEHOLDER": "Название ссылки", "TITLE_ACTION_SEARCH": "Поиск", "ACTION_SAVE_CUSTOM_FILTER": "сохранить как специальный фильтр", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Ваши проекты", "PLACEHOLDER_SEARCH": "Искать в...", "ACTION_CREATE_PROJECT": "Создать проект", - "ACTION_IMPORT_PROJECT": "Импортировать проект", "MANAGE_PROJECTS": "Управлять проектами", "TITLE_CREATE_PROJECT": "Создать проект", - "TITLE_IMPORT_PROJECT": "Импортировать проект", "TITLE_PRVIOUS_PROJECT": "Показать предыдущие проекты", "TITLE_NEXT_PROJECT": "Показать следующие проекты", "HELP_TITLE": "Страница поддержки Taiga", @@ -902,44 +900,6 @@ "DISCOVER": "Найти", "ACTION_REORDER": "Можно перетаскивать мышкой" }, - "IMPORT": { - "TITLE": "Импорт проекта", - "UPLOADING_FILE": "Загрузить свалочный файл", - "DESCRIPTION": "Этот процесс может занять некоторое время. Пожалуйста, сохраняйте это окно открытым.", - "ASYNC_IN_PROGRESS_TITLE": "Oompa Loompas импортирует ваш проект", - "ASYNC_IN_PROGRESS_MESSAGE": "Этот процесс может занять несколько минут
    Мы отправим вам email, когда всё будет готово", - "UPLOAD_IN_PROGRESS_MESSAGE": "Загружено {{uploadedSize}} размера {{totalSize}}", - "ERROR": "У Oompa Loompas возникли проблемы при импорте резервной копии. Попробуйте еще раз.", - "ERROR_TOO_MANY_REQUEST": "Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут.", - "ERROR_MESSAGE": "У Oompa Loompas возникли проблемы при импорте резервной копии: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})", - "SYNC_SUCCESS": "Импорт проекта выполнен успешно", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "Мне нравится", "LIKED": "Понравилось", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Создать проект", + "FRESH": "Свежий и чистый! Так здóрово!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Импортировать проект", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Бэкенд разработчик", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Частный проект", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Свежий и чистый! Так здóрово!", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "Больше инфо", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Частный проект", + "CREATE_PROJECT": "Создать проект", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Oompa Loompas импортирует ваш проект", + "ASYNC_IN_PROGRESS_MESSAGE": "Этот процесс может занять несколько минут
    Мы отправим вам email, когда всё будет готово", + "UPLOAD_IN_PROGRESS_MESSAGE": "Загружено {{uploadedSize}} размера {{totalSize}}", + "ERROR": "У Oompa Loompas возникли проблемы при импорте резервной копии. Попробуйте еще раз.", + "ERROR_TOO_MANY_REQUEST": "Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут.", + "ERROR_MESSAGE": "У Oompa Loompas возникли проблемы при импорте резервной копии: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})", + "SYNC_SUCCESS": "Импорт проекта выполнен успешно", + "IMPORT": "Import", + "ARCHIVED": "В архиве", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Участники проекта", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Назначить", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "Импорт проекта", + "DESCRIPTION": "Этот процесс может занять некоторое время. Пожалуйста, сохраняйте это окно открытым." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Участники проекта", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Участники проекта" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Участники проекта", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Запросы", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- использовать тему по умолчанию --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Создать проект", - "CREATE_PROJECT_TEXT": "Свежий и чистый! Так здóрово!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "Больше инфо", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Частный проект", - "CREATE_PROJECT": "Создать проект", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Вики - {{projectName}}", "PAGE_DESCRIPTION": "Последнее редактирование: {{lastModifiedDate}} ({{totalEditions}} - всего правок) Контент: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 05890756..36f4de68 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?" }, "FILTERS": { - "TITLE": "Filter", "INPUT_PLACEHOLDER": "Titel eller referens", "TITLE_ACTION_FILTER_BUTTON": "sök", + "TITLE": "Filter", "INPUT_SEARCH_PLACEHOLDER": "Titel eller referens", "TITLE_ACTION_SEARCH": "Sök", "ACTION_SAVE_CUSTOM_FILTER": "spara som anpassad filter", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Dina projekt", "PLACEHOLDER_SEARCH": "Sök i ...", "ACTION_CREATE_PROJECT": "Skapa projekt", - "ACTION_IMPORT_PROJECT": "Importerar projekt", "MANAGE_PROJECTS": "Hantera projekt", "TITLE_CREATE_PROJECT": "Skapa projekt", - "TITLE_IMPORT_PROJECT": "Importerar projekt", "TITLE_PRVIOUS_PROJECT": "Visa tidigare projekt", "TITLE_NEXT_PROJECT": "Visa nästa projekt", "HELP_TITLE": "Taiga hjälpsida", @@ -902,44 +900,6 @@ "DISCOVER": "Upptäck", "ACTION_REORDER": "Dra & släpp för att sortera" }, - "IMPORT": { - "TITLE": "Importerar projekt", - "UPLOADING_FILE": "Ladda hämtningsfilen", - "DESCRIPTION": "Den här processen kan ta en liten stund, vänligen försök med fönstret öppet. ", - "ASYNC_IN_PROGRESS_TITLE": "Våra Oompa Loompier importerar ditt projekt", - "ASYNC_IN_PROGRESS_MESSAGE": "Den här processen kan ta några minuter
    . Vi vill skicka dig en e-post när det blir klart. ", - "UPLOAD_IN_PROGRESS_MESSAGE": "Laddat upp {{uploadedSize}} av {{totalSize}}", - "ERROR": "Våra Oompa Loompier har problem med att importera din hämtningsfil. Vänligen försök igen. ", - "ERROR_TOO_MANY_REQUEST": "Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. ", - "ERROR_MESSAGE": "Våra Oompa Loompier har lite problem med att importera dina hämtningsdata: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})", - "SYNC_SUCCESS": "Ditt projekt är korrekt importerad", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "Gillar", "LIKED": "Likte", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Kontakta projektet" + }, + "CREATE": { + "TITLE": "Skapa projekt", + "FRESH": "Fräscht och rent. Så trevligt!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Importerar projekt", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Baksida", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Privat Projekt", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Fräscht och rent. Så trevligt!", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Privat Projekt", + "CREATE_PROJECT": "Skapa projekt", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Våra Oompa Loompier importerar ditt projekt", + "ASYNC_IN_PROGRESS_MESSAGE": "Den här processen kan ta några minuter
    . Vi vill skicka dig en e-post när det blir klart. ", + "UPLOAD_IN_PROGRESS_MESSAGE": "Laddat upp {{uploadedSize}} av {{totalSize}}", + "ERROR": "Våra Oompa Loompier har problem med att importera din hämtningsfil. Vänligen försök igen. ", + "ERROR_TOO_MANY_REQUEST": "Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. ", + "ERROR_MESSAGE": "Våra Oompa Loompier har lite problem med att importera dina hämtningsdata: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})", + "SYNC_SUCCESS": "Ditt projekt är korrekt importerad", + "IMPORT": "Import", + "ARCHIVED": "Arkiverad", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Tilldela", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "Importerar projekt", + "DESCRIPTION": "Den här processen kan ta en liten stund, vänligen försök med fönstret öppet. " + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Frågor", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- använd standardtema --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Skapa projekt", - "CREATE_PROJECT_TEXT": "Fräscht och rent. Så trevligt!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Privat Projekt", - "CREATE_PROJECT": "Skapa projekt", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Senaste ändringar utförd {{lastModifiedDate}} ({{totalEditions}} editions in total) Innehållt: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 9b111a85..b9fa03cb 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "Bu özel alandaki tüm bilgiler silinecek.\nDevam etmek istediğinize emin misiniz?" }, "FILTERS": { - "TITLE": "Filtreler", "INPUT_PLACEHOLDER": "Konu yada referans", "TITLE_ACTION_FILTER_BUTTON": "ara", + "TITLE": "Filtreler", "INPUT_SEARCH_PLACEHOLDER": "Konu ya da ref", "TITLE_ACTION_SEARCH": "Ara", "ACTION_SAVE_CUSTOM_FILTER": "özel filtre olarak kaydet", @@ -873,10 +873,8 @@ "SECTION_TITLE": "Projeleriniz", "PLACEHOLDER_SEARCH": "Aranan konum...", "ACTION_CREATE_PROJECT": "Proje Oluştur", - "ACTION_IMPORT_PROJECT": "Projeyi İçe Aktar", "MANAGE_PROJECTS": "Projeleri yönet", "TITLE_CREATE_PROJECT": "Proje oluştur", - "TITLE_IMPORT_PROJECT": "Projeyi İçe Aktar", "TITLE_PRVIOUS_PROJECT": "Önceki projeleri göster", "TITLE_NEXT_PROJECT": "Sonraki projeleri göster", "HELP_TITLE": "Taiga Destek Sayfası", @@ -902,44 +900,6 @@ "DISCOVER": "Keşfet", "ACTION_REORDER": "Yeniden sıralamak için sürükleyin ve bırakın" }, - "IMPORT": { - "TITLE": "Proje İçe Aktarılıyor", - "UPLOADING_FILE": "Döküm dosyanız karşıya yükleniyor", - "DESCRIPTION": "Bu işlem biraz sürecek, lütfen pencereyi kapatmayın.", - "ASYNC_IN_PROGRESS_TITLE": "Bizim honki ponkiler projenizi içeriye aktarıyor", - "ASYNC_IN_PROGRESS_MESSAGE": "Bu işlem bir kaç dakika sürecek
    Hazır olduğunda bir e-posta göndereceğiz", - "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} in {{uploadedSize}} kadarı karşıya yüklendi", - "ERROR": "Sarı çizmeli memmet ağamız döküm dosyanızı içeri aktarırken birkaç problem yaşadı. Lütfen yeniden deneyin.", - "ERROR_TOO_MANY_REQUEST": "Üzgünüm, bizim honki ponkiler şu anda çok meşgul. Lütfen birkaç dakika içinde yeniden deneyin.", - "ERROR_MESSAGE": "Honki ponkilerimiz döküm dosyanızı içeri aktarırken birkaç problem yaşadı: {{error_message}}", - "ERROR_MAX_SIZE_EXCEEDED": "({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin", - "SYNC_SUCCESS": "Projeniz başarıyla içe aktarıldı", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "Beğen", "LIKED": "Beğendi", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "Proje Oluştur", + "FRESH": "Taze ve temiz. Heycan verici!", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "Projeyi İçe Aktar", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "Arka", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "Taze ve temiz. Heycan verici!", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "Proje oluştur", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "Bizim honki ponkiler projenizi içeriye aktarıyor", + "ASYNC_IN_PROGRESS_MESSAGE": "Bu işlem bir kaç dakika sürecek
    Hazır olduğunda bir e-posta göndereceğiz", + "UPLOAD_IN_PROGRESS_MESSAGE": "{{totalSize}} in {{uploadedSize}} kadarı karşıya yüklendi", + "ERROR": "Sarı çizmeli memmet ağamız döküm dosyanızı içeri aktarırken birkaç problem yaşadı. Lütfen yeniden deneyin.", + "ERROR_TOO_MANY_REQUEST": "Üzgünüm, bizim honki ponkiler şu anda çok meşgul. Lütfen birkaç dakika içinde yeniden deneyin.", + "ERROR_MESSAGE": "Honki ponkilerimiz döküm dosyanızı içeri aktarırken birkaç problem yaşadı: {{error_message}}", + "ERROR_MAX_SIZE_EXCEEDED": "({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin", + "SYNC_SUCCESS": "Projeniz başarıyla içe aktarıldı", + "IMPORT": "Import", + "ARCHIVED": "Arşivlenmiş", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "Ata", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "Proje İçe Aktarılıyor", + "DESCRIPTION": "Bu işlem biraz sürecek, lütfen pencereyi kapatmayın." + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "Sorunlar", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- varsayılan temayı kullan --" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "Proje Oluştur", - "CREATE_PROJECT_TEXT": "Taze ve temiz. Heycan verici!", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Proje oluştur", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Son sürüm {{lastModifiedDate}} ({{totalEditions}} toplamda sürüm sayısı) İçerik: {{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index 8c9dea98..743210f7 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "请记住,在这个自定义字段中的所有值都会被删除。你确定继续吗?" }, "FILTERS": { - "TITLE": "过滤器", "INPUT_PLACEHOLDER": "标题或参考", "TITLE_ACTION_FILTER_BUTTON": "搜索", + "TITLE": "过滤器", "INPUT_SEARCH_PLACEHOLDER": "主旨或参考", "TITLE_ACTION_SEARCH": "搜索", "ACTION_SAVE_CUSTOM_FILTER": "储存为定制过滤器", @@ -873,10 +873,8 @@ "SECTION_TITLE": "你的项目", "PLACEHOLDER_SEARCH": "搜索", "ACTION_CREATE_PROJECT": "创建项目", - "ACTION_IMPORT_PROJECT": "导入项目", "MANAGE_PROJECTS": "管理项目", "TITLE_CREATE_PROJECT": "创建项目", - "TITLE_IMPORT_PROJECT": "导入项目", "TITLE_PRVIOUS_PROJECT": "显示过去项目", "TITLE_NEXT_PROJECT": "显示下一个任务", "HELP_TITLE": "Taiga支持页", @@ -902,44 +900,6 @@ "DISCOVER": "发现", "ACTION_REORDER": "通过拖动来改变显示顺序" }, - "IMPORT": { - "TITLE": "导入项目中", - "UPLOADING_FILE": "上传倾倒档案", - "DESCRIPTION": "这个过桯要花点时间,请保持视窗开启", - "ASYNC_IN_PROGRESS_TITLE": "我们正在导入你的项目", - "ASYNC_IN_PROGRESS_MESSAGE": "这个过程要花上一点时间
    当弄好时我们会发给你一封邮件", - "UPLOAD_IN_PROGRESS_MESSAGE": "已上传 {{totalSize}}中的{{uploadedSize}}", - "ERROR": "系统在滙进你倒入的资料时遇上一些问题,请再试一次", - "ERROR_TOO_MANY_REQUEST": "抱歉系统繁忙中,请稍后再试试", - "ERROR_MESSAGE": "我们的系统无法导入你的资料", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})", - "SYNC_SUCCESS": "你的项目已成功导入", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "你正在导入的项目有 {{members}} 位成员,不幸的是,根据你当前的计划,每个项目最多允许 {{max_memberships}} 位成员。如果你希望增加这个限制请联系管理员。", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "对不起,你当前的计划不允许额外的私有项目", - "DESC": "你尝试导入的项目是私有的。不幸的是,你当前的计划不允许额外的私有项目。" - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "对不起,你当前的计划不允许额外的公开项目", - "DESC": "你尝试导入的项目是公开的。不幸的是,你当前的计划不允许额外的公开项目。" - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "你当前的计划允许每个私有项目最多 {{max_memberships}} 位成员。" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "你当前的计划允许每个项目最多 {{max_memberships}} 位成员。" - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "对不起,你当前的计划不允许额外的私有项目或者每个私有项目多于 {{max_memberships}} 位成员", - "DESC": "你正在试图导入的项目是私有的并且有 {{members}} 位成员。" - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "对不起,你当前的计划不允许额外的公开项目或者每个公开项目多于 {{max_memberships}} 位成员", - "DESC": "你正在试图导入的项目是公开的并且有多于 {{members}} 位成员。" - } - } - }, "LIKE_BUTTON": { "LIKE": "点赞", "LIKED": "已点赞", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "创建项目", + "FRESH": "清新与整洁,让人兴奋的项目", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "冲刺", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "看板", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "导入项目", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "后退", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "公开项目", + "PRIVATE_PROJECT": "私有项目", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "清新与整洁,让人兴奋的项目", + "CHOOSE_TEMPLATE_TITLE": "了解关于项目模板的更多知识", + "CHOOSE_TEMPLATE_INFO": "更多信息", + "PROJECT_DETAILS": "项目细节", + "PUBLIC_PROJECT": "公开项目", + "PRIVATE_PROJECT": "私有项目", + "CREATE_PROJECT": "创建项目", + "CHANGE_PLANS": "改变计划" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "我们正在导入你的项目", + "ASYNC_IN_PROGRESS_MESSAGE": "这个过程要花上一点时间
    当弄好时我们会发给你一封邮件", + "UPLOAD_IN_PROGRESS_MESSAGE": "已上传 {{totalSize}}中的{{uploadedSize}}", + "ERROR": "系统在滙进你倒入的资料时遇上一些问题,请再试一次", + "ERROR_TOO_MANY_REQUEST": "抱歉系统繁忙中,请稍后再试试", + "ERROR_MESSAGE": "我们的系统无法导入你的资料", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})", + "SYNC_SUCCESS": "你的项目已成功导入", + "IMPORT": "Import", + "ARCHIVED": "归档", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "项目成员", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "指派", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "对不起,你当前的计划不允许额外的私有项目", + "DESC": "你尝试导入的项目是私有的。不幸的是,你当前的计划不允许额外的私有项目。" + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "对不起,你当前的计划不允许额外的公开项目", + "DESC": "你尝试导入的项目是公开的。不幸的是,你当前的计划不允许额外的公开项目。" + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "你当前的计划允许每个私有项目最多 {{max_memberships}} 位成员。" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "你当前的计划允许每个项目最多 {{max_memberships}} 位成员。" + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "对不起,你当前的计划不允许额外的私有项目或者每个私有项目多于 {{max_memberships}} 位成员", + "DESC": "你正在试图导入的项目是私有的并且有 {{members}} 位成员。" + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "对不起,你当前的计划不允许额外的公开项目或者每个公开项目多于 {{max_memberships}} 位成员", + "DESC": "你正在试图导入的项目是公开的并且有多于 {{members}} 位成员。" + } + }, + "IN_PROGRESS": { + "TITLE": "导入项目中", + "DESCRIPTION": "这个过桯要花点时间,请保持视窗开启" + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Github", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "项目成员", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "看板", + "SCRUM_PROJECT": "冲刺", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "项目成员" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "项目成员", + "KANBAN_PROJECT": "看板", + "SCRUM_PROJECT": "冲刺", + "ISSUES_PROJECT": "问题", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- 使用默认主题--" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "创建项目", - "CREATE_PROJECT_TEXT": "清新与整洁,让人兴奋的项目", - "CHOOSE_TEMPLATE": "哪个模板最适合你的项目?", - "CHOOSE_TEMPLATE_TITLE": "了解关于项目模板的更多知识", - "CHOOSE_TEMPLATE_INFO": "更多信息", - "PROJECT_DETAILS": "项目细节", - "PUBLIC_PROJECT": "公开项目", - "PRIVATE_PROJECT": "私有项目", - "CREATE_PROJECT": "创建项目", - "MAX_PRIVATE_PROJECTS": "你已经达到了私有项目的最大成员数目", - "MAX_PUBLIC_PROJECTS": "对不起,你已经达了公开项目的最大成员上限", - "CHANGE_PLANS": "改变计划" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - 维基 - {{projectName}}", "PAGE_DESCRIPTION": "最近编辑{{lastModifiedDate}} (总共编辑了{{totalEditions}}次),内容:{{ wikiPageContent }}", diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 44cec5ac..2a84d421 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -202,9 +202,9 @@ "CONFIRM_DELETE": "記住在此客制欄位裏的數值資料都將遭刪除\n你確定要繼續嗎?" }, "FILTERS": { - "TITLE": "過濾器", "INPUT_PLACEHOLDER": "主旨或參考", "TITLE_ACTION_FILTER_BUTTON": "搜尋", + "TITLE": "過濾器", "INPUT_SEARCH_PLACEHOLDER": "主旨或參考", "TITLE_ACTION_SEARCH": "搜尋", "ACTION_SAVE_CUSTOM_FILTER": "儲存為客製過濾器 ", @@ -873,10 +873,8 @@ "SECTION_TITLE": "你的專案", "PLACEHOLDER_SEARCH": "搜尋", "ACTION_CREATE_PROJECT": "創建專案", - "ACTION_IMPORT_PROJECT": "滙入專案", "MANAGE_PROJECTS": "管理專案", "TITLE_CREATE_PROJECT": "創建專案", - "TITLE_IMPORT_PROJECT": "滙入專案", "TITLE_PRVIOUS_PROJECT": "顯示過去專案", "TITLE_NEXT_PROJECT": "顯示下一個任務", "HELP_TITLE": "Taiga支援頁", @@ -902,44 +900,6 @@ "DISCOVER": "發現", "ACTION_REORDER": "拖移 & 丟到來記錄" }, - "IMPORT": { - "TITLE": "滙入專案中", - "UPLOADING_FILE": "上傳傾倒檔案", - "DESCRIPTION": "這個過桯要花點時間,請保持视窗開啟", - "ASYNC_IN_PROGRESS_TITLE": "我們的工程師對你的專案很重要哦", - "ASYNC_IN_PROGRESS_MESSAGE": "這個過程要花上一點時間
    當弄好時我們會發給你一封郵件", - "UPLOAD_IN_PROGRESS_MESSAGE": "已上傳 {{totalSize}}中的{{uploadedSize}} ", - "ERROR": "系統在滙進你倒入的資料時遇上一些問題,請再試一次", - "ERROR_TOO_MANY_REQUEST": "抱歉系統繁忙中,請稍後再試試 ", - "ERROR_MESSAGE": "我們的系統無法滙入你的資料", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})", - "SYNC_SUCCESS": "你的專案已成功滙入", - "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC": "The project you are trying to import has {{members}} members, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project. If you would like to increase that limit please contact the administrator.", - "PRIVATE_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional private projects", - "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." - }, - "PUBLIC_PROJECTS_SPACE": { - "TITLE": "Unfortunately, your current plan does not allow for additional public projects", - "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." - }, - "PRIVATE_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" - }, - "PUBLIC_PROJECTS_MEMBERS": { - "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." - }, - "PRIVATE_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", - "DESC": "The project that you are trying to import is private and has {{members}} members." - }, - "PUBLIC_PROJECTS_SPACE_MEMBERS": { - "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", - "DESC": "The project that you are trying to import is public and has more than {{members}} members." - } - } - }, "LIKE_BUTTON": { "LIKE": "喜歡", "LIKED": "喜歡", @@ -964,6 +924,160 @@ "CONTACT_BUTTON": { "CONTACT_TITLE": "Contact the project team", "CONTACT_BUTTON": "Contact the project" + }, + "CREATE": { + "TITLE": "創建專案", + "FRESH": "新鮮與乾淨,太好了", + "CHOOSE_TEMPLATE": "Which template fits your project better?", + "TEMPLATE_SCRUM": "Scrum", + "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_KANBAN": "Kanban(看板)", + "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "DUPLICATE": "Duplicate project", + "DUPLICATE_DESC": "Start clean and keep your configuration", + "IMPORT": "滙入專案", + "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "INVITE": "Invite to the project", + "SOLO_PROJECT": "You'll be alone in this project", + "INVITE_LATER": "(You'll be able to invite more members later)", + "BACK": "後台", + "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + }, + "COMMON": { + "DETAILS": "New project details", + "PROJECT_TITLE": "Project Name", + "PROJECT_DESCRIPTION": "Project Description" + }, + "DUPLICATE": { + "TITLE": "Duplicate Project", + "DESCRIPTION": "Start clean and keep your configuration", + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", + "DETAILS": "New project details", + "CREATE_PROJECT_TEXT": "新鮮與乾淨,太好了", + "CHOOSE_TEMPLATE_TITLE": "More info about project templates", + "CHOOSE_TEMPLATE_INFO": "More info", + "PROJECT_DETAILS": "Project Details", + "PUBLIC_PROJECT": "Public Project", + "PRIVATE_PROJECT": "Private Project", + "CREATE_PROJECT": "創建專案", + "CHANGE_PLANS": "change plans" + }, + "IMPORT": { + "TITLE": "Import Project", + "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "ASYNC_IN_PROGRESS_TITLE": "我們的工程師對你的專案很重要哦", + "ASYNC_IN_PROGRESS_MESSAGE": "這個過程要花上一點時間
    當弄好時我們會發給你一封郵件", + "UPLOAD_IN_PROGRESS_MESSAGE": "已上傳 {{totalSize}}中的{{uploadedSize}} ", + "ERROR": "系統在滙進你倒入的資料時遇上一些問題,請再試一次", + "ERROR_TOO_MANY_REQUEST": "抱歉系統繁忙中,請稍後再試試 ", + "ERROR_MESSAGE": "我們的系統無法滙入你的資料", + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})", + "SYNC_SUCCESS": "你的專案已成功滙入", + "IMPORT": "Import", + "ARCHIVED": "歸檔", + "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "WHO_IS": "Their tasks will be assigned to ...", + "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "SEARCH_CONTACT": "Or if you want, search in your contacts", + "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "EMAIL_NOT_FOUND": "We did not find any users with that email", + "ACCEEDE": "Acceede", + "PROJECT_MEMBERS": "Project Members", + "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", + "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "CHOOSE": "Select user", + "LINKS": "Links with {{platform}}", + "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", + "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "ASSIGN": "指派", + "PROJECT_RESTRICTIONS": { + "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", + "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", + "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PRIVATE_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional private projects", + "DESC": "The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects." + }, + "PUBLIC_PROJECTS_SPACE": { + "TITLE": "Unfortunately, your current plan does not allow for additional public projects", + "DESC": "The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects." + }, + "PRIVATE_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per private project" + }, + "PUBLIC_PROJECTS_MEMBERS": { + "TITLE": "Your current plan allows for a maximum of {{max_memberships}} members per public project." + }, + "PRIVATE_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project", + "DESC": "The project that you are trying to import is private and has {{members}} members." + }, + "PUBLIC_PROJECTS_SPACE_MEMBERS": { + "TITLE": "Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project", + "DESC": "The project that you are trying to import is public and has more than {{members}} members." + } + }, + "IN_PROGRESS": { + "TITLE": "滙入專案中", + "DESCRIPTION": "這個過桯要花點時間,請保持视窗開啟" + }, + "WARNING": { + "TITLE": "Some taks will be unassigned", + "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "CHECK": "Check contacts" + }, + "TAIGA": { + "SELECTOR": "Import your Taiga project" + }, + "TRELLO": { + "TITLE": "Trello", + "SELECTOR": "Import your Trello boards into Taiga", + "CHOOSE_BOARD": "Choose board that you want to import" + }, + "GITHUB": { + "TITLE": "Githun", + "SELECTOR": "Import your Github project issues", + "CHOOSE_BOARD": "Find the project you want to import", + "PROJECT_MEMBERS": "Project Members", + "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", + "KANBAN_PROJECT": "As user stories in a kanban project", + "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", + "SCRUM_PROJECT": "As user stories in a scrum project", + "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", + "ISSUES_PROJECT": "As issues", + "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + }, + "ASANA": { + "TITLE": "Asana", + "SELECTOR": "Import your Asana project and choose how to manage it", + "CHOOSE_BOARD": "Choose project that you want to import", + "KANBAN_PROJECT": "Kanban(看板)", + "SCRUM_PROJECT": "Scrum", + "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", + "PROJECT_MEMBERS": "Project Members" + }, + "JIRA": { + "TITLE": "Jira", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "SELECTOR": "Import your Jira project and choose how to manage it", + "URL": "Your Jira URL", + "PROJECT_MEMBERS": "Project Members", + "KANBAN_PROJECT": "Kanban(看板)", + "SCRUM_PROJECT": "Scrum", + "ISSUES_PROJECT": "問題 ", + "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", + "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", + "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", + "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + } } }, "LIGHTBOX": { @@ -1516,20 +1630,6 @@ "THEME_DEFAULT": "-- 使用預設主題--" } }, - "WIZARD": { - "SECTION_TITLE_CREATE_PROJECT": "創建專案", - "CREATE_PROJECT_TEXT": "新鮮與乾淨,太好了", - "CHOOSE_TEMPLATE": "Which template fits your project best?", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "創建專案", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects", - "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects", - "CHANGE_PLANS": "change plans" - }, "WIKI": { "PAGE_TITLE": "{{wikiPageName}} - 維基 - {{projectName}}", "PAGE_DESCRIPTION": "上回編輯{{lastModifiedDate}} ({{totalEditions}} editions in total) 內容: {{ wikiPageContent }}", diff --git a/app/modules/projects/create/import/import-project.service.coffee b/app/modules/projects/create/import/import-project.service.coffee index f3a01d87..b66abbbb 100644 --- a/app/modules/projects/create/import/import-project.service.coffee +++ b/app/modules/projects/create/import/import-project.service.coffee @@ -34,7 +34,8 @@ class ImportProjectService extends taiga.Service return promise.then(@.importSuccess.bind(this), @.importError.bind(this)) importSuccess: (result) -> - return @currentUserService.loadProjects().then () => + promise = @currentUserService.loadProjects() + promise.then () => if result.status == 202 # Async mode title = @translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE') message = @translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE') @@ -44,9 +45,11 @@ class ImportProjectService extends taiga.Service @location.path(@tgNavUrls.resolve('project-admin-project-profile-details', ctx)) msg = @translate.instant('PROJECT.IMPORT.SYNC_SUCCESS') @confirm.notify('success', msg) + return promise importError: (result) -> - return @tgAuth.refresh().then () => + promise = @tgAuth.refresh() + promise.then () => restrictionError = @.getRestrictionError(result) if restrictionError @@ -63,6 +66,7 @@ class ImportProjectService extends taiga.Service errorMsg = @translate.instant("PROJECT.IMPORT.ERROR_MESSAGE", {error_message: result.data._error_message}) @confirm.notify("error", errorMsg) + return promise getRestrictionError: (result) -> if result.headers From c86856be12655a36b850458009888079613ff0ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 27 Feb 2017 18:12:41 +0100 Subject: [PATCH 151/175] Redirect users to home before import a project in async mode --- app/modules/projects/create/import/import-project.service.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/app/modules/projects/create/import/import-project.service.coffee b/app/modules/projects/create/import/import-project.service.coffee index b66abbbb..481d40cb 100644 --- a/app/modules/projects/create/import/import-project.service.coffee +++ b/app/modules/projects/create/import/import-project.service.coffee @@ -39,6 +39,7 @@ class ImportProjectService extends taiga.Service if result.status == 202 # Async mode title = @translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE') message = @translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE') + @location.path(@tgNavUrls.resolve('home')) @confirm.success(title, message) else # result.status == 201 # Sync mode ctx = {project: result.data.slug} From 7eef114dcd754c6c18b8086438036e1f2923294e Mon Sep 17 00:00:00 2001 From: xaviju Date: Tue, 28 Feb 2017 13:29:46 +0100 Subject: [PATCH 152/175] Fix visualization of assignation table --- app/styles/dependencies/mixins/import.scss | 27 +++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/app/styles/dependencies/mixins/import.scss b/app/styles/dependencies/mixins/import.scss index ffa4a605..1e6884dd 100644 --- a/app/styles/dependencies/mixins/import.scss +++ b/app/styles/dependencies/mixins/import.scss @@ -1,13 +1,13 @@ @mixin import-project-selector { - @include centered; + @include centered; max-width: 800px; .import-project-selector { &-service { img { + display: block; margin: 1rem auto; width: 4rem; - display: block; } } @@ -47,7 +47,7 @@ max-width: 800px; .avatar { width: 48px; - } + } &-title { @include font-size(normal); @include font-type(bold); @@ -73,17 +73,18 @@ &-row { align-items: center; border-bottom: 1px solid $whitish; + border-top: 1px solid $whitish; display: flex; - padding: .5rem 0; justify-content: space-between; + padding: .5rem 0; - &:first-child { - border-top: 1px solid $whitish; - } - - &:last-child { - border: 0; - } + // &:first-child { + // border-top: 1px solid $whitish; + // } + // + // &:last-child { + // border: 0; + // } &:hover { .import-project-members-delete { @@ -127,9 +128,9 @@ &-match { color: $gray-light; button { + background: $white; border-radius: 50%; padding: .25rem .5rem; - background: $white; svg { @include svg-size(.75rem); } @@ -160,8 +161,8 @@ &-choose { color: $primary; - text-transform: lowercase; padding-right: 0; + text-transform: lowercase; &:hover { color: $primary-light; } From 3711c2c6739733efc9d11c887489dd650a0ef4b2 Mon Sep 17 00:00:00 2001 From: xaviju Date: Tue, 28 Feb 2017 13:30:25 +0100 Subject: [PATCH 153/175] Fix visualization of assignation table remove comment --- app/styles/dependencies/mixins/import.scss | 8 -------- 1 file changed, 8 deletions(-) diff --git a/app/styles/dependencies/mixins/import.scss b/app/styles/dependencies/mixins/import.scss index 1e6884dd..877481ac 100644 --- a/app/styles/dependencies/mixins/import.scss +++ b/app/styles/dependencies/mixins/import.scss @@ -78,14 +78,6 @@ justify-content: space-between; padding: .5rem 0; - // &:first-child { - // border-top: 1px solid $whitish; - // } - // - // &:last-child { - // border: 0; - // } - &:hover { .import-project-members-delete { opacity: 1; From df8410cce96a8cd55a24603bdecbee1b60047530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Wed, 1 Mar 2017 17:16:57 +0100 Subject: [PATCH 154/175] Updated the badges to use shields.io --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ba21307d..dff5f181 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@ # Taiga Front # -![Kaleidos Project](http://kaleidos.net/static/img/badge.png "Kaleidos Project") -[![Managed with Taiga.io](https://tree.taiga.io/support/images/taiga-badge-gh.png)](https://taiga.io "Managed with Taiga.io") -[![Build Status](https://travis-ci.org/taigaio/taiga-front.svg?branch=public-header-bar)](https://travis-ci.org/taigaio/taiga-front) -[![Dependency Status](https://www.versioneye.com/user/projects/561ba659a193340f280013f4/badge.svg?style=flat)](https://www.versioneye.com/user/projects/561ba659a193340f280013f4) - +![Kaleidos Project](http://kaleidos.net/static/img/badge.svg "Kaleidos Project") +[![Managed with Taiga.io](https://img.shields.io/badge/managed%20with-TAIGA.io-709f14.svg)](https://tree.taiga.io/project/taiga/ "Managed with Taiga.io") +[![Build Status](https://img.shields.io/travis/taigaio/taiga-front.svg)](https://travis-ci.org/taigaio/taiga-front "Build Status") ## Get the compiled version ## @@ -177,4 +175,4 @@ To run a local Selenium Server, you will need to have the Java Development Kit ( ``` protractor conf.e2e.js --suite=auth # To tests authentication protractor conf.e2e.js --suite=full # To test all the platform authenticated - ``` \ No newline at end of file + ``` From 8396181ed166d974becc62d1df12ccb252773530 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 1 Mar 2017 12:43:50 +0100 Subject: [PATCH 155/175] Fix Issue #4978: Add missed placeholders in the importer project selector --- app/locales/taiga/locale-ca.json | 17 ++++++++++++---- app/locales/taiga/locale-de.json | 17 ++++++++++++---- app/locales/taiga/locale-en.json | 17 ++++++++++++---- app/locales/taiga/locale-es.json | 17 ++++++++++++---- app/locales/taiga/locale-fi.json | 17 ++++++++++++---- app/locales/taiga/locale-fr.json | 17 ++++++++++++---- app/locales/taiga/locale-it.json | 17 ++++++++++++---- app/locales/taiga/locale-ja.json | 17 ++++++++++++---- app/locales/taiga/locale-ko.json | 17 ++++++++++++---- app/locales/taiga/locale-nb.json | 17 ++++++++++++---- app/locales/taiga/locale-nl.json | 17 ++++++++++++---- app/locales/taiga/locale-pl.json | 17 ++++++++++++---- app/locales/taiga/locale-pt-br.json | 19 +++++++++++++----- app/locales/taiga/locale-ru.json | 17 ++++++++++++---- app/locales/taiga/locale-sv.json | 17 ++++++++++++---- app/locales/taiga/locale-tr.json | 17 ++++++++++++---- app/locales/taiga/locale-zh-hans.json | 17 ++++++++++++---- app/locales/taiga/locale-zh-hant.json | 17 ++++++++++++---- .../create/asana-import/asana-import.jade | 3 ++- .../create/github-import/github-import.jade | 3 ++- .../import-project-selector.directive.coffee | 2 +- .../import-project-selector.jade | 20 +++++++++++++++---- .../create/jira-import/jira-import.jade | 1 + .../create/trello-import/trello-import.jade | 3 ++- app/styles/components/empty.scss | 5 +++++ 25 files changed, 264 insertions(+), 81 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index 590161e3..6bba57ad 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Assign", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index 29bfa7ab..4476539f 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Zuweisen", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Projektmitglieder", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Projektmitglieder", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 3391d6fd..cd0e85ae 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -998,6 +998,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Assign", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1040,12 +1045,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1058,7 +1065,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1067,8 +1075,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 6e92e02d..8beaf47c 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Asignar", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Miembros del proyecto", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Tu URL de Jira", "PROJECT_MEMBERS": "Miembros del proyecto", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 77d1b45f..64f44b1e 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Assign", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 90e98069..dadcd5c4 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Affecter", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Membres du projet", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Membres du projet", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 95b3add9..04738675 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Assegna", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index 76990141..7d2957d2 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "アサイン", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "プロジェクトメンバー", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "かんばん", "SCRUM_PROJECT": "スクラム", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "プロジェクトメンバー", "KANBAN_PROJECT": "かんばん", diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index f1379939..320e5ed1 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "할당", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "프로젝트 회원", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "칸반", "SCRUM_PROJECT": "스크럼", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "프로젝트 회원", "KANBAN_PROJECT": "칸반", diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 688e0e83..1ff6875f 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Tildel", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Prosjektmedlemmer", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Prosjektmedlemmer", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index d1c1e5fb..a8a0ec55 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Assign", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index 6c027988..4a8cd520 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Assign", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index a86a5bb6..8a20d7df 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Atribuir", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Membros do Projeto", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Membros do Projeto", "KANBAN_PROJECT": "Kanban", @@ -1103,7 +1112,7 @@ "ADD_MEMBER": { "TITLE": "Novo Membro", "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", + "ADD_EMAIL": "Adicione e-mail.", "REMOVE": "Remove", "INVITE": "Invite", "CHOOSE_ROLE": "Choose a role", diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index 1348d620..feef2b63 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Назначить", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Участники проекта", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Участники проекта", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 36f4de68..705d1314 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Tilldela", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index b9fa03cb..42ed6918 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Ata", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index 743210f7..5f1e6e9e 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "指派", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Github", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "项目成员", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "看板", "SCRUM_PROJECT": "冲刺", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "项目成员", "KANBAN_PROJECT": "看板", diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 2a84d421..f048f163 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -996,6 +996,11 @@ "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "指派", + "PROJECT_SELECTOR": { + "NO_RESULTS": "It looks like nothing was found with your search criteria", + "ACTION_SEARCH": "search", + "ACTION_BACK": "Back" + }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", @@ -1038,12 +1043,14 @@ "TRELLO": { "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_BOARD": "Choose board that you want to import" + "CHOOSE_PROJECT": "Choose board that you want to import", + "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { "TITLE": "Githun", "SELECTOR": "Import your Github project issues", - "CHOOSE_BOARD": "Find the project you want to import", + "CHOOSE_PROJECT": "Find the project you want to import", + "NO_PROJECTS": "It seems you have no porjects in GitHub", "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", @@ -1056,7 +1063,8 @@ "ASANA": { "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_BOARD": "Choose project that you want to import", + "CHOOSE_PROJECT": "Choose project that you want to import", + "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban(看板)", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", @@ -1065,8 +1073,9 @@ }, "JIRA": { "TITLE": "Jira", - "CHOOSE_PROJECT": "Choose project or board that you want to import", "SELECTOR": "Import your Jira project and choose how to manage it", + "CHOOSE_PROJECT": "Choose project or board that you want to import", + "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban(看板)", diff --git a/app/modules/projects/create/asana-import/asana-import.jade b/app/modules/projects/create/asana-import/asana-import.jade index ac684194..f36a9614 100644 --- a/app/modules/projects/create/asana-import/asana-import.jade +++ b/app/modules/projects/create/asana-import/asana-import.jade @@ -4,7 +4,8 @@ tg-import-project-selector( logo="/#{v}/images/import-logos/asana.png" - search="{{ 'PROJECT.IMPORT.ASANA.CHOOSE_BOARD' | translate }}" + search="{{ 'PROJECT.IMPORT.ASANA.CHOOSE_PROJECT' | translate }}" + no-projects-msg="{{ 'PROJECT.IMPORT.ASANA.NO_PROJECTS' | translate }}" projects="vm.projects" on-cancel="vm.onCancel()" on-select-project="vm.onSelectProject(project)" diff --git a/app/modules/projects/create/github-import/github-import.jade b/app/modules/projects/create/github-import/github-import.jade index f69ea30d..a85e1de8 100644 --- a/app/modules/projects/create/github-import/github-import.jade +++ b/app/modules/projects/create/github-import/github-import.jade @@ -4,7 +4,8 @@ tg-import-project-selector( logo="/#{v}/images/import-logos/github.png" - search="{{ 'PROJECT.IMPORT.GITHUB.CHOOSE_BOARD' | translate }}" + search="{{ 'PROJECT.IMPORT.GITHUB.CHOOSE_PROJECT' | translate }}" + no-projects-msg="{{ 'PROJECT.IMPORT.GITHUB.NO_PROJECTS' | translate }}" projects="vm.projects" on-cancel="vm.onCancel()" on-select-project="vm.onSelectProject(project)" diff --git a/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee b/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee index 3bac4cab..c9955674 100644 --- a/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee +++ b/app/modules/projects/create/import-project-selector/import-project-selector.directive.coffee @@ -27,8 +27,8 @@ ImportProjectSelectorDirective = () -> projects: '<', onCancel: '&', onSelectProject: '&', - platfrom: '@', logo: '@', + noProjectsMsg: '@', search: '@' } } diff --git a/app/modules/projects/create/import-project-selector/import-project-selector.jade b/app/modules/projects/create/import-project-selector/import-project-selector.jade index 5a6d0baf..80ffaef2 100644 --- a/app/modules/projects/create/import-project-selector/import-project-selector.jade +++ b/app/modules/projects/create/import-project-selector/import-project-selector.jade @@ -16,19 +16,31 @@ ) tg-svg( svg-icon="icon-search" - title="{{'SEARCH.TITLE_ACTION_SEARCH' | translate}}" + title="{{ 'PROJECT.IMPORT.PROJECT_SELECTOR.ACTION_SEARCH' | translate }}" ) ul.import-project-board-list li.import-project-selector-title( - ng-repeat="project in vm.projects | toMutable | orderBy:'name' | filter:vm.searchText track by project.id" + ng-repeat="project in vm.projects | toMutable | orderBy:'name' | filter:vm.searchText as filteredProjects track by project.id" ng-click="vm.selectProject(project)" ) {{project.name}} + .import-project-board-no-projects.empty-large(ng-if="vm.projects.size == 0") + img( + src="/#{v}/images/empty/empty_tex.png", + alt="{{ vm.noProjectsMsg }}" + aria-hidden="true" + role="presentation" + ) + p.title {{ vm.noProjectsMsg }} + + .import-project-board-no-results.empty-filter(ng-if="vm.projects.size > 0 && filteredProjects.length == 0") + p(translate="PROJECT.IMPORT.PROJECT_SELECTOR.NO_RESULTS") + .create-project-action button.trans-button.create-project-action-cancel( type="button" ng-click="vm.onCancel()" - title="{{'COMMON.CANCEL' | translate}}" - translate="COMMON.CANCEL" + title="{{'PROJECT.IMPORT.PROJECT_SELECTOR.ACTION_BACK' | translate}}" + translate="PROJECT.IMPORT.PROJECT_SELECTOR.ACTION_BACK" ) diff --git a/app/modules/projects/create/jira-import/jira-import.jade b/app/modules/projects/create/jira-import/jira-import.jade index 836171c6..3090dea1 100644 --- a/app/modules/projects/create/jira-import/jira-import.jade +++ b/app/modules/projects/create/jira-import/jira-import.jade @@ -4,6 +4,7 @@ tg-import-project-selector( logo="/#{v}/images/import-logos/jira.png" search="{{ 'PROJECT.IMPORT.JIRA.CHOOSE_PROJECT' | translate }}" + no-projects-msg="{{ 'PROJECT.IMPORT.JIRA.NO_PROJECTS' | translate }}" projects="vm.projects" on-cancel="vm.onCancel()" on-select-project="vm.onSelectProject(project)" diff --git a/app/modules/projects/create/trello-import/trello-import.jade b/app/modules/projects/create/trello-import/trello-import.jade index 9702988d..47fb2ba7 100644 --- a/app/modules/projects/create/trello-import/trello-import.jade +++ b/app/modules/projects/create/trello-import/trello-import.jade @@ -1,6 +1,7 @@ tg-import-project-selector( logo="/#{v}/images/import-logos/trello.png" - search="{{ 'PROJECT.IMPORT.TRELLO.CHOOSE_BOARD' | translate }}" + search="{{ 'PROJECT.IMPORT.TRELLO.CHOOSE_PROJECT' | translate }}" + no-projects-msg="{{ 'PROJECT.IMPORT.TRELLO.NO_PROJECTS' | translate }}" projects="vm.projects" on-cancel="vm.onCancel()" on-select-project="vm.onSelectProject(project)" diff --git a/app/styles/components/empty.scss b/app/styles/components/empty.scss index 23fe77c7..381db7b7 100644 --- a/app/styles/components/empty.scss +++ b/app/styles/components/empty.scss @@ -32,3 +32,8 @@ max-width: 800px; } } + +.empty-filter { + @extend %empty; + margin-top: 1rem; +} From 16a7eb74b33f3fd6f9b9732b1864fdcba0573e30 Mon Sep 17 00:00:00 2001 From: xaviju Date: Thu, 2 Mar 2017 16:32:18 +0100 Subject: [PATCH 156/175] Minor style fixes --- .../create-project-restrictions.jade | 6 +++--- .../warning-user-import-lightbox.jade | 6 +++--- .../warning-user-import-lightbox.scss | 20 +++++++++++++++---- app/styles/dependencies/mixins/create.scss | 4 +++- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/modules/projects/create/create-project-restrictions/create-project-restrictions.jade b/app/modules/projects/create/create-project-restrictions/create-project-restrictions.jade index 1943527b..4121ac01 100644 --- a/app/modules/projects/create/create-project-restrictions/create-project-restrictions.jade +++ b/app/modules/projects/create/create-project-restrictions/create-project-restrictions.jade @@ -1,11 +1,11 @@ -div.create-project-warning( +.create-project-warning( ng-if="isPrivate && !canCreatePrivateProjects.valid && canCreatePrivateProjects.reason == 'max_private_projects'" ) tg-svg(svg-icon="icon-exclamation") span {{ 'PROJECT.CREATE.MAX_PRIVATE_PROJECTS' | translate }} -div.create-project-warning( +.create-project-warning( ng-if="!isPrivate && !canCreatePublicProjects.valid && canCreatePublicProjects.reason == 'max_public_projects'" ) tg-svg(svg-icon="icon-exclamation") - span {{ 'PROJECT.CREATE.MAX_PUBLIC_PROJECTS' | translate }} \ No newline at end of file + span {{ 'PROJECT.CREATE.MAX_PUBLIC_PROJECTS' | translate }} diff --git a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.jade b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.jade index 1a280aee..76b1f400 100644 --- a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.jade +++ b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.jade @@ -1,8 +1,8 @@ tg-lightbox-close(on-close="onClose()") -.create-project.import-project - h1(translate="PROJECT.IMPORT.WARNING.TITLE") +.warning-users-import-lightbox + h1.warning-users-import-title(translate="PROJECT.IMPORT.WARNING.TITLE") p(translate="PROJECT.IMPORT.WARNING.DESCRIPTION") .actions - button.button.button-gray(translate="PROJECT.IMPORT.WARNING.CHECK", ng-click="onClose()") + button.button.button-trans(translate="PROJECT.IMPORT.WARNING.CHECK", ng-click="onClose()") button.button.button-green(type="submit", translate="PROJECT.IMPORT.IMPORT", ng-click="onConfirm()") diff --git a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.scss b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.scss index 7d2a25d5..b6893a3f 100644 --- a/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.scss +++ b/app/modules/projects/create/warning-user-import-lightbox/warning-user-import-lightbox.scss @@ -1,9 +1,21 @@ -tg-warning-user-import-lightbox { +.warning-users-import-lightbox { + max-width: 600px; + .warning-users-import-title { + text-align: center; + } .actions { display: flex; - justify-content: center; - button:first-child { - margin-right: .5rem; + margin: 2rem; + button { + flex: 1; + &:first-child { + flex: 0; + flex-basis: 40%; + margin-right: .5rem; + } + } + .button-trans { + color: $grayer; } } } diff --git a/app/styles/dependencies/mixins/create.scss b/app/styles/dependencies/mixins/create.scss index 0a02611b..fe59f338 100644 --- a/app/styles/dependencies/mixins/create.scss +++ b/app/styles/dependencies/mixins/create.scss @@ -218,8 +218,10 @@ } &-warning { @include font-size(small); + border: 1px solid $red-light; + display: flex; padding: 1rem; - text-align: center; + margin-bottom: 1rem; .icon-exclamation { fill: $red-light; margin-right: .5rem; From 462e4ca5c6d15e50c781d5c29a478df276543440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Fri, 3 Mar 2017 10:36:17 +0100 Subject: [PATCH 157/175] Add verify locale keys usage script --- scripts/verify-locale-keys-usage.py | 54 +++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 scripts/verify-locale-keys-usage.py diff --git a/scripts/verify-locale-keys-usage.py b/scripts/verify-locale-keys-usage.py new file mode 100755 index 00000000..b461e27c --- /dev/null +++ b/scripts/verify-locale-keys-usage.py @@ -0,0 +1,54 @@ +import json +import os + +ROOT_PATH = os.path.dirname(os.path.dirname(__file__)) +DEFAULT_LOCALE_PATH = os.path.join(ROOT_PATH, "app/locales/taiga/locale-en.json") + + +def keywords(key, value): + if key is not None and not isinstance(value, dict): + return [".".join(key)] + + if key is not None and isinstance(value, dict): + kws = [] + for item_key in value.keys(): + kws += keywords(key+[item_key], value[item_key]) + return kws + + if key is None and isinstance(value, dict): + kws = [] + for item_key in value.keys(): + kws += keywords([item_key], value[item_key]) + return kws + + +def read_file(path): + with open(path) as fd: + return fd.read() + + +def check_keyword(keyword, files_text): + for text in files_text: + if text.find(keyword) != -1: + return True + return False + + +def verify_keywords_usage(): + locales = json.load(open(DEFAULT_LOCALE_PATH)) + + all_files = [] + for root, dirs, files in os.walk(os.path.join(ROOT_PATH, 'app')): + json_and_jade_files = list(filter(lambda x: x.endswith('.coffee') or x.endswith('.jade'), files)) + json_and_jade_files = map(lambda x: os.path.join(root, x), json_and_jade_files) + all_files += json_and_jade_files + + all_files_text = list(map(read_file, all_files)) + + for keyword in keywords(None, locales): + if not check_keyword(keyword, all_files_text): + print("Keyword unused: {}".format(keyword)) + + +if __name__ == "__main__": + verify_keywords_usage() From 4dcbbcac10edb6205c9e4f0baebdc4a9a2fa7a2a Mon Sep 17 00:00:00 2001 From: xaviju Date: Fri, 3 Mar 2017 11:43:15 +0100 Subject: [PATCH 158/175] Fix buttons --- app/locales/taiga/locale-en.json | 4 ++-- .../select-import-user-lightbox.jade | 18 ++++++------------ .../select-import-user-lightbox.scss | 18 +++++++++++++----- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index cd0e85ae..e4d94405 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -985,9 +985,9 @@ "ARCHIVED": "Archived", "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "EMAIL_NOT_FOUND": "We did not find any users with that email", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade index 1030b1c9..a4242a1d 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade @@ -47,12 +47,9 @@ tg-lightbox-close(on-close="vm.onClose()") translate="PROJECT.IMPORT.ASSIGN" ) - .search-user-mode - p - a( - href="" - ng-click="vm.mode = 'search'" - ) {{'PROJECT.IMPORT.SEARCH_CONTACT' | translate}} + button.search-user-mode( + ng-click="vm.mode = 'search'" + ) {{'PROJECT.IMPORT.SEARCH_CONTACT' | translate}} div(ng-if="vm.mode == 'search'") fieldset @@ -82,9 +79,6 @@ tg-lightbox-close(on-close="vm.onClose()") .more-users(ng-if="filteredCollection.length >= 5") span(translate="COMMON.ASSIGNED_TO.TOO_MANY") - .search-user-mode - p - a( - href="" - ng-click="vm.mode = 'mail'" - ) {{'PROJECT.IMPORT.WRITE_EMAIL' | translate}} + button.search-user-mode( + ng-click="vm.mode = 'mail'" + ) {{'PROJECT.IMPORT.WRITE_EMAIL' | translate}} diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss index 09c29ed2..83605d28 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss @@ -27,7 +27,9 @@ tg-select-import-user-lightbox { text-align: center; } .more-users { - padding: .5rem; + @include font-type(light); + @include font-size(small); + padding: 1rem; text-align: center; } .group { @@ -42,10 +44,16 @@ tg-select-import-user-lightbox { } } .search-user-mode { - border-top: 1px solid $gray-light; - margin-top: 1rem; - padding-top: 1rem; - text-align: center; + @include font-size(small); + background: none; + margin-top: 2rem; + padding: .5rem; + text-align: left; + transition: .2s; + width: 100%; + &:hover { + color: $primary; + } } label { display: block; From 8f1b542fe4cc4292e775c9a6e16197353526300c Mon Sep 17 00:00:00 2001 From: xaviju Date: Fri, 3 Mar 2017 12:09:53 +0100 Subject: [PATCH 159/175] Fix import user layout --- .../import-project-members.controller.coffee | 2 ++ .../select-import-user-lightbox.directive.coffee | 1 - .../select-import-user-lightbox.jade | 2 +- .../select-import-user-lightbox.scss | 7 ++----- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee index 04120b8e..f3b8f2a7 100644 --- a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee +++ b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee @@ -55,6 +55,8 @@ class ImportProjectMembersController user = user.set('user', externalUser) user = user.set('taigaUser', taigaUser) + console.log user + @.selectedUsers = @.selectedUsers.push(user) @.discardSuggestedUser(externalUser) diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee index 7ea31edd..218722a0 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee @@ -19,7 +19,6 @@ SelectImportUserLightboxDirective = (lightboxService, lightboxKeyboardNavigationService) -> link = (scope, el, attrs, ctrl) -> - pepe = () -> scope.$watch 'vm.visible', (visible) -> if visible && !el.hasClass('open') ctrl.start() diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade index a4242a1d..76fb27c9 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade @@ -5,7 +5,7 @@ tg-lightbox-close(on-close="vm.onClose()") .avatar.empty(ng-if="!vm.user.get('avatar')") {{vm.user.get('full_name')[0].toUpperCase() || vm.user.get('username')[0].toUpperCase()}} .avatar(ng-if="vm.user.get('avatar')") img(ng-src="{{vm.user.get('avatar')}}") - p {{vm.user.get('full_name') || vm.user.get('username')}} + span.candidate-user-name {{vm.user.get('full_name') || vm.user.get('username')}} h2.title(translate="PROJECT.IMPORT.WHO_IS") diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss index 83605d28..6062b314 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.scss @@ -9,11 +9,8 @@ tg-select-import-user-lightbox { display: flex; justify-content: center; padding-bottom: 1.5rem; - p { - margin-bottom: 0; - } - .empty { - margin-right: .5rem; + .candidate-user-name { + margin-left: .5rem; } .user-list-avatar { background-color: $red; From d257616506b005e801f455facf8a6b027324b6d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Fri, 3 Mar 2017 12:04:43 +0100 Subject: [PATCH 160/175] Whitelist translation strings generated dinamically --- scripts/verify-locale-keys-usage.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scripts/verify-locale-keys-usage.py b/scripts/verify-locale-keys-usage.py index b461e27c..67379c64 100755 --- a/scripts/verify-locale-keys-usage.py +++ b/scripts/verify-locale-keys-usage.py @@ -3,6 +3,19 @@ import os ROOT_PATH = os.path.dirname(os.path.dirname(__file__)) DEFAULT_LOCALE_PATH = os.path.join(ROOT_PATH, "app/locales/taiga/locale-en.json") +WHITELIST = [ + 'ADMIN.PROJECT_VALUES_PRIORITIES.ACTION_ADD', + 'ADMIN.PROJECT_VALUES_SEVERITIES.ACTION_ADD', + 'ADMIN.PROJECT_VALUES_TYPES.ACTION_ADD', + 'HINTS.HINT1_TITLE', + 'HINTS.HINT1_TEXT', + 'HINTS.HINT2_TITLE', + 'HINTS.HINT2_TEXT', + 'HINTS.HINT3_TITLE', + 'HINTS.HINT3_TEXT', + 'HINTS.HINT4_TITLE', + 'HINTS.HINT4_TEXT', +] def keywords(key, value): @@ -28,6 +41,8 @@ def read_file(path): def check_keyword(keyword, files_text): + if keyword in WHITELIST: + return True for text in files_text: if text.find(keyword) != -1: return True From 0fa7d8d6309334195cba7874bda77faa7740406c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Fri, 3 Mar 2017 12:04:59 +0100 Subject: [PATCH 161/175] Removing unused translation strings --- app/locales/taiga/locale-en.json | 191 +++---------------------------- 1 file changed, 14 insertions(+), 177 deletions(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index e4d94405..eb90c5d2 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -4,7 +4,6 @@ "NO": "No", "OR": "or", "LOADING": "Loading...", - "LOADING_PROJECT": "Loading project...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Save", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Why is this blocked?", "BLOCKED_REASON": "Please explain the reason", "CREATED_BY": "Created by {{fullDisplayName}}", - "FROM": "from", - "TO": "to", "CLOSE": "close", "GO_HOME": "Take me home", "PLUGINS": "Plugins", - "BETA": "We are on beta!", "ONE_ITEM_LINE": "One item per line...", "NEW_BULK": "New bulk insert", "RELATED_TASKS": "Related tasks", @@ -148,7 +144,6 @@ "PRIORITY": "Priority", "ASSIGNED_TO": "Assigned to", "POINTS": "Points", - "BLOCKED_NOTE": "blocked note", "IS_BLOCKED": "is blocked", "REF": "Ref", "VOTES": "Votes", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{one watcher} other{# watchers}}" }, "VOTE_BUTTON": { - "UPVOTE": "Upvote", - "UPVOTED": "Upvoted", - "DOWNVOTE": "Downvote", - "VOTERS": "Voters", "BUTTON_TITLE": "Upvote/Downvote this item", "COUNTER_TITLE": "{total, plural, one{one vote} other{# votes}}" }, @@ -206,7 +197,6 @@ "INPUT_PLACEHOLDER": "Subject or reference", "TITLE_ACTION_FILTER_BUTTON": "search", "TITLE": "Filters", - "INPUT_SEARCH_PLACEHOLDER": "Subject or ref", "TITLE_ACTION_SEARCH": "Search", "ACTION_SAVE_CUSTOM_FILTER": "save as custom filter", "PLACEHOLDER_FILTER_NAME": "Write the filter name and press enter", @@ -221,16 +211,10 @@ "CREATED_BY": "Created by", "CUSTOM_FILTERS": "Custom filters", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Delete custom filter", - "MESSAGE": "the custom filter '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown syntax help" }, "PERMISIONS_CATEGORIES": { @@ -283,10 +267,6 @@ "ADD_WIKI_LINKS": "Add wiki links", "DELETE_WIKI_LINKS": "Delete wiki links" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga is a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable." } }, "LOGIN": { @@ -342,7 +322,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Change you password - Taiga", - "PAGE_DESCRIPTION": "Set a new password for your Taiga account and hey!, you may want to eat some more iron-rich food, it's good for your brain :P", "SECTION_NAME": "Change password", "FIELD_CURRENT_PASSWORD": "Current password", "PLACEHOLDER_CURRENT_PASSWORD": "Your current password (or empty if you have no password yet)", @@ -367,8 +346,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Our Oompa Loompas can't find your invitation.", - "SUCCESS": "You've successfully joined this project, Welcome to {{project_name}}", - "ERROR": "According to our Oompa Loompas, your are not registered yet or typed an invalid password." + "SUCCESS": "You've successfully joined this project, Welcome to {{project_name}}" }, "HOME": { "PAGE_TITLE": "Home - Taiga", @@ -439,10 +417,7 @@ "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_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "is deprecated" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Prev", @@ -478,13 +453,10 @@ "ASYNC_MESSAGE": "We will send you an email when ready.", "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}}" + "ERROR_BUSY": "Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes." }, "MODULES": { "TITLE": "Modules", - "ENABLE": "Enable", - "DISABLE": "Disable", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Backlog", @@ -513,7 +485,6 @@ "PAGE_TITLE": "{{sectionName}} - Project profile - {{projectName}}", "PROJECT_DETAILS": "Project details", "PROJECT_NAME": "Project name", - "PROJECT_SLUG": "Project slug", "TAGS": "Tags", "DESCRIPTION": "Description", "RECRUITING": "Is this project looking for people?", @@ -524,7 +495,6 @@ "PRIVATE_PROJECT": "Private project", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", "DELETE": "Delete this project", - "LOGO_HELP": "The image will be scaled to 80x80px.", "CHANGE_LOGO": "Change logo", "ACTION_USE_DEFAULT_LOGO": "Use default image", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", @@ -664,7 +634,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Webhooks notify external services about events in Taiga, like comments, user stories....", "ADD_NEW": "Add a New Webhook", "TYPE_NAME": "Type the service name", "TYPE_PAYLOAD_URL": "Type the service payload url", @@ -710,7 +679,6 @@ "DELETE_MEMBER": "Delete member", "RESEND": "Resend", "SUCCESS_SEND_INVITATION": "We've sent the invitation again to '{{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}}" @@ -739,16 +707,11 @@ "PLACEHOLDER_WRITE_NAME": "Write a name for the new status" }, "MENU": { - "TITLE": "Admin", "PROJECT": "Project", "ATTRIBUTES": "Attributes", "MEMBERS": "Members", "PERMISSIONS": "Permissions", - "INTEGRATIONS": "Integrations", - "PLUGINS": "Plugins" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Attributes" + "INTEGRATIONS": "Integrations" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", @@ -759,17 +722,11 @@ "CUSTOM_FIELDS": "Custom fields", "TAGS": "Tags" }, - "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_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Private", @@ -784,15 +741,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Edit profile", - "FOLLOW": "Follow", "CLOSED_US": "Closed US", "PROJECTS": "Projects", "PROJECTS_EMPTY": "{{username}} doesn't' have projects yet", @@ -800,7 +755,6 @@ "CONTACTS_EMPTY": "{{username}} doesn't have contacts yet", "CURRENT_USER_CONTACTS_EMPTY": "You don't have contacts yet", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "The people with whom you work at Taiga will be your contacts automatically", - "REPORT": "Report Abuse", "TABS": { "ACTIVITY_TAB": "Timeline", "ACTIVITY_TAB_TITLE": "Show all the activity of this user", @@ -826,13 +780,13 @@ "FILTER_TYPE_ALL": "All", "FILTER_TYPE_ALL_TITLE": "Show all", "FILTER_TYPE_PROJECTS": "Projects", - "FILTER_TYPE_PROJECT_TITLES": "Show only projects", + "FILTER_TYPE_PROJECTS_TITLE": "Show only projects", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS_TITLE": "Show only epics", "FILTER_TYPE_USER_STORIES": "Stories", - "FILTER_TYPE_USER_STORIES_TITLES": "Show only user stories", + "FILTER_TYPE_USER_STORIES_TITLE": "Show only user stories", "FILTER_TYPE_TASKS": "Tasks", - "FILTER_TYPE_TASK_TITLES": "Show only tasks", + "FILTER_TYPE_TASKS_TITLE": "Show only tasks", "FILTER_TYPE_ISSUES": "Issues", "FILTER_TYPE_ISSUES_TITLE": "Show only issues", "EMPTY_TITLE": "It looks like there's nothing to show here." @@ -840,8 +794,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Welcome", - "SECTION_PROJECTS": "Projects", "HELP": "Reorder your projects to set in the top the most used ones.
    The top 10 projects will appear in the top navigation bar project list", "PRIVATE": "Private project", "LOOKING_FOR_PEOPLE": "This project is looking for people", @@ -853,12 +805,6 @@ "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." }, - "STATS": { - "PROJECT": "project
    points", - "DEFINED": "defined
    points", - "ASSIGNED": "assigned
    points", - "CLOSED": "closed
    points" - }, "SECTION": { "SEARCH": "Search", "TIMELINE": "Timeline", @@ -871,13 +817,9 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Your projects", - "PLACEHOLDER_SEARCH": "Search in...", "ACTION_CREATE_PROJECT": "Create project", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Create project", - "TITLE_PRVIOUS_PROJECT": "Show previous projects", - "TITLE_NEXT_PROJECT": "Show next projects", "HELP_TITLE": "Taiga Support Page", "HELP": "Help", "HOMEPAGE": "Homepage", @@ -885,10 +827,6 @@ "FEEDBACK": "Feedback", "NOTIFICATIONS_TITLE": "Edit your notification settings", "NOTIFICATIONS": "Notifications", - "ORGANIZATIONS_TITLE": "Edit your organizations", - "ORGANIZATIONS": "Edit organizations", - "SETTINGS_TITLE": "Edit your settings", - "SETTINGS": "Settings", "VIEW_PROFILE_TITLE": "View Profile", "VIEW_PROFILE": "View Profile", "EDIT_PROFILE_TITLE": "Edit your profile", @@ -897,9 +835,7 @@ "CHANGE_PASSWORD": "Change password", "DASHBOARD_TITLE": "Dashboard", "DISCOVER_TITLE": "Discover trending projects", - "NEW_ITEM": "New", - "DISCOVER": "Discover", - "ACTION_REORDER": "Drag & drop to reorder" + "DISCOVER": "Discover" }, "LIKE_BUTTON": { "LIKE": "Like", @@ -928,7 +864,6 @@ }, "CREATE": { "TITLE": "Create Project", - "FRESH": "Fresh and clean. So exciting!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -947,8 +882,6 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator.", "PRIVATE_PROJECT": "Private Project" }, "COMMON": { @@ -959,16 +892,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Fresh and clean. So exciting!", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Create project", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -982,13 +906,10 @@ "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", "IMPORT": "Import", - "ARCHIVED": "Archived", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -1043,17 +964,14 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", "SELECTOR": "Import your Github project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", @@ -1063,23 +981,19 @@ "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Issues", @@ -1093,13 +1007,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Delete Taiga Account", "CONFIRM": "Are you sure you want to delete your Taiga account?", - "NEWSLETTER_LABEL_TEXT": "I don't wanna receive your newsletter anymore", "CANCEL": "Back to settings", "ACCEPT": "Delete account", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account. ", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account. " }, "DELETE_PROJECT": { "TITLE": "Delete project", @@ -1219,15 +1130,9 @@ "ADD_BULK": "Add some new User Stories in bulk", "PROMOTED": "This US has been promoted from Issue:", "TITLE_LINK_GO_TO_ISSUE": "Go to issue", - "EXTERNAL_REFERENCE": "This US has been created from", - "GO_TO_EXTERNAL_REFERENCE": "Go to origin", - "BLOCKED": "This user story is blocked", "TITLE_DELETE_ACTION": "Delete User Story", "LIGHTBOX_TITLE_BLOKING_US": "Blocking us", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} tasks completed", - "ASSIGN": "Assign User Story", "NOT_ESTIMATED": "Not estimated", - "TOTAL_US_POINTS": "Total Us points", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "More info", @@ -1241,19 +1146,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Team Requirement", - "CLIENT_REQUIREMENT": "Client Requirement", - "FINISH_DATE": "Finish date" + "CLIENT_REQUIREMENT": "Client Requirement" } }, "COMMENTS": { "DELETED_INFO": "Comment deleted by {{user}}", - "TITLE": "Comments", "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", "OLDER_FIRST": "Older first", "RECENT_FIRST": "Recent first", "COMMENT": "Comment", - "EDIT_COMMENT": "Edit comment", "EDITED_COMMENT": "Edited:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Type a new comment here", @@ -1266,13 +1167,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Show activity", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Show previous entries ({{showMore}} more)", "TITLE": "Activity", "ACTIVITIES_COUNT": "{{activities}} Activities", - "REMOVED": "removed", - "ADDED": "added", "TAGS_ADDED": "tags added:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1281,50 +1177,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}): ", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Team Requirement", "CLIENT_REQUIREMENT": "Client Requirement", "BLOCKED": "Blocked", "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", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "order", - "BACKLOG_ORDER": "backlog order", - "SPRINT_ORDER": "sprint order", - "KANBAN_ORDER": "kanban order", - "TASKBOARD_ORDER": "taskboard order", - "US_ORDER": "us order", "COLOR": "color" } }, @@ -1338,8 +1205,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Set up the points and sprints through the Admin", "MOVE_US_TO_CURRENT_SPRINT": "Move to Current Sprint", "MOVE_US_TO_LATEST_SPRINT": "Move to latest Sprint", - "SHOW_FILTERS": "Show filters", - "SHOW_TAGS": "Show tags", "EMPTY": "The backlog is empty!", "CREATE_NEW_US": "Create a new US", "CREATE_NEW_US_EMPTY_HELP": "You may want to create a new user story", @@ -1394,8 +1259,6 @@ }, "FILTERS": { "TOGGLE": "Toggle filters visibility", - "TITLE": "Filters", - "REMOVE": "Remove Filters", "HIDE": "Hide Filters", "SHOW": "Show Filters" }, @@ -1404,7 +1267,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Sprint Taskboard", "TITLE_LINK_TASKBOARD": "Go to Taskboard of \"{{name}}\"", - "NUMBER_SPRINTS": "
    sprints", "EMPTY": "There are no sprints yet", "WARNING_EMPTY_SPRINT_ANONYMOUS": "This sprint has no User Stories", "WARNING_EMPTY_SPRINT": "Drop here Stories from your backlog to start a new sprint", @@ -1429,7 +1291,6 @@ "TITLE_ACTION_ADD": "Add a new Task", "TITLE_ACTION_ADD_BULK": "Add some new Tasks in bulk", "TITLE_ACTION_ASSIGN": "Assign task", - "TITLE_ACTION_EDIT": "Edit task", "PLACEHOLDER_CARD_TITLE": "This could be a task", "PLACEHOLDER_CARD_TEXT": "Split Stories into tasks to track them separately", "TABLE": { @@ -1459,17 +1320,11 @@ "TITLE_SELECT_STATUS": "Status Name", "OWNER_US": "This task belongs to", "TITLE_LINK_GO_OWNER": "Go to user story", - "ORIGIN_US": "This task has been created from", - "TITLE_LINK_GO_ORIGIN": "Go to user story", - "BLOCKED": "This task is blocked", "TITLE_DELETE_ACTION": "Delete Task", "LIGHTBOX_TITLE_BLOKING_TASK": "Blocking task", "FIELDS": { - "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": { @@ -1498,14 +1353,12 @@ "ISSUES": { "PAGE_TITLE": "Issues - {{projectName}}", "PAGE_DESCRIPTION": "The issues list panel of the project {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Issues", "SECTION_NAME": "Issue", "ACTION_NEW_ISSUE": "+ NEW ISSUE", "ACTION_PROMOTE_TO_US": "Promote to User Story", "PROMOTED": "This issue has been promoted to US:", "EXTERNAL_REFERENCE": "This issue has been created from", "GO_TO_EXTERNAL_REFERENCE": "Go to origin", - "BLOCKED": "This issue is blocked", "ACTION_DELETE": "Delete issue", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Blocking issue", "FIELDS": { @@ -1547,15 +1400,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Fold column", "TITLE_ACTION_UNFOLD": "Unfold column", - "TITLE_ACTION_FOLD_CARDS": "Fold cards", - "TITLE_ACTION_UNFOLD_CARDS": "Unfold cards", "TITLE_ACTION_ADD_US": "Add New User Story", "TITLE_ACTION_ADD_BULK": "Add New bulk", "ACTION_SHOW_ARCHIVED": "Show archived", "ACTION_HIDE_ARCHIVED": "Hide archived", "HIDDEN_USER_STORIES": "The user stories in this status are hidden by default", - "ARCHIVED": "You have archived", - "UNDO_ARCHIVED": "Drag & drop again to undo", "PLACEHOLDER_CARD_TITLE": "These are your User Stories", "PLACEHOLDER_CARD_TEXT": "Stories might also have subtasks to separate requirements" }, @@ -1576,7 +1425,6 @@ "PAGE_TITLE": "Team - {{projectName}}", "PAGE_DESCRIPTION": "The team panel to show all the members of the project {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Team", - "APP_TITLE": "TEAM - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Search by full name...", "COLUMN_MR_WOLF": "Mr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Closed issues", @@ -1612,18 +1460,9 @@ "OPTION_ALL": "All", "OPTION_INVOLVED": "Involved", "OPTION_NONE": "None" - }, - "POPOVER": { - "USER_PROFILE": "User Profile", - "CHANGE_PASSWORD": "Change Password", - "NOTIFICATIONS": "Notifications", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "User preferences" } }, "USER_PROFILE": { - "IMAGE_HELP": "The image will be scaled to 80x80px.", - "ACTION_CHANGE_IMAGE": "Change", "ACTION_USE_GRAVATAR": "Use default image", "ACTION_DELETE_ACCOUNT": "Delete Taiga account", "CHANGE_EMAIL_SUCCESS": "Check your inbox!
    We have sent a mail to your account
    with the instructions to set your new address", @@ -1646,7 +1485,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Write your wiki page", "REMOVE": "Remove this wiki page", "DELETE_LIGHTBOX_TITLE": "Delete Wiki Page", "DELETE_LINK_TITLE": "Delete Wiki link", @@ -1804,7 +1642,6 @@ "MOST_LIKED": "Most liked", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", - "RECRUITING": "This project is looking for people", "FEATURED": "Featured Projects", "EMPTY": "There are no projects to show with this search criteria.
    Try again!", "FILTERS": { From 683dd2300ad9a40875b86118c8f9c4a8c2b11b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Fri, 3 Mar 2017 12:48:33 +0100 Subject: [PATCH 162/175] Add script for detect similarities in translation string --- scripts/search-for-similar-strings.py | 62 +++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100755 scripts/search-for-similar-strings.py diff --git a/scripts/search-for-similar-strings.py b/scripts/search-for-similar-strings.py new file mode 100755 index 00000000..c02c4c37 --- /dev/null +++ b/scripts/search-for-similar-strings.py @@ -0,0 +1,62 @@ +import json +import os +import click +from difflib import SequenceMatcher + +ROOT_PATH = os.path.dirname(os.path.dirname(__file__)) +DEFAULT_LOCALE_PATH = os.path.join(ROOT_PATH, "app/locales/taiga/locale-en.json") + + +def keywords(key, value): + if key is not None and not isinstance(value, dict): + return [(".".join(key), value)] + + if key is not None and isinstance(value, dict): + kws = [] + for item_key in value.keys(): + kws += keywords(key+[item_key], value[item_key]) + return kws + + if key is None and isinstance(value, dict): + kws = [] + for item_key in value.keys(): + kws += keywords([item_key], value[item_key]) + return kws + + +@click.command() +@click.option('--threshold', default=1.0, help='Minimun similarity to show') +@click.option('--min-length', default=10, help='Minimun size of the string to show') +@click.option('--omit-identical', default=False, is_flag=True, help='Omit identical strings') +def verify_similarity(threshold, min_length, omit_identical): + locales = json.load(open(DEFAULT_LOCALE_PATH)) + all_keywords = keywords(None, locales) + already_shown_keys = set() + + for key1, value1 in all_keywords: + for key2, value2 in all_keywords: + if key1 == key2: + continue + if len(value1) < min_length and len(value2) < min_length: + continue + + similarity = SequenceMatcher(None, value1, value2).ratio() + if omit_identical and similarity == 1.0: + continue + + if similarity >= threshold: + if (key1, key2) not in already_shown_keys: + already_shown_keys.add((key1, key2)) + already_shown_keys.add((key2, key1)) + click.echo( + "The keys {} and {} has a similarity of {}\n - {}\n - {}".format( + key1, + key2, + similarity, + value1, + value2 + ) + ) + +if __name__ == "__main__": + verify_similarity() From fca0c20785d813dc5f7022525260153bf81f475b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 6 Mar 2017 17:01:04 +0100 Subject: [PATCH 163/175] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af771a08..e5f46512 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog # -## 3.1.0 No name yet (no date yet) +## 3.1.0 Perovskia Atriplicifolia (2017-03-10) ### Features - New project creation form: Now you can: From b8b1dd1fde725528ee4760ed9c49d9e014af288f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Mon, 6 Mar 2017 18:32:05 +0100 Subject: [PATCH 164/175] [i18n] Update locales --- app/locales/taiga/locale-ca.json | 206 ++---------------- app/locales/taiga/locale-de.json | 210 +++--------------- app/locales/taiga/locale-en.json | 8 +- app/locales/taiga/locale-es.json | 296 ++++++-------------------- app/locales/taiga/locale-fi.json | 208 ++---------------- app/locales/taiga/locale-fr.json | 244 ++++----------------- app/locales/taiga/locale-it.json | 208 ++---------------- app/locales/taiga/locale-ja.json | 210 +++--------------- app/locales/taiga/locale-ko.json | 210 +++--------------- app/locales/taiga/locale-nb.json | 206 ++---------------- app/locales/taiga/locale-nl.json | 206 ++---------------- app/locales/taiga/locale-pl.json | 262 +++++------------------ app/locales/taiga/locale-pt-br.json | 208 ++---------------- app/locales/taiga/locale-ru.json | 208 ++---------------- app/locales/taiga/locale-sv.json | 208 ++---------------- app/locales/taiga/locale-tr.json | 208 ++---------------- app/locales/taiga/locale-zh-hans.json | 270 +++++------------------ app/locales/taiga/locale-zh-hant.json | 208 ++---------------- 18 files changed, 515 insertions(+), 3269 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index 6bba57ad..ff4a4724 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -4,7 +4,6 @@ "NO": "No", "OR": "o", "LOADING": "Carregant...", - "LOADING_PROJECT": "Carregant projecte...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Desa", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Per qué està bloquejat?", "BLOCKED_REASON": "Per favor, explica la raó", "CREATED_BY": "Creat per {{fullDisplayName}}", - "FROM": "de", - "TO": "a", "CLOSE": "Tancar", "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", @@ -148,7 +144,6 @@ "PRIORITY": "Prioritat", "ASSIGNED_TO": "Assignat a", "POINTS": "Punts", - "BLOCKED_NOTE": "Nota de bloqueig", "IS_BLOCKED": "està bloquejat", "REF": "Ref", "VOTES": "Vots", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{un seguidor} other{# seguidors}}" }, "VOTE_BUTTON": { - "UPVOTE": "Upvote", - "UPVOTED": "Upvoted", - "DOWNVOTE": "Downvote", - "VOTERS": "Voters", "BUTTON_TITLE": "Upvote/Downvote this item", "COUNTER_TITLE": "{total, plural, one{one vote} other{# votes}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Descripció o referència", "TITLE_ACTION_FILTER_BUTTON": "cerca", "TITLE": "Filtres", - "INPUT_SEARCH_PLACEHOLDER": "Descripció o ref", "TITLE_ACTION_SEARCH": "Cerca", "ACTION_SAVE_CUSTOM_FILTER": "Guarda com a filtre", "PLACEHOLDER_FILTER_NAME": "Escriu el filtre i pressiona Intro", @@ -220,16 +210,10 @@ "CREATED_BY": "Creat per", "CUSTOM_FILTERS": "Filtres personalitzats", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Esborrar filtre", - "MESSAGE": "el filtre '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Ajuda de Markdown" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Afegir link de wiki", "DELETE_WIKI_LINKS": "Esborrar enllaços de wiki" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga is a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Canvi de contrasenya - Taiga", - "PAGE_DESCRIPTION": "Estableix una contrasenya nova per al teu compte de Taiga i per cer cert! Potser voleu menjar més aliments rics en ferro, és bo per al cervell :P", "SECTION_NAME": "Canvi de contrasenya", "FIELD_CURRENT_PASSWORD": "Contrasenya actual", "PLACEHOLDER_CURRENT_PASSWORD": "La teua contrasenya actua (buit si no tens contrasenya encara)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Els 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." + "SUCCESS": "T'has incorporat a este projecte. Vos donem la benvinguda a {{project_name}}" }, "HOME": { "PAGE_TITLE": "Home - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Esborrar adjunt...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "l'adjunt '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "No hem pogut esborrar: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "es obsolet" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Abans", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "T'enviarem un correu quan estiga llest.", "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}}" + "ERROR_BUSY": "Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments." }, "MODULES": { "TITLE": "Mòdules", - "ENABLE": "Activa", - "DISABLE": "Desactiva", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Backlog", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Perfil de projecte - {{projectName}}", "PROJECT_DETAILS": "Detalls de projecte", "PROJECT_NAME": "Nom del projecte", - "PROJECT_SLUG": "Slug de projecte", "TAGS": "Etiquetes", "DESCRIPTION": "Descripció", "RECRUITING": "Este projecte busca col·laboracions?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Projecte privat", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", "DELETE": "Esborra aquest projecte", - "LOGO_HELP": "S'escalarà la imatge a 80x80px.", "CHANGE_LOGO": "Change logo", "ACTION_USE_DEFAULT_LOGO": "Utilitza la imatge per defecte", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", @@ -653,8 +623,8 @@ "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", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_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", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Esborrar membre", "RESEND": "Resend", "SUCCESS_SEND_INVITATION": "Hem tornat a enviar la invitació a '{{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}}'." @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Escriviu un nom per al nou estat" }, "MENU": { - "TITLE": "Admin", "PROJECT": "Projecte", "ATTRIBUTES": "Atributs", "MEMBERS": "Membres", "PERMISSIONS": "Permisos", - "INTEGRATIONS": "Integracions", - "PLUGINS": "Plugins" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Atributs" + "INTEGRATIONS": "Integracions" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Estats", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Camps personalitzats", "TAGS": "Etiquetes" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Perfil de projecte" - }, "SUBMENU_ROLES": { "TITLE": "Rols", "ACTION_NEW_ROLE": "+ Nou rol", "TITLE_ACTION_NEW_ROLE": "Afegir nou rol" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Serveis" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Private", @@ -783,15 +740,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Edita el perfil", - "FOLLOW": "Seguir", "CLOSED_US": "HU tancada", "PROJECTS": "Projectes", "PROJECTS_EMPTY": "{{username}} encara no te cap projecte", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{Usuari}} no té contactes encara", "CURRENT_USER_CONTACTS_EMPTY": "No tens contactes encara", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Les persones amb les que treballa a Taiga seran els seus contactes de forma automàtica", - "REPORT": "Informar d'un abús", "TABS": { "ACTIVITY_TAB": "Timeline", "ACTIVITY_TAB_TITLE": "Mostra tota la activitat d'aquest usuari", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Tot", "FILTER_TYPE_ALL_TITLE": "Mostrar tot", "FILTER_TYPE_PROJECTS": "Projectes", - "FILTER_TYPE_PROJECT_TITLES": "Mostra només projectes", + "FILTER_TYPE_PROJECTS_TITLE": "Mostra només projectes", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS_TITLE": "Show only epics", "FILTER_TYPE_USER_STORIES": "Históries", - "FILTER_TYPE_USER_STORIES_TITLES": "Veure només històries d'usuari", + "FILTER_TYPE_USER_STORIES_TITLE": "Veure només històries d'usuari", "FILTER_TYPE_TASKS": "Tasques", - "FILTER_TYPE_TASK_TITLES": "Mostra només tasquest", + "FILTER_TYPE_TASKS_TITLE": "Mostra només tasquest", "FILTER_TYPE_ISSUES": "Incidències", "FILTER_TYPE_ISSUES_TITLE": "Mostra només incidències", "EMPTY_TITLE": "Sembla que no hi ha res que mostrar" @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Benvinguts", - "SECTION_PROJECTS": "Projectes", "HELP": "Reordena els teus projectes per a establir els més utilitzats en les primeres posicions.
    Els 10 millors projectes apareixeran en la llista de projectes de la barra de navegació superior", "PRIVATE": "Projecte privat", "LOOKING_FOR_PEOPLE": "Este projecte busca col·laboracions", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." }, - "STATS": { - "PROJECT": "punts
    projecte", - "DEFINED": "punts
    definits", - "ASSIGNED": "punts
    assignats", - "CLOSED": "punts
    tancats" - }, "SECTION": { "SEARCH": "Cerca", "TIMELINE": "Timeline", @@ -870,13 +816,9 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Els teus projectes", - "PLACEHOLDER_SEARCH": "Cerca en...", "ACTION_CREATE_PROJECT": "Crear projecte", "MANAGE_PROJECTS": "Gestiona els projectes", "TITLE_CREATE_PROJECT": "Crear projecte", - "TITLE_PRVIOUS_PROJECT": "Mostra projectes previs", - "TITLE_NEXT_PROJECT": "Mostrar próxims projectes", "HELP_TITLE": "Pàgina d'ajuda de Taiga", "HELP": "Ajuda", "HOMEPAGE": "Homepage", @@ -884,10 +826,6 @@ "FEEDBACK": "Suggerències", "NOTIFICATIONS_TITLE": "Edita la configuració de les teves notificacions", "NOTIFICATIONS": "Notificacions", - "ORGANIZATIONS_TITLE": "Edit your organizations", - "ORGANIZATIONS": "Editar organitzacions", - "SETTINGS_TITLE": "Editeu les vostres preferències", - "SETTINGS": "Preferències", "VIEW_PROFILE_TITLE": "Visualitza el perfil", "VIEW_PROFILE": "Visualitza el perfil", "EDIT_PROFILE_TITLE": "Editeu el vostre perfil", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Canvi de contrasenya", "DASHBOARD_TITLE": "Tauler", "DISCOVER_TITLE": "Discover trending projects", - "NEW_ITEM": "Nova", - "DISCOVER": "Descobreix", - "ACTION_REORDER": "Arrossega els elements per endreçar" + "DISCOVER": "Descobreix" }, "LIKE_BUTTON": { "LIKE": "M'agrada", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Crear projecte", - "FRESH": "Nou projecte. Qué il·lusió!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Private Project" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Nou projecte. Qué il·lusió!", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Crear projecte", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "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", "IMPORT": "Import", - "ARCHIVED": "Archived", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -998,7 +920,7 @@ "ASSIGN": "Assign", "PROJECT_SELECTOR": { "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", + "ACTION_SEARCH": "cerca", "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Incidències", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Esborrar compte de Taiga", "CONFIRM": "Segur que vols borrar el teu compte de Taiga? ", - "NEWSLETTER_LABEL_TEXT": "No vull rebre més el vostre butlletí de notícies", "CANCEL": "Back to settings", "ACCEPT": "Delete account", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account." }, "DELETE_PROJECT": { "TITLE": "Esborrar projecte", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Afegeix noves històries d'usuari en grup", "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", - "BLOCKED": "Aquest història d'usuari està bloquejada", "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", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "More info", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Requeriment d'equip", - "CLIENT_REQUIREMENT": "Requeriment de client", - "FINISH_DATE": "Data de finalització" + "CLIENT_REQUIREMENT": "Requeriment de client" } }, "COMMENTS": { "DELETED_INFO": "Comment deleted by {{user}}", - "TITLE": "Comentaris", "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", "OLDER_FIRST": "Older first", "RECENT_FIRST": "Recent first", "COMMENT": "Comentar", - "EDIT_COMMENT": "Edit comment", "EDITED_COMMENT": "Edited:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Escriu un nou comentari ací", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Mostrar activitat", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Mostrar activitat anterior ({{showMore}} més)", "TITLE": "Activitat", "ACTIVITIES_COUNT": "{{activities}} Activities", - "REMOVED": "Borrat", - "ADDED": "Afegit", "TAGS_ADDED": "tags added:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "Fet {size, plural, one{un canvi} other{# changes}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Requeriment d'equip", "CLIENT_REQUIREMENT": "Requeriment de client", "BLOCKED": "Bloquejat", "VALUES": { - "YES": "si", - "NO": "no", - "EMPTY": "buit", "UNASSIGNED": "Sense assignar" }, "FIELDS": { "SUBJECT": "descripció", - "NAME": "nom", "DESCRIPTION": "descripció", - "CONTENT": "Contingut", "STATUS": "Estats", - "IS_CLOSED": "tancat", - "FINISH_DATE": "Data de finalització", "TYPE": "tipus", - "PRIORITY": "prioritat", - "SEVERITY": "severitat", "ASSIGNED_TO": "Assignat a", - "WATCHERS": "Seguidors", "MILESTONE": "sprint", - "USER_STORY": "història d'usuari", - "PROJECT": "projecte", - "IS_BLOCKED": "Està bloquejat", - "BLOCKED_NOTE": "Nota de bloqueig", - "POINTS": "punts", - "CLIENT_REQUIREMENT": "requeriment de client", - "TEAM_REQUIREMENT": "requeriment d'equip", - "IS_IOCAINE": "Es iocaina", - "TAGS": "Etiquetes", - "ATTACHMENTS": "adjunts", - "IS_DEPRECATED": "és obsolet", - "IS_NOT_DEPRECATED": "is not deprecated", - "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", "COLOR": "color" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Estableix els punts i els sprints al Admin", "MOVE_US_TO_CURRENT_SPRINT": "Envia al Sprint", "MOVE_US_TO_LATEST_SPRINT": "Posar a l'ultim sprint", - "SHOW_FILTERS": "Mostra filtres", - "SHOW_TAGS": "Mostra etiquetes", "EMPTY": "El backlog està buit!", "CREATE_NEW_US": "Crea una nova US", "CREATE_NEW_US_EMPTY_HELP": "Potser vols crear una nova història d'usuari", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Alterna la visibilitat dels filtres", - "TITLE": "Filtres", - "REMOVE": "Esborra filtres", "HIDE": "Amaga filtres", "SHOW": "Mostra filtres" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Anar al panell de sprint", "TITLE_LINK_TASKBOARD": "Anar al panell de {{::name}}", - "NUMBER_SPRINTS": "
    sprints", "EMPTY": "There are no sprints yet", "WARNING_EMPTY_SPRINT_ANONYMOUS": "This sprint has no User Stories", "WARNING_EMPTY_SPRINT": "Drop here Stories from your backlog to start a new sprint", @@ -1427,7 +1290,6 @@ "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", "PLACEHOLDER_CARD_TITLE": "Açó podría ser una tasca", "PLACEHOLDER_CARD_TEXT": "Divideix les históries per a poder gertionar-les separadament", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Nom de l'estat", "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", "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": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Incidències - {{projectName}}", "PAGE_DESCRIPTION": "El panell d'incidències de {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Incidències", "SECTION_NAME": "incidència", "ACTION_NEW_ISSUE": "+ NOVA INCIDÈNCIA", "ACTION_PROMOTE_TO_US": "Promocionar història d'usuari", "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", "ACTION_DELETE": "Esborrar incidència", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Bloquejant incidència", "FIELDS": { @@ -1545,15 +1399,11 @@ "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": "Afegeix una nova 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'usuari en aquest estats estan amagades", - "ARCHIVED": "Has arxivat", - "UNDO_ARCHIVED": "Arrastra de nou per desfer", "PLACEHOLDER_CARD_TITLE": "These are your User Stories", "PLACEHOLDER_CARD_TEXT": "Stories might also have subtasks to separate requirements" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Equip - {{projectName}}", "PAGE_DESCRIPTION": "El panell d'equip mostra tots els membres del projecte {{projectName}}: {{projectDescription}}", "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", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Tot", "OPTION_INVOLVED": "Implicat", "OPTION_NONE": "Sense notificacions" - }, - "POPOVER": { - "USER_PROFILE": "Perfil d'usuari", - "CHANGE_PASSWORD": "Canvi de contrasenya", - "NOTIFICATIONS": "Notificacions", - "FEEDBACK": "Suggerències", - "TITLE_AVATAR": "Preferències d'usuari" } }, "USER_PROFILE": { - "IMAGE_HELP": "S'escalarà la imatge a 80x80px.", - "ACTION_CHANGE_IMAGE": "Canviar", "ACTION_USE_GRAVATAR": "Utilitza la imatge per defecte", "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", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Esciu pàgina del Wiki", "REMOVE": "Esborrar pàgina de Wiki", "DELETE_LIGHTBOX_TITLE": "Esborrar pàgina de Wiki", "DELETE_LINK_TITLE": "Delete Wiki link", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Most liked", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", - "RECRUITING": "Este projecte busca col·laborados", "FEATURED": "Featured Projects", "EMPTY": "There are no projects to show with this search criteria.
    Try again!", "FILTERS": { diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index 4476539f..5774eba5 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -4,7 +4,6 @@ "NO": "Nein", "OR": "oder", "LOADING": "Wird geladen...", - "LOADING_PROJECT": "Projekt wird geladen...", "DATE": "DD. MMM YYYY", "DATETIME": "DD. MMM YYYY HH:mm", "SAVE": "Speichern", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Why is this blocked?", "BLOCKED_REASON": "Bitte erklären Sie den Grund", "CREATED_BY": "Erstellt durch {{fullDisplayName}}", - "FROM": "von", - "TO": "zu", "CLOSE": "schließen", "GO_HOME": "Führe mich heim", "PLUGINS": "Plugins", - "BETA": "Wir sind auf beta!", "ONE_ITEM_LINE": "Ein Eintrag pro Zeile...", "NEW_BULK": "Neue Massenerstellung", "RELATED_TASKS": "Verbundene Aufgaben", @@ -148,7 +144,6 @@ "PRIORITY": "Priorität", "ASSIGNED_TO": "Zugewiesen an", "POINTS": "Punkte", - "BLOCKED_NOTE": "Blockierungsgrund", "IS_BLOCKED": "wird blockiert", "REF": "Ref", "VOTES": "Stimmen", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{ein Beobachter} other{# Beobachter}}" }, "VOTE_BUTTON": { - "UPVOTE": "Upvote", - "UPVOTED": "Hochgevotet", - "DOWNVOTE": "Runtergevotet", - "VOTERS": "Voter", "BUTTON_TITLE": "Upvote/Downvote diesen Eintrag", "COUNTER_TITLE": "{total, plural, one{eine Stimme} other{# Stimmen}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Betreff oder Verweis", "TITLE_ACTION_FILTER_BUTTON": "suche", "TITLE": "Filter", - "INPUT_SEARCH_PLACEHOLDER": "Thema oder ref", "TITLE_ACTION_SEARCH": "Suche", "ACTION_SAVE_CUSTOM_FILTER": "Als Benutzerfilter speichern", "PLACEHOLDER_FILTER_NAME": "Benennen Sie den Filter und drücken Sie die Eingabetaste", @@ -220,16 +210,10 @@ "CREATED_BY": "Erstellt durch", "CUSTOM_FILTERS": "Benutzerfilter", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Benutzerfilter löschen", - "MESSAGE": "der Benutzerfilter '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown syntax Hilfe" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Wiki Links hinzufügen", "DELETE_WIKI_LINKS": "Wiki Links löschen" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga ist ein Projekt-Management Plattform für Neugründer und agile Entwickler und Designer, die ein unkompliziertes und ansprechendes Tool möchten, das die Arbeit wirklich angenehm macht." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Ändere Dein Passwort - Taiga", - "PAGE_DESCRIPTION": "Setzen Sie ein neues Passwort für Ihr Taiga Benutzerkonto.", "SECTION_NAME": "Passwort ändern", "FIELD_CURRENT_PASSWORD": "Aktuelles Passwort", "PLACEHOLDER_CURRENT_PASSWORD": "Dein aktuelles Passwort (oder leer, wenn Du noch kein Passwort hast)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Unsere Helferlein können deine Einladung nicht finden.", - "SUCCESS": "Sie sind diesem Projekt erfolgreich beigetreten. Herzlich willkommen bei {{project_name}}", - "ERROR": "Laut unseren Helferlein sind Sie noch nicht registriert, oder Sie haben ein ungültiges Passwort eingegeben." + "SUCCESS": "Sie sind diesem Projekt erfolgreich beigetreten. Herzlich willkommen bei {{project_name}}" }, "HOME": { "PAGE_TITLE": "Home - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Anhang löschen...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "der Anhang '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Es war uns nicht möglich, zu löschen: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "ist veraltet" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Zurück", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Wir werden nach Fertigstellung eine E-Mail senden.", "SYNC_MESSAGE": "Wenn der Download nicht automatisch startet, klicken Sie hier.", "ERROR": "Unsere Helferlein haben Probleme, Ihre Export-Datei zu erzeugen. Bitte versuchen Sie es erneut.", - "ERROR_BUSY": "Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut.", - "ERROR_MESSAGE": "Unsere Helferlein haben Probleme, Ihre Export-Datei zu erstellen: {{message}}" + "ERROR_BUSY": "Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut." }, "MODULES": { "TITLE": "Module", - "ENABLE": "Aktivieren", - "DISABLE": "Deaktivieren", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualisieren und verwalten Sie den strategischsten Teil Ihres Projektes", "BACKLOG": "Backlog", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Projekt Profil - {{projectName}}", "PROJECT_DETAILS": "Projekt Details", "PROJECT_NAME": "Projektname", - "PROJECT_SLUG": "Projekt Slug", "TAGS": "Schlagwörter", "DESCRIPTION": "Beschreibung", "RECRUITING": "Is this project looking for people?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Privates Projekt", "PRIVATE_OR_PUBLIC": "Was ist der Unterschied zwischen öffentlichen und privaten Projekten?", "DELETE": "Dieses Projekt löschen", - "LOGO_HELP": "Das Bild wird auf 80x80px skaliert.", "CHANGE_LOGO": "Logo ändern", "ACTION_USE_DEFAULT_LOGO": "Nutze Standardbild", "MAX_PRIVATE_PROJECTS": "Sie haben die maximale Anzahl privater Projekte erreicht, die in Ihrem derzeitigen Plan erlaubt sind", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Gitlab rAnfragen sind nicht signiert, daher ist der beste Weg die Quelle anhand der IP zu prüfen. Wenn das Feld leer bleibt, wird keine Prüfung der IP vorgenommen." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Webhooks meldet externe Dienste über Ereignisse in Taiga, wie Kommentare, User-Stories...", "ADD_NEW": "Fügen Sie ein neues Webhook hinzu", "TYPE_NAME": "Servicename...", "TYPE_PAYLOAD_URL": "Geben Sie die Service Payload URL ein", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Mitglied löschen", "RESEND": "Neu senden", "SUCCESS_SEND_INVITATION": "Wir haben die Einladung erneut versandt an '{{email}}'.", - "ERROR_SEND_INVITATION": "Wir haben die Einladung nicht versandt.", "SUCCESS_DELETE": "Gelöscht {{message}}.", "ERROR_DELETE": "Das Löschen ist fehlgeschlagen {{message}}.", "DEFAULT_DELETE_MESSAGE": "die Einladung an {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Benennen Sie den neuen Status" }, "MENU": { - "TITLE": "Administrator", "PROJECT": "Projekt", "ATTRIBUTES": "Attribute", "MEMBERS": "Mitglieder", "PERMISSIONS": "Berechtigungen", - "INTEGRATIONS": "Integrationen", - "PLUGINS": "Plugins" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Attribute" + "INTEGRATIONS": "Integrationen" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Benutzerdefinierte Felder", "TAGS": "Schlagwörter" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Projektprofil" - }, "SUBMENU_ROLES": { "TITLE": "Rollen", "ACTION_NEW_ROLE": "+ Neue Rolle", "TITLE_ACTION_NEW_ROLE": "Neue Rolle hinzufügen" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Dienste" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Möchten Sie der neue Projektleiter werden?", "PRIVATE": "Privat", @@ -783,15 +740,13 @@ "PRIVATE": "Bitte denken Sie daran, dass Sie bis zu {{maxProjects}} private Projekte besitzen können. Dezeit besitzen Sie {{currentProjects}} private Projekte", "PUBLIC": "Bitte denken Sie daran, dass Sie bis zu {{maxProjects}} öffentliche Projekte besitzen können. Dezeit besitzen Sie {{currentProjects}} öffentliche Projekte" }, - "CANT_BE_OWNED": "Zur Zeit können Sie kein Projektleiter für diesen Projekt-Typ werden werden. Wenn Sie Projektleiter für dieses Projekt werden möchten, kontaktieren Sie bitte den Administrator, damit er Ihre Benutzerkonto-Einstellungen anpassen kann, um Projektleiter werden zu können.", - "CHANGE_MY_PLAN": "Meinen Plan ändern" + "CANT_BE_OWNED": "Zur Zeit können Sie kein Projektleiter für diesen Projekt-Typ werden werden. Wenn Sie Projektleiter für dieses Projekt werden möchten, kontaktieren Sie bitte den Administrator, damit er Ihre Benutzerkonto-Einstellungen anpassen kann, um Projektleiter werden zu können." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Profil ändern", - "FOLLOW": "Folgen", "CLOSED_US": "Geschlossene User-Story", "PROJECTS": "Projekte", "PROJECTS_EMPTY": "{{username}} besitzt noch keine Projekte", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} hat noch keine Kontakte", "CURRENT_USER_CONTACTS_EMPTY": "Sie haben noch keine Kontakte", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Die Leute, mit denen Sie auf Taiga zusammenarbeiten, werden automatisch zu Ihren Kontakten", - "REPORT": "Missbrauch melden", "TABS": { "ACTIVITY_TAB": "Zeitlinie", "ACTIVITY_TAB_TITLE": "Alle Aktivitäten dieses Benutzers anzeigen", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Alle", "FILTER_TYPE_ALL_TITLE": "Alle anzeigen", "FILTER_TYPE_PROJECTS": "Projekte", - "FILTER_TYPE_PROJECT_TITLES": "Nur Projekte anzeigen", + "FILTER_TYPE_PROJECTS_TITLE": "Nur Projekte anzeigen", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Nur Epics anzeigen", + "FILTER_TYPE_EPICS_TITLE": "Nur Epics anzeigen", "FILTER_TYPE_USER_STORIES": "Stories", - "FILTER_TYPE_USER_STORIES_TITLES": "Nur User-Stories anzeigen", + "FILTER_TYPE_USER_STORIES_TITLE": "Nur User-Stories anzeigen", "FILTER_TYPE_TASKS": "Aufgaben", - "FILTER_TYPE_TASK_TITLES": "Zeige nur Tasks", + "FILTER_TYPE_TASKS_TITLE": "Zeige nur Tasks", "FILTER_TYPE_ISSUES": "Tickets", "FILTER_TYPE_ISSUES_TITLE": "Nur Fehler anzeigen", "EMPTY_TITLE": "Es sieht so aus, als wäre hier nichts." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Willkommen", - "SECTION_PROJECTS": "Projekte", "HELP": "Sortieren Sie Ihre Projekte nach Wichtigkeit.
    Die ersten 10 Projekte erscheinen prominent in der Projektliste der Navigationsleiste.", "PRIVATE": "Privates Projekt", "LOOKING_FOR_PEOPLE": "Dieses Projekt sucht nach Mitarbeitern", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Dieses Projekt ist vorrübergehend blockiert", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Um dein Projekt zu entsperren kontaktiere bitte einen Administrator." }, - "STATS": { - "PROJECT": "Projekt
    Punkte", - "DEFINED": "definierte
    Punkte", - "ASSIGNED": "zugewiesene
    Punkte", - "CLOSED": "geschlossene
    Punkte" - }, "SECTION": { "SEARCH": "Suche", "TIMELINE": "Zeitlinie", @@ -870,13 +816,9 @@ "ADMIN": "Administrator" }, "NAVIGATION": { - "SECTION_TITLE": "Ihre Projekte", - "PLACEHOLDER_SEARCH": "Suchen...", "ACTION_CREATE_PROJECT": "Projekt anlegen", "MANAGE_PROJECTS": "Projekte verwalten", "TITLE_CREATE_PROJECT": "Projekt anlegen", - "TITLE_PRVIOUS_PROJECT": "Frühere Projekte anzeigen", - "TITLE_NEXT_PROJECT": "Weitere Projekte zeigen", "HELP_TITLE": "Taiga Support Seite", "HELP": "Hilfe", "HOMEPAGE": "Homepage", @@ -884,10 +826,6 @@ "FEEDBACK": "Feedback", "NOTIFICATIONS_TITLE": "Benachrichtigungseinstellungen bearbeiten", "NOTIFICATIONS": "Benachrichtigungen", - "ORGANIZATIONS_TITLE": "Organisationen bearbeiten", - "ORGANIZATIONS": "Organisationen bearbeiten", - "SETTINGS_TITLE": "Einstellungen bearbeiten", - "SETTINGS": "Einstellungen", "VIEW_PROFILE_TITLE": "Profil ansehen", "VIEW_PROFILE": "Profil ansehen", "EDIT_PROFILE_TITLE": "Bearbeiten Sie Ihr Profil", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Passwort ändern", "DASHBOARD_TITLE": "Dashboard", "DISCOVER_TITLE": "Entdecke aktuelle Projekte", - "NEW_ITEM": "Neu", - "DISCOVER": "Entdecken", - "ACTION_REORDER": "Benutzen Sie Drag & Drop zum neuen Ordnen" + "DISCOVER": "Entdecken" }, "LIKE_BUTTON": { "LIKE": "Gefällt mir", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Projekt erstellen", - "FRESH": "Frisch und sauber. Wie aufregend!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Öffentliches Projekt", - "PRIVATE_PROJECT": "Privates Projekt", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Privates Projekt" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Frisch und sauber. Wie aufregend!", - "CHOOSE_TEMPLATE_TITLE": "Mehr Infos über Projekt-Templates", - "CHOOSE_TEMPLATE_INFO": "Weitere Infos", - "PROJECT_DETAILS": "Projekt Details", - "PUBLIC_PROJECT": "Öffentliches Projekt", - "PRIVATE_PROJECT": "Privates Projekt", - "CREATE_PROJECT": "Projekt anlegen", - "CHANGE_PLANS": "Änderungs-Pläne" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})", "SYNC_SUCCESS": "Ihr Projekt wurde erfolgreich importiert", "IMPORT": "Import", - "ARCHIVED": "Archiviert", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Projektmitglieder", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -997,9 +919,9 @@ "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Zuweisen", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "NO_RESULTS": "Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden.", + "ACTION_SEARCH": "suche", + "ACTION_BACK": "Zurück" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Projektmitglieder", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Projektmitglieder" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Projektmitglieder", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Tickets", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Dein Taiga Benutzerkonto löschen", "CONFIRM": "Sind Sie sicher, dass Sie Ihr Taiga Benutzerkonto löschen wollen?", - "NEWSLETTER_LABEL_TEXT": "Ich möchte keinen Newsletter mehr erhalten", "CANCEL": "Zurück zu Einstellungen", "ACCEPT": "Benutzerkonto löschen", - "BLOCK_PROJECT": "Beachten Sie, dass alle Projekte die Sie besitzen, gesperrt werden, nachdem Sie Ihr Konto gelöscht haben. Wenn Sie möchten, dass Ihre Projekte nicht gesperrt werden, ernennen Sie ein anderes Mitglied zum Projektleiter für jedes Projekt, bevor Sie Ihr Konto löschen.", - "SUBTITLE": "Schade, dass du uns verlassen willst. Wir sind hier, falls du uns nochmal suchst. :(" + "BLOCK_PROJECT": "Beachten Sie, dass alle Projekte die Sie besitzen, gesperrt werden, nachdem Sie Ihr Konto gelöscht haben. Wenn Sie möchten, dass Ihre Projekte nicht gesperrt werden, ernennen Sie ein anderes Mitglied zum Projektleiter für jedes Projekt, bevor Sie Ihr Konto löschen." }, "DELETE_PROJECT": { "TITLE": "Projekt löschen", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Mehrere neue User-Stories hinzufügen", "PROMOTED": "Diese User-Story entstand aus Ticket:", "TITLE_LINK_GO_TO_ISSUE": "Zum Ticket wechseln", - "EXTERNAL_REFERENCE": "Dies User-Story wurde angelegt von", - "GO_TO_EXTERNAL_REFERENCE": "Zur Quelle wechseln", - "BLOCKED": "Diese User-Story wird blockiert", "TITLE_DELETE_ACTION": "User-Story löschen", "LIGHTBOX_TITLE_BLOKING_US": "Blockiert uns", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} Aufgaben fertiggestellt", - "ASSIGN": "Zugeordnete User-Story", "NOT_ESTIMATED": "Nicht eingeschätzt", - "TOTAL_US_POINTS": "User-Story-Punkte insgesamt", "TRIBE": { "PUBLISH": "Als Gig in Taiga Tribe veröffentlichen", "PUBLISH_INFO": "Weitere Infos", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Team Anforderung", - "CLIENT_REQUIREMENT": "Kundenanforderung", - "FINISH_DATE": "Endtermin" + "CLIENT_REQUIREMENT": "Kundenanforderung" } }, "COMMENTS": { "DELETED_INFO": "Kommentar gelöscht von {{user}}", - "TITLE": "Kommentare", "COMMENTS_COUNT": "{{comments}} Kommentare", - "ORDER": "Reihenfolge", "OLDER_FIRST": "Ältere zuerst", "RECENT_FIRST": "Letzte zuerst", "COMMENT": "Kommentieren", - "EDIT_COMMENT": "Kommentar bearbeiten", "EDITED_COMMENT": "Bearbeitet:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Geben Sie hier einen neuen Kommentar ein", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Aktivitäten zeigen", - "DATETIME": "DD. MMM YYYY HH:mm", - "SHOW_MORE": "+ Vorherige Einträge zeigen ({{showMore}} vorhanden)", "TITLE": "Aktivität", "ACTIVITIES_COUNT": "{{activities}} Aktivitäten", - "REMOVED": "entfernt", - "ADDED": "hinzugefügt", "TAGS_ADDED": "Tags hinzugefügt:", "TAGS_REMOVED": "Tags entfernt:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "Anhang aktualisiert ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "benutzerdefiniertes Attribut erstellt", "UPDATED_CUSTOM_ATTRIBUTE": "benutzerdefiniertes Attribut aktualisiert", - "SIZE_CHANGE": "Machte {size, plural, one{eine Änderung} other{# Änderungen}}", "BECAME_DEPRECATED": "ist veraltet", "BECAME_UNDEPRECATED": "ist wieder aktuell", "TEAM_REQUIREMENT": "Team Anforderung", "CLIENT_REQUIREMENT": "Kundenanforderung", "BLOCKED": "Blockiert", "VALUES": { - "YES": "ja", - "NO": "nein", - "EMPTY": "leer", "UNASSIGNED": "nicht zugeordnet" }, "FIELDS": { "SUBJECT": "Thema", - "NAME": "Name", "DESCRIPTION": "Beschreibung", - "CONTENT": "Inhalt", "STATUS": "Status", - "IS_CLOSED": "ist geschlossen", - "FINISH_DATE": "Endtermin", "TYPE": "Typen", - "PRIORITY": "Priorität", - "SEVERITY": "Gewichtung", "ASSIGNED_TO": "zugewiesen an", - "WATCHERS": "Beobachter", "MILESTONE": "Sprint", - "USER_STORY": "User-Story", - "PROJECT": "Projekt", - "IS_BLOCKED": "wird blockiert", - "BLOCKED_NOTE": "Blockierungsgrund", - "POINTS": "Punkte", - "CLIENT_REQUIREMENT": "Kunden Anforderung", - "TEAM_REQUIREMENT": "Team Anforderung", - "IS_IOCAINE": "ist Iocaine", - "TAGS": "Schlagwörter", - "ATTACHMENTS": "Anhänge", - "IS_DEPRECATED": "ist veraltet", - "IS_NOT_DEPRECATED": "ist nicht verworfen", - "ORDER": "Befehl", - "BACKLOG_ORDER": "Backlog Befehl", - "SPRINT_ORDER": "Sprint Befehl", - "KANBAN_ORDER": "Kanban Befehl", - "TASKBOARD_ORDER": "Taskboard Befehl", - "US_ORDER": "User-Story Befehl", "COLOR": "Farbe" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Stelle Points und Sprints über das Adminpanel ein", "MOVE_US_TO_CURRENT_SPRINT": "Zum aktuellen Sprint wechseln", "MOVE_US_TO_LATEST_SPRINT": "Zum aktuellen Sprint wechseln.", - "SHOW_FILTERS": "Filter zeigen", - "SHOW_TAGS": "Tags anzeigen", "EMPTY": "Das Backlog ist leer!", "CREATE_NEW_US": "Eine neue User-Story anlegen", "CREATE_NEW_US_EMPTY_HELP": "Sie sollten eine User-Story anlegen", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Filter sichtbar schalten", - "TITLE": "Filter", - "REMOVE": "Filter entfernen", "HIDE": "Filter verbergen", "SHOW": "Filter anzeigen" }, @@ -1402,7 +1266,6 @@ "DATE": "DD. MMM YYYY", "LINK_TASKBOARD": "Sprint Taskboard", "TITLE_LINK_TASKBOARD": "Gehe zu Taskboard von \"{{name}}\"", - "NUMBER_SPRINTS": "
    Sprints", "EMPTY": "Derzeit sind keine Sprints vorhanden", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Dieser Sprint enthält keiner User Stories", "WARNING_EMPTY_SPRINT": "Ziehe Stories aus deinem Backlog hierher, um einen neuen Sprint zu starten", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Neue Aufgabe hinzufügen", "TITLE_ACTION_ADD_BULK": "Mehrere Aufgaben hinzufügen", "TITLE_ACTION_ASSIGN": "Aufgabe zuweisen", - "TITLE_ACTION_EDIT": "Aufgabe bearbeiten", "PLACEHOLDER_CARD_TITLE": "Das könnte ein Task sein", "PLACEHOLDER_CARD_TEXT": "Teile Stories in Tasks auf um sie einzeln zu verfolgen", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Status Bezeichnung", "OWNER_US": "Diese Aufgabe gehört zu", "TITLE_LINK_GO_OWNER": "Zur User-Story wechseln", - "ORIGIN_US": "Diese Aufgabe wurde erstellt durch", - "TITLE_LINK_GO_ORIGIN": "Zu User-Story wechseln", - "BLOCKED": "Diese Aufgabe wird blockiert", "TITLE_DELETE_ACTION": "Aufgabe löschen", "LIGHTBOX_TITLE_BLOKING_TASK": "Blockierende Aufgabe", "FIELDS": { - "MILESTONE": "Sprint", - "USER_STORY": "User-Story", "IS_IOCAINE": "Ist Iocaine" }, - "ACTION_IOCAINE": "Locaine", "TITLE_ACTION_IOCAINE": "Fühlen Sie sich von einer Aufgabe etwas erdrückt? Stellen Sie sicher, dass andere davon erfahren, indem Sie auf Locaine klicken, wenn Sie eine Aufgabe ändern. Es ist möglich, gegen dieses (fiktive) tödliche Gift immun zu werden, indem man kleine Mengen über einen Zeitraum hinweg einnimmt. Genauso, wie es möglich ist, besser in dem zu werden, was man tut, indem man gelegentlich zusätzliche Herausforderungen annimmt!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Tickets - {{projectName}}", "PAGE_DESCRIPTION": "Das Ticket-Listen Panel des Projekts {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Tickets", "SECTION_NAME": "Ticket", "ACTION_NEW_ISSUE": "+ NEUES TICKET", "ACTION_PROMOTE_TO_US": "Zur User-Story aufwerten", "PROMOTED": "Dieses Ticket wurde aufgewertet zu User-Story:", "EXTERNAL_REFERENCE": "Dieses Ticket wurde erstellt durch", "GO_TO_EXTERNAL_REFERENCE": "Zur Quelle wechseln", - "BLOCKED": "Dieses Ticket wird blockiert", "ACTION_DELETE": "Ticket löschen", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Blockierendes Ticket", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Seite einklappen", "TITLE_ACTION_UNFOLD": "Spalte aufklappen", - "TITLE_ACTION_FOLD_CARDS": "Karten einklappen", - "TITLE_ACTION_UNFOLD_CARDS": "Karten aufklappen", "TITLE_ACTION_ADD_US": "Neue User-Story hinzufügen", "TITLE_ACTION_ADD_BULK": "Neue Menge hinzufügen", "ACTION_SHOW_ARCHIVED": "Archivierte anzeigen", "ACTION_HIDE_ARCHIVED": "Archivierte verbergen", "HIDDEN_USER_STORIES": "Die User-Stories in diesem Status werden automatisch verborgen", - "ARCHIVED": "Sie haben es archiviert", - "UNDO_ARCHIVED": "Wiederholen Sie Drag & Drop zum Rückgängigmachen", "PLACEHOLDER_CARD_TITLE": "Dies sind deine User Stories", "PLACEHOLDER_CARD_TEXT": "Stories können Unteraufgaben für weitere Anforderungen haben" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Team - {{projectName}}", "PAGE_DESCRIPTION": "Das Team Panel, um alle Mitglieder des Projekts anzuzeigen {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Team", - "APP_TITLE": "TEAM - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Unter Anzeigenamen suchen...", "COLUMN_MR_WOLF": "Herr Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Geschlossene Tickets", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Alle", "OPTION_INVOLVED": "Beteiligt", "OPTION_NONE": "Keine" - }, - "POPOVER": { - "USER_PROFILE": "Benutzerprofil", - "CHANGE_PASSWORD": "Passwort ändern", - "NOTIFICATIONS": "Benachrichtigungen", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "Benutzereinstellungen" } }, "USER_PROFILE": { - "IMAGE_HELP": "The image will be scaled to 80x80px.", - "ACTION_CHANGE_IMAGE": "Ändern", "ACTION_USE_GRAVATAR": "Use default image", "ACTION_DELETE_ACCOUNT": "Ihr Taiga Benutzerkonto löschen", "CHANGE_EMAIL_SUCCESS": "Sehen Sie in Ihren Posteingang!
    Wir haben eine E-Mail an Ihr Konto gesendet
    mit der Anleitung, wie Sie Ihre neue Adresse anlegen", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Letzte Bearbeitung am {{lastModifiedDate}} ({{totalEditions}} Gesamtzahl der Bearbeitungen) Inhalt: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Schreiben Sie Ihre Wiki Seite", "REMOVE": "Diese Wiki Seite entfernen", "DELETE_LIGHTBOX_TITLE": "Wiki Seite löschen", "DELETE_LINK_TITLE": "Entferne Wiki Link", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Most liked", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", - "RECRUITING": "Dieses Projekt sucht nach Mitarbeitern", "FEATURED": "Featured Projects", "EMPTY": "There are no projects to show with this search criteria.
    Try again!", "FILTERS": { diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index eb90c5d2..da2ba566 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -624,8 +624,8 @@ "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": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -969,7 +969,7 @@ "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", @@ -978,7 +978,7 @@ "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { "SELECTOR": "Import your Asana project and choose how to manage it", diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index 8beaf47c..c743bb1a 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -4,7 +4,6 @@ "NO": "No", "OR": "o", "LOADING": "Cargando...", - "LOADING_PROJECT": "Cargando proyecto...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Guardar", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "¿Por qué está bloqueada?", "BLOCKED_REASON": "Por favor, explica la razón", "CREATED_BY": "Creada por {{fullDisplayName}}", - "FROM": "de", - "TO": "a", "CLOSE": "cerrar", "GO_HOME": "Llévame a casa", "PLUGINS": "Plugins", - "BETA": "¡Estamos en fase beta!", "ONE_ITEM_LINE": "Un elemento por línea...", "NEW_BULK": "Nueva inserción en bloque", "RELATED_TASKS": "Tareas relacionadas", @@ -148,7 +144,6 @@ "PRIORITY": "Prioridad", "ASSIGNED_TO": "Asignado a", "POINTS": "Puntos", - "BLOCKED_NOTE": "Motivo del bloqueo", "IS_BLOCKED": "está bloqueada", "REF": "Ref", "VOTES": "Votos", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{un observador} other{# observadores}}" }, "VOTE_BUTTON": { - "UPVOTE": "Votar", - "UPVOTED": "Votado", - "DOWNVOTE": "No votar", - "VOTERS": "Votos", "BUTTON_TITLE": "Votar o no este elemento", "COUNTER_TITLE": "{total, plural, one{un voto} other{# votos}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Asunto o referencia", "TITLE_ACTION_FILTER_BUTTON": "busqueda", "TITLE": "Filtros", - "INPUT_SEARCH_PLACEHOLDER": "Asunto o referencia", "TITLE_ACTION_SEARCH": "Buscar", "ACTION_SAVE_CUSTOM_FILTER": "guardar como filtro personalizado", "PLACEHOLDER_FILTER_NAME": "Escribe un nombre para el filtro y pulsa enter", @@ -220,16 +210,10 @@ "CREATED_BY": "Creada por", "CUSTOM_FILTERS": "Filtros personalizados", "EPIC": "Épica" - }, - "CONFIRM_DELETE": { - "TITLE": "Eliminar filtros personalizados", - "MESSAGE": "el filtro personalizado '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Otra persona ha realizado cambios durante tu edición. Comprueba la nueva versión en la pestaña de activiy antes de guardar los cambios.", - "ATTACH_FILE_HELP": "Adjunta ficheros arrastrando y soltándolos sobre el área de texto.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Guarde primero si desea adjuntar archivos arrastrando y soltando en el área de texto anterior.", "MARKDOWN_HELP": "Ayuda de sintaxis Markdown" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Crear enlaces", "DELETE_WIKI_LINKS": "Borrar enlaces" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga es una plataforma de gestión de proyectos orientada a startups y equipos ágiles que buscan una herramienta sencilla, elegante y que les haga disfrutar trabajando." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Cambia tu contraseña - Taiga", - "PAGE_DESCRIPTION": "Indica una nueva contraseña para tu cuenta en Taiga y bueno, es posible que necesites comer un poco más de alimentos ricos en hierro, son buenos para tu cerebro :P", "SECTION_NAME": "Cambiar contraseña", "FIELD_CURRENT_PASSWORD": "Contraseña actual", "PLACEHOLDER_CURRENT_PASSWORD": "Tu contraseña actual (o déjalo vacío si todavía no tienes contraseña)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Nuestros Oompa Loompas no pueden encontrar su invitación.", - "SUCCESS": "¡Acabas de unirte al proyecto! Bienvenido a {{project_name}}", - "ERROR": "Según nuestros Oompa Loompas tú no estás registrado o has escrito mal tu contraseña." + "SUCCESS": "¡Acabas de unirte al proyecto! Bienvenido a {{project_name}}" }, "HOME": { "PAGE_TITLE": "Inicio - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Borrar adjunto...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "el adjunto '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "No hemos podido borrarlo: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "El fichero '{{fileName}}' ({{fileSize}}) es demasiado pesado para nuestros Oompa Loompas, prueba con uno de menos de ({{maxFileSize}}).", - "FIELDS": { - "IS_DEPRECATED": "Está desactualizado" - } + "ERROR_MAX_SIZE_EXCEEDED": "El fichero '{{fileName}}' ({{fileSize}}) es demasiado pesado para nuestros Oompa Loompas, prueba con uno de menos de ({{maxFileSize}})." }, "PAGINATION": { "PREVIOUS": "Anterior", @@ -477,13 +452,10 @@ "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 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 han tenido algunos problemas generando el volcado de datos: {{message}}" + "ERROR_BUSY": "Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos." }, "MODULES": { "TITLE": "Módulos", - "ENABLE": "Activado", - "DISABLE": "Desactivado", "EPICS": "Épicas", "EPICS_DESCRIPTION": "Visualizar y administrar la parte mas estrategica del proyecto.", "BACKLOG": "Backlog", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Perfil de Proyecto - {{projectName}}\n", "PROJECT_DETAILS": "Info del proyecto", "PROJECT_NAME": "Nombre del proyecto", - "PROJECT_SLUG": "Slug de proyecto", "TAGS": "Etiquetas", "DESCRIPTION": "Descripción", "RECRUITING": "¿Este proyecto está buscando a gente?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Proyecto privado", "PRIVATE_OR_PUBLIC": "¿Cuál es la diferencia entre proyecto público y privado?", "DELETE": "Eliminar este proyecto", - "LOGO_HELP": "La imagen se escalará a 80x80px.", "CHANGE_LOGO": "Cambia el logo", "ACTION_USE_DEFAULT_LOGO": "Usar imagen por defecto", "MAX_PRIVATE_PROJECTS": "Has alcanzado el número máximo de proyectos privados permitidos por su actual plan", @@ -653,8 +623,8 @@ "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", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Los Webhooks notificarán a servicios externos sobre todos los eventos que ocurren en Taiga como comentarios, historias de usuario...", "ADD_NEW": "Añadir un Nuevo Webhook", "TYPE_NAME": "Escribe el nombre del servicio", "TYPE_PAYLOAD_URL": "Escribe la 'payload URL' del servicio", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Borrar miembro", "RESEND": "Enviar de nuevo", "SUCCESS_SEND_INVITATION": "Hemos enviado nuevamente la invitación a '{{email}}'.", - "ERROR_SEND_INVITATION": "No hemos enviado la invitación.", "SUCCESS_DELETE": "Hemos eliminado {{message}}.", "ERROR_DELETE": "No se ha podido eliminar {{message}}. ", "DEFAULT_DELETE_MESSAGE": "la invitación enviada a" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Escribe un nombre para el nuevo estado" }, "MENU": { - "TITLE": "Admin", "PROJECT": "Proyecto", "ATTRIBUTES": "Atributos", "MEMBERS": "Miembros", "PERMISSIONS": "Permisos", - "INTEGRATIONS": "Integraciones", - "PLUGINS": "Plugins" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Atributos" + "INTEGRATIONS": "Integraciones" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Estados", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Atributos personalizados", "TAGS": "Etiquetas" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Perfil de proyecto" - }, "SUBMENU_ROLES": { "TITLE": "Roles", "ACTION_NEW_ROLE": "+ Nuevo Rol", "TITLE_ACTION_NEW_ROLE": "Añadir nuevo rol" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Servicios" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "¿Te gustaría ser el nuevo project owner?", "PRIVATE": "Privado", @@ -783,15 +740,13 @@ "PRIVATE": "Por favor recuerde que puede ser dueño de maximo {{maxProjects}} proyectos privados. Usted tiene actualmente {{currentProjects}} proyectos privados bajo su poder", "PUBLIC": "Pro favor recuerde que solo puede ser dueño de maximo {{maxProjects}} proyectos publicos. Actualmente tiene {{currentProjects}} proyectos publicos bajo su poder" }, - "CANT_BE_OWNED": "en el momento no puede ser el dueño de un proyecto de este tipo. Si desea ser el dueño de este proyecto, por favor contacte al administrador para cambiar la configuracion que le permita ser dueño del proyecto", - "CHANGE_MY_PLAN": "Cambiar mi plan" + "CANT_BE_OWNED": "en el momento no puede ser el dueño de un proyecto de este tipo. Si desea ser el dueño de este proyecto, por favor contacte al administrador para cambiar la configuracion que le permita ser dueño del proyecto" } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Editar perfil", - "FOLLOW": "Seguir", "CLOSED_US": "Historias cerradas", "PROJECTS": "Proyectos", "PROJECTS_EMPTY": "{{username}} no tiene proyectos todavía", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} no tiene contactos todavía", "CURRENT_USER_CONTACTS_EMPTY": "No tienes contactos todavía", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Las personas con las que trabajas en Taiga serán tus contactos automáticamente", - "REPORT": "Reportar Abuso", "TABS": { "ACTIVITY_TAB": "Timeline", "ACTIVITY_TAB_TITLE": "Muestra toda la actividad de este usuario", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Todas", "FILTER_TYPE_ALL_TITLE": "Mostrar todos", "FILTER_TYPE_PROJECTS": "Proyectos", - "FILTER_TYPE_PROJECT_TITLES": "Mostrar sólo proyectos", + "FILTER_TYPE_PROJECTS_TITLE": "Mostrar sólo proyectos", "FILTER_TYPE_EPICS": "Épicas", - "FILTER_TYPE_EPIC_TITLES": "Mostrar sólo épicas", + "FILTER_TYPE_EPICS_TITLE": "Mostrar sólo épicas", "FILTER_TYPE_USER_STORIES": "Historias", - "FILTER_TYPE_USER_STORIES_TITLES": "Mostrar sólo historias de usuario", + "FILTER_TYPE_USER_STORIES_TITLE": "Mostrar sólo historias de usuario", "FILTER_TYPE_TASKS": "Tareas", - "FILTER_TYPE_TASK_TITLES": "Mostrar sólo tareas", + "FILTER_TYPE_TASKS_TITLE": "Mostrar sólo tareas", "FILTER_TYPE_ISSUES": "Peticiones", "FILTER_TYPE_ISSUES_TITLE": "Mostrar sólo peticiones", "EMPTY_TITLE": "Parece que no se ha encontrado nada." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Bienvenido", - "SECTION_PROJECTS": "Proyectos", "HELP": "Reordena tus proyectos para ver arriba los que más utilizas.
    Los 10 primeros aparecerán en la lista de proyectos de la barra de navegación de arriba.", "PRIVATE": "Proyecto privado", "LOOKING_FOR_PEOPLE": "Este proyecto está buscando a gente", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Este proyecto esta temporalmente bloqueado", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Para desbloquear sus proyectos, contacte al administrador." }, - "STATS": { - "PROJECT": "puntos
    proyecto", - "DEFINED": "puntos
    definidos", - "ASSIGNED": "puntos
    asignados", - "CLOSED": "puntos
    cerrados" - }, "SECTION": { "SEARCH": "Buscar", "TIMELINE": "Timeline", @@ -870,13 +816,9 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Tus proyectos", - "PLACEHOLDER_SEARCH": "Buscar en...", "ACTION_CREATE_PROJECT": "Crear proyecto", "MANAGE_PROJECTS": "Administrar proyectos", "TITLE_CREATE_PROJECT": "Crear proyecto", - "TITLE_PRVIOUS_PROJECT": "Mostrar proyectos anteriores", - "TITLE_NEXT_PROJECT": "Mostrar siguientes proyectos", "HELP_TITLE": "Página de Soporte de Taiga", "HELP": "Ayuda", "HOMEPAGE": "Página de inicio", @@ -884,10 +826,6 @@ "FEEDBACK": "Feedback", "NOTIFICATIONS_TITLE": "Edita la configuración de tus notificaciones", "NOTIFICATIONS": "Notificaciones", - "ORGANIZATIONS_TITLE": "Edita tus organizaciónes", - "ORGANIZATIONS": "Editar organizaciones", - "SETTINGS_TITLE": "Editar tus configuraciones", - "SETTINGS": "Configuraciones", "VIEW_PROFILE_TITLE": "Ver perfil", "VIEW_PROFILE": "Ver perfil", "EDIT_PROFILE_TITLE": "Editar tu perfil", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Cambiar contraseña", "DASHBOARD_TITLE": "Dashboard", "DISCOVER_TITLE": "Descubre los proyectos más relevantes", - "NEW_ITEM": "Nueva", - "DISCOVER": "Descubrir", - "ACTION_REORDER": "Arrastrar y soltar para reordenar" + "DISCOVER": "Descubrir" }, "LIKE_BUTTON": { "LIKE": "Me gusta", @@ -927,27 +863,25 @@ }, "CREATE": { "TITLE": "Crear Proyecto", - "FRESH": "Fresco y claro. ¡Es emocionante!", "CHOOSE_TEMPLATE": "¿Que plantilla se ajusta mejor con tu proyecto?", "TEMPLATE_SCRUM": "Scrum", - "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", - "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", + "TEMPLATE_SCRUM_DESC": "Prioriza y soluciona tus tareas en ciclos cortos de tiempo.", + "TEMPLATE_SCRUM_LONGDESC": "Scrum es una metodología ágil, iterativa e incremental, de desarrollo de software para la gestión del desarrollo de productos.\nEl backlog de producto es lo que finalmente será entregado, ordenado en el orden que debe ser entregado. El product backlog se divide en trozos manejables y ejecutables llamados sprints. Cada cierto tiempo el equipo inicia un nuevo sprint y se compromete a entregar un número de user stories del backlog, de acuerdo a la capacidad, habilidades y recursos. El proyecto avanza hasta que el backlog se vacía.", "TEMPLATE_KANBAN": "Kanban", - "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", - "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", + "TEMPLATE_KANBAN_DESC": "Mantén un flujo constante de tareas independientes", + "TEMPLATE_KANBAN_LONGDESC": "La metodología Kanban se usa para dividir el proceso de desarrollo (o cualquier tipo de proyecto) en etapas. Una tarjeta de Kanban es como una ficha o un post-it que detalla cada tarea (o user story) en un proyecto para ser completada. El tablero de Kanban se usa para mover cada tarjeta de un estado de progreso al siguiente, y de este modo ayuda a trazar el progreso.", "DUPLICATE": "Duplicar proyecto", - "DUPLICATE_DESC": "Start clean and keep your configuration", + "DUPLICATE_DESC": "Empieza un nuevo proyecto manteniendo tu configuración", "IMPORT": "Importar proyecto", - "IMPORT_DESC": "Import your project from multiple platforms into Taiga", + "IMPORT_DESC": "Importa tu proyecto desde múltiples plataformas a Taiga", "INVITE": "Invitar al proyecto", "SOLO_PROJECT": "Estarás solo en este proyecto", - "INVITE_LATER": "(You'll be able to invite more members later)", + "INVITE_LATER": "(Podrás invitar otros miembros más adelante)", "BACK": "Back", "MAX_PRIVATE_PROJECTS": "l", - "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PUBLIC_PROJECTS": "Desafortunadamente, has alcanzado el número máximo de proyectos públicos.\nSi desea aumentar este limite, por favor contacte al administrador.", "PUBLIC_PROJECT": "Proyecto público", - "PRIVATE_PROJECT": "Proyecto privado", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Proyecto privado" }, "COMMON": { "DETAILS": "Nuevos detalles del proyecto", @@ -956,21 +890,12 @@ }, "DUPLICATE": { "TITLE": "Duplicar Proyecto", - "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Elije uno de tus proyectos para duplicar", - "DETAILS": "Nuevos detalles del proyecto", - "CREATE_PROJECT_TEXT": "Fresco y claro. ¡Es emocionante!", - "CHOOSE_TEMPLATE_TITLE": "Mas informacion acerca de la plantillas del proyecto", - "CHOOSE_TEMPLATE_INFO": "Mas información", - "PROJECT_DETAILS": "Detalles del proyecto", - "PUBLIC_PROJECT": "Proyecto público", - "PRIVATE_PROJECT": "Proyecto privado", - "CREATE_PROJECT": "Crear proyecto", - "CHANGE_PLANS": "cambiar planes" + "DESCRIPTION": "Empieza un nuevo proyecto manteniendo tu configuración", + "SELECT_PLACEHOLDER": "Elije uno de tus proyectos para duplicar" }, "IMPORT": { "TITLE": "Importar Proyecto", - "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "DESCRIPTION": "Importa tu proyecto desde múltiples plataformas a Taiga", "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}}", @@ -980,31 +905,28 @@ "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.", "IMPORT": "Importar", - "ARCHIVED": "Archivada", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", - "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", - "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Escribe el email que utiliza en Taiga", - "EMAIL_NOT_FOUND": "No hemos encontrado ningún usuario con este email ", + "WHO_IS": "Sus tareas serán asignadas a...", + "WRITE_EMAIL": "O si tu quieres, escribe el email que este usuario usa en Taiga", + "SEARCH_CONTACT": "O si quieres, busca en tus contactos", + "WRITE_EMAIL_LABEL": "Escribe el email que este usuario usa en Taiga", "ACCEEDE": "Acceder", "PROJECT_MEMBERS": "Miembros del proyecto", - "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", - "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", + "PROCESS_DESCRIPTION": "Dinos a que usuario de Taiga le quieres asignar las tareas de {{platform}}", + "MATCH": "¿{{user_external}} y {{user_internal}} son la misma persona?", "CHOOSE": "Selecciona un usuario", "LINKS": "Enlaces con {{platform}}", - "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", - "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", + "LINKS_DESCRIPTION": "¿Quieres mantener el enlace de cada elemento con la tarjeta original en {{platform}}?", + "WARNING_MAIL_USER": "Tenga en cuenta que si el usuario no tienen cuenta en Taiga no podremos asignarle las tareas.", "ASSIGN": "Asignar", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", + "NO_RESULTS": "Parece que no se encontro nada con este criterio de busqueda", + "ACTION_SEARCH": "buscar", "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { - "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", - "PROJECT_MEMBERS_DESC_PUBLIC": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.", - "ACCOUNT_ALLOW_MEMBERS": "Your account only allows {{members}} members", + "PROJECT_MEMBERS_DESC_PRIVATE": "El proyecto que estas tratando de importar tiene {{members}} miembros incluyéndote a ti, desafortunadamente tu plan actual permite como máximo {{max_memberships}} miembros por proyecto privado. Si quieres aumentar este limite, por favor contacta al administrador.", + "PROJECT_MEMBERS_DESC_PUBLIC": "El proyecto que estas tratando de importar tiene {{members}} miembros incluyéndote a ti, desafortunadamente tu plan actual permite como máximo {{max_memberships}} miembros por proyecto público. Si quieres aumentar este limite, por favor contacta al administrador.", + "ACCOUNT_ALLOW_MEMBERS": "Tu cuenta sólo permite {{members}} miembros", "PRIVATE_PROJECTS_SPACE": { "TITLE": "Desafortunadamente, su plan actual no permite a los proyectos privados adicionales", "DESC": "El proyecto que trata de importar es privado. Desafortunadamente, su plan actual no le permite adicionar mas proyectos privados" @@ -1033,71 +955,61 @@ "DESCRIPTION": "Este proceso puede tardar un ratito, por favor mantén la ventana abierta." }, "WARNING": { - "TITLE": "Some taks will be unassigned", - "DESCRIPTION": "There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.", + "TITLE": "Algunas tareas estarán sin asignar", + "DESCRIPTION": "Todavía hay gente sin identificar. Las tarjetas asignadas a estas personas se quedarán sin asignar. Revisa todos los contactos para que no se pierda esta información.", "CHECK": "Verificar contactos" }, "TAIGA": { - "SELECTOR": "Import your Taiga project" + "SELECTOR": "Importa tu proyecto de Taiga" }, "TRELLO": { - "TITLE": "Trello", - "SELECTOR": "Import your Trello boards into Taiga", - "CHOOSE_PROJECT": "Choose board that you want to import", - "NO_PROJECTS": "It seems you have no boards in Trello" + "SELECTOR": "Importa tus tableros de Trello en Taiga", + "CHOOSE_PROJECT": "Elige el tablero que quieres importar", + "NO_PROJECTS": "Parece que no tienes tableros en Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", - "CHOOSE_PROJECT": "Find the project you want to import", - "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Miembros del proyecto", - "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", - "KANBAN_PROJECT": "As user stories in a kanban project", + "SELECTOR": "Importa tus peticiones de proyecto de GitHub", + "CHOOSE_PROJECT": "Encuentra el proyecto que quieres importar", + "NO_PROJECTS": "Parece que no tienes proyectos en GitHub", + "HOW_DO_YOU_WANT_TO_IMPORT": "¿Cómo quieres importar las peticiones en Taiga?", + "KANBAN_PROJECT": "Como historias de usuario en un proyecto kanban", "KANBAN_PROJECT_DESCRIPTION": "ll", - "SCRUM_PROJECT": "As user stories in a scrum project", - "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", - "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "SCRUM_PROJECT": "Como historias de usuario en un proyecto scrum", + "SCRUM_PROJECT_DESCRIPTION": "Después de esto podrás activar el modo kanban", + "ISSUES_PROJECT": "Como petición ", + "ISSUES_PROJECT_DESCRIPTION": "No podrás usar tus peticiones en el modo kanban o scrum. Podrás activar el kanban o scrum para las nuevas historias de usuario" }, "ASANA": { - "TITLE": "Asana", - "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_PROJECT": "Choose project that you want to import", - "NO_PROJECTS": "It seems you have no porjects in Asana", + "SELECTOR": "Importa tu proyecto de Asana y elije cómo gestionarlo", + "CHOOSE_PROJECT": "Elige el proyecto que quieres importar", + "NO_PROJECTS": "Parece que no tienes proyectos en Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", - "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Miembros del proyecto" + "CREATE_AS_SCRUM_DESCRIPTION": "Las tareas y sub-tareas de tu proyecto se crearán como historias de usuario y tareas en Taiga.", + "CREATE_AS_KANBAN_DESCRIPTION": "Las tareas y sub-tareas de tu proyecto se crearán como historias de usuario y tareas en Taiga." }, "JIRA": { - "TITLE": "Jira", - "SELECTOR": "Import your Jira project and choose how to manage it", - "CHOOSE_PROJECT": "Choose project or board that you want to import", - "NO_PROJECTS": "It seems you have no porjects or boards in Jira", + "SELECTOR": "Importa tu proyecto de Jira y elije cómo gestionarlo", + "CHOOSE_PROJECT": "Elige el proyecto o panel que quieres importar", + "NO_PROJECTS": "Parece que no tienes proyectos o paneles en Jira", "URL": "Tu URL de Jira", - "PROJECT_MEMBERS": "Miembros del proyecto", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Peticiones", - "CREATE_AS_SCRUM_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The issues and sub-issues of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_ISSUES_DESCRIPTION": "What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)", - "CREATE_NEW_ISSUES": "Convert sub-issues to new Taiga issues", - "NOT_CREATE_NEW_ISSUES": "Do not import sub-issues" + "CREATE_AS_SCRUM_DESCRIPTION": "Las peticiones y sub-peticiones de tu proyecto se crearán como historias de usuario y tareas en Taiga.", + "CREATE_AS_KANBAN_DESCRIPTION": "Las peticiones y sub-peticiones de tu proyecto se crearán como historias de usuario y tareas en Taiga.", + "CREATE_AS_ISSUES_DESCRIPTION": "¿Qué quieres hacer con las sub-peticiones del proyecto de Jira? (Taiga no posee sub-peticiones)", + "CREATE_NEW_ISSUES": "Convertir sub-peticiones como nuevas peticiones de Taiga", + "NOT_CREATE_NEW_ISSUES": "No importar sub-peticiones" } } }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Eliminar cuenta de Taiga", "CONFIRM": "¿Está seguro que deseas eliminar tu cuenta de Taiga?", - "NEWSLETTER_LABEL_TEXT": "No quiero recibir la newsletter nunca más.", "CANCEL": "Volver a los ajustes", "ACCEPT": "Eliminar cuenta", - "BLOCK_PROJECT": "Recuerde que todos los proyectos de los cuales usted es dueño seran bloqueados despues de eliminar su cuenta. si desea mantener un proyecto bloqueado, transfiera el dominio a otro usuario en cada proyecto antes de eliminar la cuenta.", - "SUBTITLE": "Sentimos mucho verte ir. Estaremos aquí por si alguna vez nos consideras de nuevo! :(" + "BLOCK_PROJECT": "Recuerde que todos los proyectos de los cuales usted es dueño seran bloqueados despues de eliminar su cuenta. si desea mantener un proyecto bloqueado, transfiera el dominio a otro usuario en cada proyecto antes de eliminar la cuenta." }, "DELETE_PROJECT": { "TITLE": "Borrar proyecto", @@ -1217,15 +1129,9 @@ "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", - "GO_TO_EXTERNAL_REFERENCE": "Ir al origen", - "BLOCKED": "Esta historia de usuario está bloqueada", "TITLE_DELETE_ACTION": "Borrar Historia de Usuario", "LIGHTBOX_TITLE_BLOKING_US": "Historia bloqueada", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} tareas completadas", - "ASSIGN": "Asignar Historia de Usuario", "NOT_ESTIMATED": "No estimada", - "TOTAL_US_POINTS": "Total puntos de historia", "TRIBE": { "PUBLISH": "Publicar como Gig en la Tribu Taiga", "PUBLISH_INFO": "Mas información", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Requerido por el Equipo", - "CLIENT_REQUIREMENT": "Requerido por el Cliente", - "FINISH_DATE": "Fecha de finalización" + "CLIENT_REQUIREMENT": "Requerido por el Cliente" } }, "COMMENTS": { "DELETED_INFO": "Comentario borrado por {{user}}", - "TITLE": "Comentarios", "COMMENTS_COUNT": "{{comments}} Comentarios", - "ORDER": "Orden", "OLDER_FIRST": "Mas antiguo primero", "RECENT_FIRST": "Mas reciente primero", "COMMENT": "Comentar", - "EDIT_COMMENT": "Editar comentario", "EDITED_COMMENT": "Editado:", "SHOW_HISTORY": "Ver histórico", "TYPE_NEW_COMMENT": "Escribe un nuevo comentario aquí", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Mostrar actividad", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Ver entradas anteriores ({{showMore}} más)", "TITLE": "Actividad", "ACTIVITIES_COUNT": "{{activities}} Actividades", - "REMOVED": "borrado", - "ADDED": "agregado", "TAGS_ADDED": "etiquetas añadidas", "TAGS_REMOVED": "Etiquetas borradas:", "US_POINTS": "{{role}} puntos", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "actualizar adjunto ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "atributo personalizado creado", "UPDATED_CUSTOM_ATTRIBUTE": "atributo personalizado actualizado", - "SIZE_CHANGE": "{size, plural, one{Un cambio realizado} other{# cambios realizados}}", "BECAME_DEPRECATED": "esta obsoleto", "BECAME_UNDEPRECATED": "no esta obsoleto", "TEAM_REQUIREMENT": "Requerido por el Equipo", "CLIENT_REQUIREMENT": "Requerido por el Cliente", "BLOCKED": "Bloqueada", "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", - "IS_NOT_DEPRECATED": "No es obsoleto", - "ORDER": "orden", - "BACKLOG_ORDER": "orden en backlog", - "SPRINT_ORDER": "orden en sprint", - "KANBAN_ORDER": "orden en kanban", - "TASKBOARD_ORDER": "orden en panel de tareas", - "US_ORDER": "orden en historia", "COLOR": "color" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Modifica los puntos y sprints a través de la zona de Administración", "MOVE_US_TO_CURRENT_SPRINT": "Mover al Sprint en curso", "MOVE_US_TO_LATEST_SPRINT": "Mover al Sprint más reciente", - "SHOW_FILTERS": "Mostrar filtros", - "SHOW_TAGS": "Ver etiquetas", "EMPTY": "¡El backlog está vacío!", "CREATE_NEW_US": "Crear una nueva historia", "CREATE_NEW_US_EMPTY_HELP": "Es posible que desees crear una nueva historia de usuario", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Cambia la visibilidad de los filtros", - "TITLE": "Filtros", - "REMOVE": "Borrar Filtros", "HIDE": "Ocultar filtros", "SHOW": "Ver Filtros" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Panel de Tareas del Sprint", "TITLE_LINK_TASKBOARD": "Ir al panel de tareas de \"{{name}}\"", - "NUMBER_SPRINTS": "
    sprints", "EMPTY": "Todavía no hay Sprints", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Este sprint no tiene historias de usuario", "WARNING_EMPTY_SPRINT": "Arrastra aquí las historias desde tu backlog para comenzar un nuevo sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Añade una nueva tarea", "TITLE_ACTION_ADD_BULK": "Añadir nuevas tareas en bloque", "TITLE_ACTION_ASSIGN": "Asignar tarea", - "TITLE_ACTION_EDIT": "Editar tarea", "PLACEHOLDER_CARD_TITLE": "Esto podría ser una tarea", "PLACEHOLDER_CARD_TEXT": "Divide las historias en tareas para controlarlas de manera separada", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Nombre del estado", "OWNER_US": "Esta tarea pertenece a\n", "TITLE_LINK_GO_OWNER": "Ir a historia de usuario", - "ORIGIN_US": "Esta tarea pertenece a ", - "TITLE_LINK_GO_ORIGIN": "Ir a historia de usuario", - "BLOCKED": "Esta tarea está bloqueada", "TITLE_DELETE_ACTION": "Eliminar Tarea", "LIGHTBOX_TITLE_BLOKING_TASK": "Tarea bloqueada", "FIELDS": { - "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": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Peticiones - {{projectName}}", "PAGE_DESCRIPTION": "El panel de peticiones del proyecto {{projectName}}: {{projectDescription}}\n", - "LIST_SECTION_NAME": "Peticiones", "SECTION_NAME": "Petición", "ACTION_NEW_ISSUE": "+ NUEVA PETICIÓN", "ACTION_PROMOTE_TO_US": "Promover a Historia de Usuario", "PROMOTED": "Esta petición ha sido promovida a la historia:", "EXTERNAL_REFERENCE": "Esta petición ha sido creada a partir de ", "GO_TO_EXTERNAL_REFERENCE": "Ir al origen", - "BLOCKED": "La petición está bloqueada", "ACTION_DELETE": "Borrar petición", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Petición bloqueada", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Plegar columna", "TITLE_ACTION_UNFOLD": "Desplegar columna", - "TITLE_ACTION_FOLD_CARDS": "Plegar tarjetas", - "TITLE_ACTION_UNFOLD_CARDS": "Desplegar tarjetas", "TITLE_ACTION_ADD_US": "Añadir Nueva Historia de Usuario", "TITLE_ACTION_ADD_BULK": "Añadir nuevas en bloque", "ACTION_SHOW_ARCHIVED": "Ver archivados", "ACTION_HIDE_ARCHIVED": "Ocultar archivados", "HIDDEN_USER_STORIES": "Las historias de usuario en este estado están ocultas por defecto", - "ARCHIVED": "Tu has archivado", - "UNDO_ARCHIVED": "Arrástrala y suéltala de nuevo para deshacer el cambio", "PLACEHOLDER_CARD_TITLE": "Estas son tus Historias de Usuario", "PLACEHOLDER_CARD_TEXT": "Las historias pueden tener tareas para separar los requerimientos" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Equipo - {{projectName}}", "PAGE_DESCRIPTION": "EL panel de equipo, para mostrar a todos los miembros del proyecto {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Equipo", - "APP_TITLE": "EQUIPO - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Buscar por nombre completo...", "COLUMN_MR_WOLF": "Sr. Lobo", "EXPLANATION_COLUMN_MR_WOLF": "Peticiones cerradas", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Todas", "OPTION_INVOLVED": "Involucrado", "OPTION_NONE": "Ninguna" - }, - "POPOVER": { - "USER_PROFILE": "Perfil de Usuario", - "CHANGE_PASSWORD": "Cambiar contraseña", - "NOTIFICATIONS": "Notificaciones", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "Preferencias de usuario" } }, "USER_PROFILE": { - "IMAGE_HELP": "La imagen se escalará a 80x80px.", - "ACTION_CHANGE_IMAGE": "Cambiar", "ACTION_USE_GRAVATAR": "Usar imagen por defecto", "ACTION_DELETE_ACCOUNT": "Elimina cuenta de Taiga", "CHANGE_EMAIL_SUCCESS": "¡Revisa tu bandeja de entrada!
    Hemos enviado un mail a tu cuenta
    con instrucciones para establecer tu nueva dirección", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "última edición el {{lastModifiedDate}} ({{totalEditions}} ediciones en total) Contenido: {{ wikiPageContent }}", "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", "DELETE_LINK_TITLE": "Eliminar enlace de la Wiki", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Favoritos", "MOST_LIKED_EMPTY": "No hay proyectos marcados como FAVORITOS todavía.", "VIEW_MORE": "Ver más", - "RECRUITING": "Este proyecto está buscando a gente", "FEATURED": "Proyectos Destacados", "EMPTY": "No hay proyectos que mostrar para estos criterios de búsqueda.
    ¡Inténtalo de nuevo!", "FILTERS": { diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 64f44b1e..198a3704 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -4,7 +4,6 @@ "NO": "Ei", "OR": "or", "LOADING": "Ladataan...", - "LOADING_PROJECT": "Ladataan projektia...", "DATE": "DD.MM.YY", "DATETIME": "DD.MM.YY - HH:mm", "SAVE": "Tallenna", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Why is this blocked?", "BLOCKED_REASON": "Ole hyvä ja anna syy", "CREATED_BY": "Luonut {{fullDisplayName}}", - "FROM": "käyttäjältä", - "TO": "käyttäjälle", "CLOSE": "sulje", "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", @@ -148,7 +144,6 @@ "PRIORITY": "Tärkeys", "ASSIGNED_TO": "Tekijä", "POINTS": "Pisteet", - "BLOCKED_NOTE": "estetty muistiinpano", "IS_BLOCKED": "on estetty", "REF": "Ref", "VOTES": "Ääniä", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{one watcher} other{# watchers}}" }, "VOTE_BUTTON": { - "UPVOTE": "Upvote", - "UPVOTED": "Upvoted", - "DOWNVOTE": "Downvote", - "VOTERS": "Voters", "BUTTON_TITLE": "Upvote/Downvote this item", "COUNTER_TITLE": "{total, plural, one{one vote} other{# votes}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Aihe tai viittaus", "TITLE_ACTION_FILTER_BUTTON": "hae", "TITLE": "Suodattimet", - "INPUT_SEARCH_PLACEHOLDER": "Otsikko tai viittaus", "TITLE_ACTION_SEARCH": "Hae", "ACTION_SAVE_CUSTOM_FILTER": "tallenna omaksi suodattimeksi", "PLACEHOLDER_FILTER_NAME": "Anna suodattimen nimi ja paina enter", @@ -220,16 +210,10 @@ "CREATED_BY": "Luoja", "CUSTOM_FILTERS": "Omat suodattimet", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Poista oma suodatin", - "MESSAGE": "oma suodatin '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Merkintätavan ohjeet" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Lisää wiki-linkkejä", "DELETE_WIKI_LINKS": "Poista wiki-linkkejä" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga is a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Change you password - Taiga", - "PAGE_DESCRIPTION": "Set a new password for your Taiga account and hey!, you may want to eat some more iron-rich food, it's good for your brain :P", "SECTION_NAME": "Muuta salasanaa", "FIELD_CURRENT_PASSWORD": "Nykyinen salasana", "PLACEHOLDER_CURRENT_PASSWORD": "Nykyinen salasanasi (tai on tyhjä jos sinulla ei vielä ole)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Our Oompa Loompas can't find your invitation.", - "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ä." + "SUCCESS": "Olet onnistuneesti liittynyt projektiin {{project_name}}. Tervetuloa!" }, "HOME": { "PAGE_TITLE": "Home - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Poista liite...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "liite '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Emme pystyneet poistamaan: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "on vanhentunut" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Edellinen", @@ -477,13 +452,10 @@ "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}}" + "ERROR_BUSY": "Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan." }, "MODULES": { "TITLE": "Modulit", - "ENABLE": "Aktivoi", - "DISABLE": "Passivoi", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Odottavat", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Projektin profiili - {{projectName}}", "PROJECT_DETAILS": "Projektin tiedot", "PROJECT_NAME": "Projektin nimi", - "PROJECT_SLUG": "Projektin hukka-aika", "TAGS": "Avainsanat", "DESCRIPTION": "Kuvaus", "RECRUITING": "Is this project looking for people?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Yksityinen projekti", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", "DELETE": "Poista tämä projekti", - "LOGO_HELP": "The image will be scaled to 80x80px.", "CHANGE_LOGO": "Change logo", "ACTION_USE_DEFAULT_LOGO": "Use default image", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Gitlab pyynnöt eivät ole allekirjoitettuja joten tarkista IP. Jos IP on tyhjä, ei sitä tarkisteta." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_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)", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Poista jäsen", "RESEND": "Resend", "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}}" @@ -738,16 +706,11 @@ "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_ATTRIBUTES": { - "TITLE": "Attribuutit" + "INTEGRATIONS": "Intergraatiot" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Tila", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Omat kentät", "TAGS": "Avainsanat" }, - "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_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Private", @@ -783,15 +740,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Edit profile", - "FOLLOW": "Follow", "CLOSED_US": "Closed US", "PROJECTS": "Projektit", "PROJECTS_EMPTY": "{{username}} doesn't' have projects yet", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} doesn't have contacts yet", "CURRENT_USER_CONTACTS_EMPTY": "You don't have contacts yet", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "The people with whom you work at Taiga will be your contacts automatically", - "REPORT": "Report Abuse", "TABS": { "ACTIVITY_TAB": "Timeline", "ACTIVITY_TAB_TITLE": "Show all the activity of this user", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Kaikki", "FILTER_TYPE_ALL_TITLE": "Show all", "FILTER_TYPE_PROJECTS": "Projektit", - "FILTER_TYPE_PROJECT_TITLES": "Show only projects", + "FILTER_TYPE_PROJECTS_TITLE": "Show only projects", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS_TITLE": "Show only epics", "FILTER_TYPE_USER_STORIES": "Stories", - "FILTER_TYPE_USER_STORIES_TITLES": "Show only user stories", + "FILTER_TYPE_USER_STORIES_TITLE": "Show only user stories", "FILTER_TYPE_TASKS": "Tehtävät", - "FILTER_TYPE_TASK_TITLES": "Show only tasks", + "FILTER_TYPE_TASKS_TITLE": "Show only tasks", "FILTER_TYPE_ISSUES": "Pyynnöt", "FILTER_TYPE_ISSUES_TITLE": "Show only issues", "EMPTY_TITLE": "It looks like there's nothing to show here." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Tervetuloa", - "SECTION_PROJECTS": "Projektit", "HELP": "Reorder your projects to set in the top the most used ones.
    The top 10 projects will appear in the top navigation bar project list", "PRIVATE": "Yksityinen projekti", "LOOKING_FOR_PEOPLE": "This project is looking for people", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." }, - "STATS": { - "PROJECT": "projekti
    pisteet", - "DEFINED": "määritely
    pistettä", - "ASSIGNED": "kohdistettu
    pistettä", - "CLOSED": "suljettu
    pistettä" - }, "SECTION": { "SEARCH": "Hae", "TIMELINE": "Timeline", @@ -870,13 +816,9 @@ "ADMIN": "Hallinnoi" }, "NAVIGATION": { - "SECTION_TITLE": "Projektisi", - "PLACEHOLDER_SEARCH": "Hae täältä...", "ACTION_CREATE_PROJECT": "Luo projekti", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Create project", - "TITLE_PRVIOUS_PROJECT": "Näytä aikaisemmat projektit", - "TITLE_NEXT_PROJECT": "Näytä seuraavat projektit", "HELP_TITLE": "Taiga Support Page", "HELP": "Help", "HOMEPAGE": "Homepage", @@ -884,10 +826,6 @@ "FEEDBACK": "Palaute", "NOTIFICATIONS_TITLE": "Edit your notification settings", "NOTIFICATIONS": "Ilmoitukset", - "ORGANIZATIONS_TITLE": "Edit your organizations", - "ORGANIZATIONS": "Edit organizations", - "SETTINGS_TITLE": "Edit your settings", - "SETTINGS": "Settings", "VIEW_PROFILE_TITLE": "View Profile", "VIEW_PROFILE": "View Profile", "EDIT_PROFILE_TITLE": "Edit your profile", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Muuta salasanaa", "DASHBOARD_TITLE": "Dashboard", "DISCOVER_TITLE": "Discover trending projects", - "NEW_ITEM": "Uusi", - "DISCOVER": "Discover", - "ACTION_REORDER": "Drag & drop to reorder" + "DISCOVER": "Discover" }, "LIKE_BUTTON": { "LIKE": "Like", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Luo projekti", - "FRESH": "Täysin koskematon. Jännittävää!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Private Project" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Täysin koskematon. Jännittävää!", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Luo projekti", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})", "SYNC_SUCCESS": "Projektisi on tuotu sisään onnistuneesti", "IMPORT": "Import", - "ARCHIVED": "Arkistoitu", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -998,8 +920,8 @@ "ASSIGN": "Assign", "PROJECT_SELECTOR": { "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "ACTION_SEARCH": "hae", + "ACTION_BACK": "Palvelin" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Pyynnöt", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Poista Taiga-tunnus", "CONFIRM": "Haluatko varmasti poistaa Taiga-tunnuksesi?", - "NEWSLETTER_LABEL_TEXT": "En halua uutiskirjettä enää", "CANCEL": "Back to settings", "ACCEPT": "Delete account", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account." }, "DELETE_PROJECT": { "TITLE": "Poista projekti", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Lisää monta käyttäjätarinaa", "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", "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ä", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "More info", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Tiimin vaatimus", - "CLIENT_REQUIREMENT": "Asiakkaan vaatimus", - "FINISH_DATE": "Loppupvm" + "CLIENT_REQUIREMENT": "Asiakkaan vaatimus" } }, "COMMENTS": { "DELETED_INFO": "Comment deleted by {{user}}", - "TITLE": "Kommentit", "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", "OLDER_FIRST": "Older first", "RECENT_FIRST": "Recent first", "COMMENT": "Kommentti", - "EDIT_COMMENT": "Edit comment", "EDITED_COMMENT": "Edited:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Lisää uusi kommentti tässä", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Näytä tapahtumat", - "DATETIME": "DD.MM.YY - HH:mm", - "SHOW_MORE": "+ Näytä edelliset rivit ({{showMore}} lisää)", "TITLE": "Aktiivisuus", "ACTIVITIES_COUNT": "{{activities}} Activities", - "REMOVED": "poistettu", - "ADDED": "lisätty", "TAGS_ADDED": "tags added:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "Tehty {size, plural, one{muutos} other{# muutosta}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Tiimin vaatimus", "CLIENT_REQUIREMENT": "Asiakkaan vaatimus", "BLOCKED": "Suljettu", "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": "myrkyllinen", - "TAGS": "avainsanat", - "ATTACHMENTS": "liitteet", - "IS_DEPRECATED": "on vanhentunut", - "IS_NOT_DEPRECATED": "is not deprecated", - "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", "COLOR": "väri" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Set up the points and sprints through the Admin", "MOVE_US_TO_CURRENT_SPRINT": "Siirrä nykyiseen kierrokseen", "MOVE_US_TO_LATEST_SPRINT": "Move to latest Sprint", - "SHOW_FILTERS": "Näytä suodattimet", - "SHOW_TAGS": "Näytä avainsanat", "EMPTY": "The backlog is empty!", "CREATE_NEW_US": "Luo uusi Kt", "CREATE_NEW_US_EMPTY_HELP": "Voit haluta lisätä uuden käyttäjätarinan", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Vaihda suodattimien näkyvyyttä", - "TITLE": "Suodattimet", - "REMOVE": "Poista suodattimet", "HIDE": "Piilota suodattimet", "SHOW": "Näytä suodattimet" }, @@ -1402,7 +1266,6 @@ "DATE": "DD.MM.YY", "LINK_TASKBOARD": "Kierroksien tehtävätaulu", "TITLE_LINK_TASKBOARD": "Siirry tehtävätauluun {{name}}", - "NUMBER_SPRINTS": "
    kierroksia", "EMPTY": "There are no sprints yet", "WARNING_EMPTY_SPRINT_ANONYMOUS": "This sprint has no User Stories", "WARNING_EMPTY_SPRINT": "Drop here Stories from your backlog to start a new sprint", @@ -1427,7 +1290,6 @@ "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ää", "PLACEHOLDER_CARD_TITLE": "This could be a task", "PLACEHOLDER_CARD_TEXT": "Split Stories into tasks to track them separately", "TABLE": { @@ -1457,17 +1319,11 @@ "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", "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": "Myrkyllinen" }, - "ACTION_IOCAINE": "Myrkky", "TITLE_ACTION_IOCAINE": "Rasittaako tehtävä? Kerro muillekin klikkaamalla myrkyn kuvaketta. Sattaa myös helpottaa jatkossa jos nautit vähitellen." }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Issues - {{projectName}}", "PAGE_DESCRIPTION": "The issues list panel of the project {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Pyynnöt", "SECTION_NAME": "Issue", "ACTION_NEW_ISSUE": "+ UUSI PYYNTÖ", "ACTION_PROMOTE_TO_US": "Liitä käyttäjätarinaan", "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ä pyyntö on estetty", "ACTION_DELETE": "Poista pyyntö", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Estävä pyyntö", "FIELDS": { @@ -1545,15 +1399,11 @@ "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", "PLACEHOLDER_CARD_TITLE": "These are your User Stories", "PLACEHOLDER_CARD_TEXT": "Stories might also have subtasks to separate requirements" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Team - {{projectName}}", "PAGE_DESCRIPTION": "The team panel to show all the members of the project {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Tiimi", - "APP_TITLE": "TIIMI - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Etsi koko nimellä...", "COLUMN_MR_WOLF": "Mr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Suljetut pyynnöt", @@ -1610,18 +1459,9 @@ "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": "The image will be scaled to 80x80px.", - "ACTION_CHANGE_IMAGE": "Muuta", "ACTION_USE_GRAVATAR": "Use default image", "ACTION_DELETE_ACCOUNT": "Poista Taiga-tunnus", "CHANGE_EMAIL_SUCCESS": "Tarkista sähköpostisi!
    Lähetimme ohjeet
    {{email}}
    uuden osoitteen asettamiseen", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}", "DATETIME": "DD.MM.YY - HH:mm", - "PLACEHOLDER_PAGE": "Kirjoita wiki-sivu", "REMOVE": "Poista tämä wiki-sivu", "DELETE_LIGHTBOX_TITLE": "Poista wiki-sivu", "DELETE_LINK_TITLE": "Delete Wiki link", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Most liked", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", - "RECRUITING": "This project is looking for people", "FEATURED": "Featured Projects", "EMPTY": "There are no projects to show with this search criteria.
    Try again!", "FILTERS": { diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index dadcd5c4..680abfc4 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -4,7 +4,6 @@ "NO": "Non", "OR": "ou", "LOADING": "Veuillez patienter...", - "LOADING_PROJECT": "Chargement du projet...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Enregistrer", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Pourquoi est-ce bloqué ?", "BLOCKED_REASON": "Veuillez s'il vous plait indiquer la raison", "CREATED_BY": "Créé par {{fullDisplayName}}", - "FROM": "de", - "TO": "à", "CLOSE": "clos", "GO_HOME": "Retour à l'accueil", "PLUGINS": "Plugins", - "BETA": "Version beta !", "ONE_ITEM_LINE": "Un élément par ligne...", "NEW_BULK": "Nouvel ajout en bloc", "RELATED_TASKS": "Tâches associées", @@ -148,7 +144,6 @@ "PRIORITY": "Priorité", "ASSIGNED_TO": "Affecté à", "POINTS": "Points", - "BLOCKED_NOTE": "note bloquée", "IS_BLOCKED": "est bloqué", "REF": "Réf.", "VOTES": "Votes", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{un observateur} other{# observateurs}}" }, "VOTE_BUTTON": { - "UPVOTE": "Vote positif", - "UPVOTED": "Voté positivement", - "DOWNVOTE": "Vote négatif", - "VOTERS": "Votants", "BUTTON_TITLE": "Vote positif/négatif pour cet élément", "COUNTER_TITLE": "{total, plural, one{un vote} other{# votes}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Objet ou référence", "TITLE_ACTION_FILTER_BUTTON": "recherche", "TITLE": "Filtres", - "INPUT_SEARCH_PLACEHOLDER": "Objet ou réf.", "TITLE_ACTION_SEARCH": "Rechercher", "ACTION_SAVE_CUSTOM_FILTER": "sauvegarder en tant que filtre personnalisé", "PLACEHOLDER_FILTER_NAME": "Écrivez le nom du filtre et appuyez sur \"Entrée\"", @@ -220,16 +210,10 @@ "CREATED_BY": "Créé par", "CUSTOM_FILTERS": "Filtres personnalisés", "EPIC": "Épopée" - }, - "CONFIRM_DELETE": { - "TITLE": "Supprime le filtre personnalisé", - "MESSAGE": "le filtre personnalisé '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Une autre personne a apportée des modifications lors de l'édition. Vérifiez la nouvelle version dans l'onglet Activité avant d'enregistrer vos modifications.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Aide sur la syntaxe Markdown" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Ajouter des liens wiki", "DELETE_WIKI_LINKS": "Supprimer des liens wiki" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga est une plateforme de gestion de projets pour les startups, les développeurs et les designers agiles qui veulent un outil simple, beau et qui rend le travail vraiment agréable." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Modifier votre mot de passe - Taiga", - "PAGE_DESCRIPTION": "Paramètrez un nouveau mot de passe pour votre compte Taiga et, au fait, vous devriez manger de la nourriture plus riche en fer, c'est bon pour votre cerveau :P", "SECTION_NAME": "Modifier le mot de passe", "FIELD_CURRENT_PASSWORD": "Mot de passe actuel", "PLACEHOLDER_CURRENT_PASSWORD": "Votre mot de passe actuel (vide si vous n'avez pas encore de mot de passe)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Nos Oompa Loompas n'ont pas trouvé votre invitation.", - "SUCCESS": "Vous avez rejoint ce projet, Bienvenue sur {{project_name}}", - "ERROR": "D'après nos Oompa Loompas, vous n'êtes pas encore enregistrés ou vous avez saisi un mot de passe incorrect." + "SUCCESS": "Vous avez rejoint ce projet, Bienvenue sur {{project_name}}" }, "HOME": { "PAGE_TITLE": "Accueil - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Supprimer la pièce jointe...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "la pièce jointe \"{{fileName}}\"", "ERROR_DELETE_ATTACHMENT": "Nous n'avons pas été capable de supprimer {{errorMessage}}.", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "est obsolète" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Précédent", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Nous vous enverrons un courriel lorsque ce sera prêt.", "SYNC_MESSAGE": "Si le téléchargement ne commence pas automatiquement, cliquez ici.", "ERROR": "Nos Oompa Loompas ont des problèmes à générer le fichier de vidage. S'il vous plait, essayez de nouveau.", - "ERROR_BUSY": "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 à générer votre fichier de vidage : {{message}}" + "ERROR_BUSY": "Nous sommes désolés, nos Oompa Loompas sont très occupés en ce moment. Veuillez réessayer dans quelques minutes." }, "MODULES": { "TITLE": "Modules", - "ENABLE": "Activer", - "DISABLE": "Désactiver", "EPICS": "Épopées", "EPICS_DESCRIPTION": "Visualiser et gérer les aspects les plus stratégiques de votre projet", "BACKLOG": "Backlog", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Profil projet - {{projectName}}", "PROJECT_DETAILS": "Détails du projet", "PROJECT_NAME": "Nom du projet", - "PROJECT_SLUG": "Label du projet", "TAGS": "Mots-clés", "DESCRIPTION": "Description", "RECRUITING": "Est-ce que ce projet recherche des membres ?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Projet privé", "PRIVATE_OR_PUBLIC": "Quelle est la différence entre les projets publics et privés ?", "DELETE": "Supprimer ce projet", - "LOGO_HELP": "L'image va être agrandie à 80x80px", "CHANGE_LOGO": "Changer le logo", "ACTION_USE_DEFAULT_LOGO": "Utiliser l'image par défaut", "MAX_PRIVATE_PROJECTS": "Vous avez atteint le nombre maximum autorisé de projets privés accordé par votre souscription actuelle.", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Les requêtes Gitlab ne sont pas signées, donc le meilleur moyen de vérifier l'origine est par l'adresse IP. Si le champ est vide il n'y aura pas de validation de l'IP." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Les Webhooks informent des services extérieurs à Taiga d'événements interne à Taiga, tel que les nouveaux commentaires ou les récits utilisateur…", "ADD_NEW": "Ajouter une nouvelle dérivation", "TYPE_NAME": "Entrez le nom du service", "TYPE_PAYLOAD_URL": "Entrez l'URL de payload du service", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Supprimer un membre", "RESEND": "Renvoyer", "SUCCESS_SEND_INVITATION": "Nous avons envoyé une autre invitation à '{{email}}'.", - "ERROR_SEND_INVITATION": "Nous n'avons pas envoyé l'invitation", "SUCCESS_DELETE": "Nous avons supprimé {{message}}.", "ERROR_DELETE": "Nous n'avons pas été capable de supprimer {{message}}.", "DEFAULT_DELETE_MESSAGE": "l'invitation à {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Donnez un nom au nouvel statut" }, "MENU": { - "TITLE": "Admin", "PROJECT": "Projet", "ATTRIBUTES": "Attributs", "MEMBERS": "Membres", "PERMISSIONS": "Permissions", - "INTEGRATIONS": "Intégrations", - "PLUGINS": "Plugins" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Attributs" + "INTEGRATIONS": "Intégrations" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Champs personnalisés", "TAGS": "Mots-clés" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Profil projet" - }, "SUBMENU_ROLES": { "TITLE": "Rôles", "ACTION_NEW_ROLE": "+ Nouveau rôle", "TITLE_ACTION_NEW_ROLE": "Ajouter un nouveau rôle" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Services" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Voudriez-vous devenir le nouveau propriétaire du projet ?", "PRIVATE": "Privé", @@ -783,15 +740,13 @@ "PRIVATE": "Gardez en mémoire que vous pouvez posséder jusqu'à {{maxProjects}} projets privés. Vous possédez actuellement {{currentProjects}} projets privés.", "PUBLIC": "Gardez en mémoire que vous pouvez posséder jusqu'à {{maxProjects}} projets publics. Vous possédez actuellement {{currentProjects}} projets publics." }, - "CANT_BE_OWNED": "Pour le moment, vous ne pouvez devenir propriétaire d'un projet de ce type. Si vous voulez devenir propriétaire de ce projet, merci de contacter l'administrateur afin qu'il puisse modifier les paramètres de votre compte pour autoriser la propriété de projet.", - "CHANGE_MY_PLAN": "Changer ma souscription actuelle" + "CANT_BE_OWNED": "Pour le moment, vous ne pouvez devenir propriétaire d'un projet de ce type. Si vous voulez devenir propriétaire de ce projet, merci de contacter l'administrateur afin qu'il puisse modifier les paramètres de votre compte pour autoriser la propriété de projet." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Modifier le profil", - "FOLLOW": "Suivre", "CLOSED_US": "Récit utilisateur fermé", "PROJECTS": "Projets", "PROJECTS_EMPTY": "{{username}} n'a aucun projet pour l'instant", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} n'a aucun contact pour l'instant", "CURRENT_USER_CONTACTS_EMPTY": "Vous n'avez aucun contact pour l'instant", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Les personnes avec qui vous travaillez à Taiga seront vos contacts automatiquement", - "REPORT": "Signaler un abus", "TABS": { "ACTIVITY_TAB": "Chronologie", "ACTIVITY_TAB_TITLE": "Voir toutes les activités de cet utilisateur", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Toutes", "FILTER_TYPE_ALL_TITLE": "Voir tous", "FILTER_TYPE_PROJECTS": "Projets", - "FILTER_TYPE_PROJECT_TITLES": "Voir uniquement les projets", + "FILTER_TYPE_PROJECTS_TITLE": "Voir uniquement les projets", "FILTER_TYPE_EPICS": "Épopées", - "FILTER_TYPE_EPIC_TITLES": "N'afficher que les épopées", + "FILTER_TYPE_EPICS_TITLE": "N'afficher que les épopées", "FILTER_TYPE_USER_STORIES": "Récits", - "FILTER_TYPE_USER_STORIES_TITLES": "Voir uniquement les user stories", + "FILTER_TYPE_USER_STORIES_TITLE": "Voir uniquement les user stories", "FILTER_TYPE_TASKS": "Tâches", - "FILTER_TYPE_TASK_TITLES": "Voir uniquement les tâches", + "FILTER_TYPE_TASKS_TITLE": "Voir uniquement les tâches", "FILTER_TYPE_ISSUES": "Tickets", "FILTER_TYPE_ISSUES_TITLE": "Voir uniquement les tickets", "EMPTY_TITLE": "Il n'y a rien à afficher ici." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Bienvenue", - "SECTION_PROJECTS": "Projets", "HELP": "Réorganisez vos projets pour placer les plus utilisés en premier.
    Les 10 premiers projets apparaitront dans la liste des projets de la barre de navigation supérieure", "PRIVATE": "Projet privé", "LOOKING_FOR_PEOPLE": "Est-ce que ce projet recherche des membres ?", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Ce projet est temporairement verrouillé", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Pour débloquer vos projets, merci de contacter l'administrateur." }, - "STATS": { - "PROJECT": "points
    projet", - "DEFINED": "points
    définis", - "ASSIGNED": "points
    affectés", - "CLOSED": "points
    fermés" - }, "SECTION": { "SEARCH": "Rechercher", "TIMELINE": "Chronologie", @@ -870,13 +816,9 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Vos projets", - "PLACEHOLDER_SEARCH": "Rechercher dans...", "ACTION_CREATE_PROJECT": "Créer un projet", "MANAGE_PROJECTS": "Gérer les projets", "TITLE_CREATE_PROJECT": "Créer un projet", - "TITLE_PRVIOUS_PROJECT": "Montrer les projets précédents", - "TITLE_NEXT_PROJECT": "Montrer les projets suivants", "HELP_TITLE": "Page d'assistance Taiga", "HELP": "Aide", "HOMEPAGE": "Page d'accueil", @@ -884,10 +826,6 @@ "FEEDBACK": "Feedback", "NOTIFICATIONS_TITLE": "Modifier vos réglages de notification", "NOTIFICATIONS": "Notifications", - "ORGANIZATIONS_TITLE": "Modifier vos organisations", - "ORGANIZATIONS": "Modifier les organisations", - "SETTINGS_TITLE": "Modifier vos réglages", - "SETTINGS": "Réglages", "VIEW_PROFILE_TITLE": "Afficher le profil", "VIEW_PROFILE": "Afficher le profil", "EDIT_PROFILE_TITLE": "Modifier votre profil", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Modifier le mot de passe", "DASHBOARD_TITLE": "Tableau de bord", "DISCOVER_TITLE": "Découvrir les projets populaires", - "NEW_ITEM": "Nouveau", - "DISCOVER": "Découvrir", - "ACTION_REORDER": "Glisser-déposer pour réorganiser" + "DISCOVER": "Découvrir" }, "LIKE_BUTTON": { "LIKE": "J'aime", @@ -927,49 +863,38 @@ }, "CREATE": { "TITLE": "Créer un projet", - "FRESH": "Tout beau, tout nouveau !", - "CHOOSE_TEMPLATE": "Which template fits your project better?", + "CHOOSE_TEMPLATE": "Quel template correspond le mieux à votre projet ?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", "TEMPLATE_KANBAN": "Kanban", - "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", + "TEMPLATE_KANBAN_DESC": "Garder un flux de travail constant sur les tâches indépendantes", "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", - "DUPLICATE": "Duplicate project", + "DUPLICATE": "Dupliquer le projet", "DUPLICATE_DESC": "Start clean and keep your configuration", "IMPORT": "Importer un projet", "IMPORT_DESC": "Import your project from multiple platforms into Taiga", "INVITE": "Invite to the project", - "SOLO_PROJECT": "You'll be alone in this project", - "INVITE_LATER": "(You'll be able to invite more members later)", + "SOLO_PROJECT": "Vous allez être seul sur ce projet", + "INVITE_LATER": "(Vous pourrez inviter d'autres membres plus tard)", "BACK": "Back", - "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PRIVATE_PROJECTS": "Malheureusement vous avez atteint le nombre maximum de projets privés. Si vous voulez augmenter la limite, contactez votre administrateur.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Projet public", - "PRIVATE_PROJECT": "Projet privé", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Projet privé" }, "COMMON": { - "DETAILS": "New project details", - "PROJECT_TITLE": "Project Name", - "PROJECT_DESCRIPTION": "Project Description" + "DETAILS": "Détails du nouveau projet", + "PROJECT_TITLE": "Nom du projet", + "PROJECT_DESCRIPTION": "Description du projet" }, "DUPLICATE": { - "TITLE": "Duplicate Project", + "TITLE": "Dupliquer le projet", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Tout beau, tout nouveau !", - "CHOOSE_TEMPLATE_TITLE": "Plus d'information sur les templates de projets", - "CHOOSE_TEMPLATE_INFO": "Plus d'informations", - "PROJECT_DETAILS": "Détails du projet", - "PUBLIC_PROJECT": "Projet public", - "PRIVATE_PROJECT": "Projet privé", - "CREATE_PROJECT": "Créer un projet", - "CHANGE_PLANS": "changer de souscription" + "SELECT_PLACEHOLDER": "Choissisez un projet existant à dupliquer" }, "IMPORT": { - "TITLE": "Import Project", + "TITLE": "Import un projet", "DESCRIPTION": "Import your project from multiple platforms into Taiga", "ASYNC_IN_PROGRESS_TITLE": "Nos Oompa Loompas sont en train d'importer votre projet", "ASYNC_IN_PROGRESS_MESSAGE": "Ce processus pourrait durer plusieurs minutes
    Nous vous enverrons un courriel quand ce sera prêt", @@ -979,14 +904,11 @@ "ERROR_MESSAGE": "Nos Oompa Loompas ont des problèmes pour importer vos données de vidage : {{error_message}}", "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})", "SYNC_SUCCESS": "Votre projet a été importé avec succès", - "IMPORT": "Import", - "ARCHIVED": "Archivé", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", - "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "IMPORT": "Importer", + "WHO_IS": "Ces tâches seront assignées à ...", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Membres du projet", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -997,8 +919,8 @@ "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Affecter", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", + "NO_RESULTS": "Il semble qu'aucun résultat ne correspond à vos critères de recherche", + "ACTION_SEARCH": "recherche", "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Membres du projet", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Membres du projet" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Membres du projet", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Tickets", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Supprimer le compte Taiga", "CONFIRM": "Etes-vous sûr de vouloir supprimer votre compte Taiga ?", - "NEWSLETTER_LABEL_TEXT": "Je ne veux plus recevoir votre bulletin d'information", "CANCEL": "Retour aux réglages", "ACCEPT": "Supprimer le compte", - "BLOCK_PROJECT": "Notez que tous les projets dont vous avez la propriété seront bloqués après que vous ayez supprimé votre compte. Si vous souhaitez pas qu'un projet soit bloqué, merci d'en transférer la propriété auprès d'un autre membre avant la suppression de votre compte.", - "SUBTITLE": "Vous partez déjà ? Nous serons toujours là si jamais vous changez d'avis ! :(" + "BLOCK_PROJECT": "Notez que tous les projets dont vous avez la propriété seront bloqués après que vous ayez supprimé votre compte. Si vous souhaitez pas qu'un projet soit bloqué, merci d'en transférer la propriété auprès d'un autre membre avant la suppression de votre compte." }, "DELETE_PROJECT": { "TITLE": "Supprimer le projet", @@ -1111,11 +1023,11 @@ }, "ADD_MEMBER": { "TITLE": "Nouveau membre", - "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER": "Filtrer les utilisateurs ou écrire un courriel pour inviter un utilisateur", + "ADD_EMAIL": "Ajouter une adresse courriel", + "REMOVE": "Supprimer", + "INVITE": "Inviter", + "CHOOSE_ROLE": "Choissisez un rôle", "PLACEHOLDER_INVITATION_TEXT": "(Optionnel) Ajoutez un texte personnalisé à l'invitation. Dites quelque chose de gentil à vos nouveaux membres ;-)", "HELP_TEXT": "Si vos utilisateurs sont déjà inscrits sur Taiga, ils seront automatiquement ajoutés. Sinon, ils recevront une invitation." }, @@ -1217,15 +1129,9 @@ "ADD_BULK": "Ajouter de nouveaux récits utilisateur en lot", "PROMOTED": "Ce récit utilisateur a été promue à partir d'un ticket :", "TITLE_LINK_GO_TO_ISSUE": "Aller vers ce ticket", - "EXTERNAL_REFERENCE": "Ce récit utilisateur a été créé depuis", - "GO_TO_EXTERNAL_REFERENCE": "Allez à l'origine", - "BLOCKED": "Ce récit utilisateur est bloqué", "TITLE_DELETE_ACTION": "Supprimer le récit utilisateur", "LIGHTBOX_TITLE_BLOKING_US": "Bloque le RU", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} tâches complétées", - "ASSIGN": "Affecter le récit utilisateur", "NOT_ESTIMATED": "Non estimé", - "TOTAL_US_POINTS": "Total des points RU", "TRIBE": { "PUBLISH": "Publier en tant que Gig sur Taiga Tribe ", "PUBLISH_INFO": "Plus d'informations", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Exigence équipe", - "CLIENT_REQUIREMENT": "Exigence client", - "FINISH_DATE": "Date de fin" + "CLIENT_REQUIREMENT": "Exigence client" } }, "COMMENTS": { "DELETED_INFO": "Commentaire supprimé par {{user}}", - "TITLE": "Commentaires", "COMMENTS_COUNT": "{{comments}} commentaires", - "ORDER": "Trier", "OLDER_FIRST": "Plus ancien d'abord", "RECENT_FIRST": "Plus récent d'abord", "COMMENT": "Commentaire", - "EDIT_COMMENT": "Modifier le commentaire", "EDITED_COMMENT": "Modifié :", "SHOW_HISTORY": "Voir l'historique", "TYPE_NEW_COMMENT": "Entrez un nouveau commentaire ici", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Afficher l'activité", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Montrer les entrées précédentes ({{showMore}} plus)", "TITLE": "Activité", "ACTIVITIES_COUNT": "{{activities}} activités", - "REMOVED": "supprimé", - "ADDED": "ajouté", "TAGS_ADDED": "Mots-clés ajoutés :", "TAGS_REMOVED": "Mots-clés supprimés", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "Pièces jointes mises à jour ({{filename}}) :", "CREATED_CUSTOM_ATTRIBUTE": "Attribut personnalisé créé", "UPDATED_CUSTOM_ATTRIBUTE": "Attribut personnalisé mis à jour", - "SIZE_CHANGE": "A fait {size, plural, one{une modification} other{# modifications}}", "BECAME_DEPRECATED": "devenu obsolète", "BECAME_UNDEPRECATED": "n'est plus obsolète", "TEAM_REQUIREMENT": "Exigence équipe", "CLIENT_REQUIREMENT": "Exigence client", "BLOCKED": "Bloqué", "VALUES": { - "YES": "oui", - "NO": "no", - "EMPTY": "vide", "UNASSIGNED": "non affecté" }, "FIELDS": { "SUBJECT": "objet", - "NAME": "nom", "DESCRIPTION": "description", - "CONTENT": "contenu", "STATUS": "statut", - "IS_CLOSED": "est fermé", - "FINISH_DATE": "date de fin", "TYPE": "type", - "PRIORITY": "priorité", - "SEVERITY": "gravité", "ASSIGNED_TO": "affecté à", - "WATCHERS": "observateurs", "MILESTONE": "sprint", - "USER_STORY": "récit utilisateur", - "PROJECT": "projet", - "IS_BLOCKED": "est bloqué", - "BLOCKED_NOTE": "note bloquée", - "POINTS": "points", - "CLIENT_REQUIREMENT": "exigence client", - "TEAM_REQUIREMENT": "exigence équipe", - "IS_IOCAINE": "est sous iocaine", - "TAGS": "mots-clés", - "ATTACHMENTS": "pièces jointes", - "IS_DEPRECATED": "est obsolète", - "IS_NOT_DEPRECATED": "n'est pas obsolète", - "ORDER": "classement", - "BACKLOG_ORDER": "classement du backlog", - "SPRINT_ORDER": "classement du sprint", - "KANBAN_ORDER": "Classement du Kanban", - "TASKBOARD_ORDER": "trier le tableau des tâches", - "US_ORDER": "classement des récits utilisateur", "COLOR": "couleur" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Définissez les points et les sprints via l'admin", "MOVE_US_TO_CURRENT_SPRINT": "Déplacer vers le sprint actuel", "MOVE_US_TO_LATEST_SPRINT": "Déplacer vers le dernier sprint", - "SHOW_FILTERS": "Afficher les filtres", - "SHOW_TAGS": "Afficher les mots-clés", "EMPTY": "Le backlog est vide !", "CREATE_NEW_US": "Créer un nouveau récit utilisateur", "CREATE_NEW_US_EMPTY_HELP": "Vous pouvez envisager de créer un récit utilisateur", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Afficher/Cacher les filtres", - "TITLE": "Filtres", - "REMOVE": "Supprimer les filtres", "HIDE": "Cacher les filtres", "SHOW": "Afficher les filtres" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Tableau des tâches", "TITLE_LINK_TASKBOARD": "Aller au tableau des tâches de \"{{name}}\"", - "NUMBER_SPRINTS": "
    sprints", "EMPTY": "Il n'y a pas encore de sprint", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Ce sprint n'a pas de \"User Stories\"", "WARNING_EMPTY_SPRINT": "Déposez ici les récits depuis votre backlog pour démarrer un nouveau sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Ajouter une nouvelle tâche", "TITLE_ACTION_ADD_BULK": "Ajouter un nouveau lot de tâches", "TITLE_ACTION_ASSIGN": "Affecter une tâche", - "TITLE_ACTION_EDIT": "Modifier la tâche", "PLACEHOLDER_CARD_TITLE": "Cela pourrait être une tâche", "PLACEHOLDER_CARD_TEXT": "Éclater les récits en tâches pour les suivre séparément", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Nom du statut", "OWNER_US": "La tâche appartient à", "TITLE_LINK_GO_OWNER": "Aller au récit utilisateur", - "ORIGIN_US": "Cette tâche a été créée par", - "TITLE_LINK_GO_ORIGIN": "Aller au récit utilisateur", - "BLOCKED": "Cette tâche est bloquée", "TITLE_DELETE_ACTION": "Supprimer une tâche", "LIGHTBOX_TITLE_BLOKING_TASK": "Tâche bloquante", "FIELDS": { - "MILESTONE": "Sprint", - "USER_STORY": "Récit utilisateur", "IS_IOCAINE": "est sous iocaine" }, - "ACTION_IOCAINE": "locaine", "TITLE_ACTION_IOCAINE": "Vous vous sentez un peu dépassé(e) 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": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Tickets - {{projectName}}", "PAGE_DESCRIPTION": "Le panneau de la liste des tickets du projet {{projectName}} : {{projectDescription}}", - "LIST_SECTION_NAME": "Tickets", "SECTION_NAME": "Ticket", "ACTION_NEW_ISSUE": "+ NOUVEAU TICKET", "ACTION_PROMOTE_TO_US": "Promouvoir en récit utilisateur", "PROMOTED": "Le ticket a été promu en récit utilisateur", "EXTERNAL_REFERENCE": "Ce ticket a été créé à partir de", "GO_TO_EXTERNAL_REFERENCE": "Aller à l'origine", - "BLOCKED": "Ce bug est bloqué", "ACTION_DELETE": "Supprimer le ticket", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Ticket bloquant", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Replier la colonne", "TITLE_ACTION_UNFOLD": "Déplier la colonne", - "TITLE_ACTION_FOLD_CARDS": "Replier les cartes", - "TITLE_ACTION_UNFOLD_CARDS": "Déplier les cartes", "TITLE_ACTION_ADD_US": "Ajouter un nouveau récit utilisateur", "TITLE_ACTION_ADD_BULK": "Ajout en masse", "ACTION_SHOW_ARCHIVED": "Montrer les éléments archivés", "ACTION_HIDE_ARCHIVED": "Cacher les éléments archivés", "HIDDEN_USER_STORIES": "Les récits utilisateur avec ce statut sont masqués par défaut", - "ARCHIVED": "Vous avez archivé", - "UNDO_ARCHIVED": "Refaites glisser pour annuler", "PLACEHOLDER_CARD_TITLE": "Ce sont vos récits utilisateurs", "PLACEHOLDER_CARD_TEXT": "Les récits peuvent avoir des sous-tâches pour séparer les exigences" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "ÉQUIPE - {{projectName}}", "PAGE_DESCRIPTION": "Le panneau équipe montre la liste des membres du projet {{projectName}} : {{projectDescription}}", "SECTION_NAME": "Équipe", - "APP_TITLE": "ÉQUIPE - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Rechercher par nom...", "COLUMN_MR_WOLF": "M. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Tickets fermés", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Toutes", "OPTION_INVOLVED": "Impliqué", "OPTION_NONE": "Aucune" - }, - "POPOVER": { - "USER_PROFILE": "Profil utilisateur", - "CHANGE_PASSWORD": "Changer de mot de passe", - "NOTIFICATIONS": "Notifications", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "Préférences utilisateur" } }, "USER_PROFILE": { - "IMAGE_HELP": "L'image va être agrandie à 80x80px", - "ACTION_CHANGE_IMAGE": "Modifier", "ACTION_USE_GRAVATAR": "Utiliser l'image par défaut", "ACTION_DELETE_ACCOUNT": "Supprime le compte Taiga", "CHANGE_EMAIL_SUCCESS": "Consultez votre messagerie !
    Nous vous avons envoyé un courriel
    avec les instructions à suivre pour saisir votre nouvelle adresse", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Dernière modification le {{lastModifiedDate}} ({{totalEditions}} modifications en tout) Contenu : {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Ecrivez votre page wiki", "REMOVE": "Supprimer cette page wiki", "DELETE_LIGHTBOX_TITLE": "Supprimer la page Wiki", "DELETE_LINK_TITLE": "Supprimer un lien Wiki", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Les plus « aimés »", "MOST_LIKED_EMPTY": "Il n'y a pas encore de projet « aimé »", "VIEW_MORE": "Voir plus", - "RECRUITING": "Ce projet recherche des membres", "FEATURED": "Projets mis en avant", "EMPTY": "Aucun projet ne correspond à ce critère de recherche.
    Essayez encore !", "FILTERS": { diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 04738675..29bf5f68 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -4,7 +4,6 @@ "NO": "No", "OR": "o", "LOADING": "Caricamento...", - "LOADING_PROJECT": "Stiamo caricando il progetto...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Salva", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Perché questo compito è bloccato?", "BLOCKED_REASON": "Spiega il motivo", "CREATED_BY": "Creato da {{fullDisplayName}}", - "FROM": "da", - "TO": "a", "CLOSE": "chiudi", "GO_HOME": "Ritorna all'inizio", "PLUGINS": "Plugin", - "BETA": "Siamo in beta!", "ONE_ITEM_LINE": "Un elemento per riga...", "NEW_BULK": "Nuovo inserimento nel carico", "RELATED_TASKS": "Compiti correlati", @@ -148,7 +144,6 @@ "PRIORITY": "Priorità", "ASSIGNED_TO": "Assegnato a", "POINTS": "Punti", - "BLOCKED_NOTE": "nota bloccata", "IS_BLOCKED": "è bloccato", "REF": "Riferimento", "VOTES": "Voti", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{un osservatore} other{# osservatori}}" }, "VOTE_BUTTON": { - "UPVOTE": "vota positivamente", - "UPVOTED": "votato positivamente", - "DOWNVOTE": "vota negativamente", - "VOTERS": "Votanti", "BUTTON_TITLE": "vota positivamente o negativamente questo elemento", "COUNTER_TITLE": "{total, plural, one{un voto} other{# voti}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Soggetto o referenza", "TITLE_ACTION_FILTER_BUTTON": "cerca", "TITLE": "Filtri", - "INPUT_SEARCH_PLACEHOLDER": "Soggetto o referenza", "TITLE_ACTION_SEARCH": "Cerca", "ACTION_SAVE_CUSTOM_FILTER": "salva come filtro personalizzato", "PLACEHOLDER_FILTER_NAME": "Scrivi il nome del filtro e premi invio", @@ -220,16 +210,10 @@ "CREATED_BY": "Creato da", "CUSTOM_FILTERS": "Filtri personalizzati", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Elimina il filtro personalizzato", - "MESSAGE": "Il filtro personalizzato '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Aiuto per la sintassi Markdown" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Aggiungi un wiki links", "DELETE_WIKI_LINKS": "Elimina il link wiki" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga è una piattaforma di gestione dei progetti per startups e sviluppatori agile, o per designers che vogliono uno strumento semplice ed elegante che renda piacevole lavorare. " } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Cambia la tua password - Taiga", - "PAGE_DESCRIPTION": "Imposta una nuova password per il tuo account Taiga... hey! ti consigliamo di mangiare cibo ricco di ferro, fa bene all'innovazione :P", "SECTION_NAME": "Cambia password", "FIELD_CURRENT_PASSWORD": "Password attuale", "PLACEHOLDER_CURRENT_PASSWORD": "La tua password corrente (o lascia vuoto se non hai ancora una password)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "I nostri Oompa Loompa non hanno trovato il tuo invito.", - "SUCCESS": "Sei ora un membro di questo progetto. Benvenuto in {{project_name}}", - "ERROR": "Secondo i nostri Oompa Loompa, non sei ancora registrato o hai inserito una password non valida." + "SUCCESS": "Sei ora un membro di questo progetto. Benvenuto in {{project_name}}" }, "HOME": { "PAGE_TITLE": "Home - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Cancella l'allegato", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "l'allegato '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Non siamo riusciti a cancellare: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "è deprecato" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Precedente", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Ti invieremo una mail quando sarà pronto", "SYNC_MESSAGE": "Se il download non parte automaticamente clicca
    here.", "ERROR": "I nostri Oompa Loompa hanno qualche problema a generare il tuo dump. Prova di nuova.", - "ERROR_BUSY": "Scusali, i nostri Oompa Loompa sono occupati. Riprova di nuovo in qualche minuto.", - "ERROR_MESSAGE": "Accidenti, i nostri Oompa Loompa hanno qualche problema a generare il tuo dump: {{message}}" + "ERROR_BUSY": "Scusali, i nostri Oompa Loompa sono occupati. Riprova di nuovo in qualche minuto." }, "MODULES": { "TITLE": "Moduli", - "ENABLE": "Abilita", - "DISABLE": "Disabilita", "EPICS": "Epici", "EPICS_DESCRIPTION": "Visulaizza e controlla la parte più strategica del tuo progetto", "BACKLOG": "Backlog", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Profilo progetto - {{projectName}}", "PROJECT_DETAILS": "Dettagli progetto", "PROJECT_NAME": "Nome progetto", - "PROJECT_SLUG": "Progetto lumaca", "TAGS": "Tag", "DESCRIPTION": "Descrizione", "RECRUITING": "Il progetto cerca persone?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Progetto privato", "PRIVATE_OR_PUBLIC": "Quale è la differenza tra progetto privato e pubblico?", "DELETE": "Elimina questo progetto", - "LOGO_HELP": "L'immagine sarà scalata a 80x80px.", "CHANGE_LOGO": "Cambia Logo", "ACTION_USE_DEFAULT_LOGO": "Usa l'immagine di default", "MAX_PRIVATE_PROJECTS": "Hai raggiunto il numero massimo di progetti privati per il tuo abbonamento", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Le richieste Gitlab non sono firmate, quindi il miglior modo di verificarle è attraverso l'origine degli IP. Se il campo è vuoto non ci sarà validazione." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Webhooks notifica servizi esterni su eventi in Taiga, come i commenti, le storie utente....", "ADD_NEW": "Aggiungi un nuovo Webhook", "TYPE_NAME": "Digita il nome del servizio", "TYPE_PAYLOAD_URL": "Digita l'URL del servizio in carico", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Elimina membro", "RESEND": "Invia di nuovo", "SUCCESS_SEND_INVITATION": "Abbiamo mandato nuovamente l'invito a '{{email}}'.", - "ERROR_SEND_INVITATION": "Non abbiamo mandato l'invito", "SUCCESS_DELETE": "Abbiamo eliminato {{message}}.", "ERROR_DELETE": "Non siamo riusciti ad eliminare {{message}}.", "DEFAULT_DELETE_MESSAGE": "L'invito a {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Scrivi un nome per il nuovo status" }, "MENU": { - "TITLE": "Amministratore", "PROJECT": "Progetto", "ATTRIBUTES": "Attributi", "MEMBERS": "Membri", "PERMISSIONS": "Permessi", - "INTEGRATIONS": "Integrazioni", - "PLUGINS": "Plugin" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Attributi" + "INTEGRATIONS": "Integrazioni" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Stato", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Campi personalizzati", "TAGS": "Tag" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Profilo progetto" - }, "SUBMENU_ROLES": { "TITLE": "Ruoli", "ACTION_NEW_ROLE": "+ Nuovo ruolo", "TITLE_ACTION_NEW_ROLE": "Aggiungi nuovo ruolo" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Servizi" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Vorresti diventare il nuovo proprietario del progetto?", "PRIVATE": "Privato", @@ -783,15 +740,13 @@ "PRIVATE": "Per favore ricorda che puoi avere al massimo {{maxProjects}} progetti privati. Attualmente hai {{currentProjects}} progetti privati", "PUBLIC": "Per favore ricorda che puoi avere al massimo {{maxProjects}} progetti pubblici. Attualmente hai {{currentProjects}} progetti pubblici" }, - "CANT_BE_OWNED": "Attualmente non puoi diventare il proprietario di un progetto di questo tipo. Se vuoi diventare proprietario di questo progetto, per favore contatta l'amministratore così può cambiare le impostazioni del tuo account per permettere la proprietà dei progetti.", - "CHANGE_MY_PLAN": "Cambia il mio abbonamento" + "CANT_BE_OWNED": "Attualmente non puoi diventare il proprietario di un progetto di questo tipo. Se vuoi diventare proprietario di questo progetto, per favore contatta l'amministratore così può cambiare le impostazioni del tuo account per permettere la proprietà dei progetti." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Modifica profilo", - "FOLLOW": "Segui", "CLOSED_US": "US chiusa", "PROJECTS": "Progetti", "PROJECTS_EMPTY": "{{username}} non ha ancora nessun progetto", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} non ha ancora nessun contatto", "CURRENT_USER_CONTACTS_EMPTY": "Non hai ancora contatti", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Le persone con cui lavori in Taiga saranno automaticamente tra tuoi contatti", - "REPORT": "Segnala abuso", "TABS": { "ACTIVITY_TAB": "Cronologia", "ACTIVITY_TAB_TITLE": "Mostra tutte le attività dell'utente", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Tutti", "FILTER_TYPE_ALL_TITLE": "Mostra tutto", "FILTER_TYPE_PROJECTS": "Progetti", - "FILTER_TYPE_PROJECT_TITLES": "Mostra solo i progetti", + "FILTER_TYPE_PROJECTS_TITLE": "Mostra solo i progetti", "FILTER_TYPE_EPICS": "Epici", - "FILTER_TYPE_EPIC_TITLES": "Mostra solo gli epici", + "FILTER_TYPE_EPICS_TITLE": "Mostra solo gli epici", "FILTER_TYPE_USER_STORIES": "Resoconti", - "FILTER_TYPE_USER_STORIES_TITLES": "Mostra solo resoconti utente", + "FILTER_TYPE_USER_STORIES_TITLE": "Mostra solo resoconti utente", "FILTER_TYPE_TASKS": "Compiti", - "FILTER_TYPE_TASK_TITLES": "Mostra solo attività", + "FILTER_TYPE_TASKS_TITLE": "Mostra solo attività", "FILTER_TYPE_ISSUES": "problemi", "FILTER_TYPE_ISSUES_TITLE": "Mostra solo i problemi", "EMPTY_TITLE": "Sembra che qui non ci sia nulla" @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "TEAM - {{projectName}}", - "WELCOME": "Benvenuto", - "SECTION_PROJECTS": "Progetti", "HELP": "Riordina i tuoi progetti per avere in alto i più usati.
    I primi 10 progetti compariranno nella lista dei progetti della barra di navigazione, su in alto", "PRIVATE": "Progetto privato", "LOOKING_FOR_PEOPLE": "Il progetto cerca persone", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Questo progetto è temporaneamente bloccato", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Per sbloccare i tuoi progetti, contatta l'amministratore" }, - "STATS": { - "PROJECT": "progetto
    punti", - "DEFINED": "Definiti
    punti", - "ASSIGNED": "assegnati
    punti", - "CLOSED": "chiusi
    punti" - }, "SECTION": { "SEARCH": "Cerca", "TIMELINE": "Cronologia", @@ -870,13 +816,9 @@ "ADMIN": "Amministratore" }, "NAVIGATION": { - "SECTION_TITLE": "Tuoi progetti", - "PLACEHOLDER_SEARCH": "Cerca in...", "ACTION_CREATE_PROJECT": "Crea progetto", "MANAGE_PROJECTS": "Gestisci Progetti", "TITLE_CREATE_PROJECT": "Crea progetto", - "TITLE_PRVIOUS_PROJECT": "Mostra i progetti precedenti", - "TITLE_NEXT_PROJECT": "Progetto successivo", "HELP_TITLE": "Pagina di supporto Taiga", "HELP": "Aiuto", "HOMEPAGE": "Homepage", @@ -884,10 +826,6 @@ "FEEDBACK": "Feedback", "NOTIFICATIONS_TITLE": "Modifica le impostazioni delle notifiche", "NOTIFICATIONS": "Notifiche", - "ORGANIZATIONS_TITLE": "Modifica la tua organizzazione", - "ORGANIZATIONS": "Modifica organizzazioni", - "SETTINGS_TITLE": "Modifica le tue impostazioni", - "SETTINGS": "Impostazioni", "VIEW_PROFILE_TITLE": "Mostra profilo", "VIEW_PROFILE": "Mostra profilo", "EDIT_PROFILE_TITLE": "Modifica il tuo profilo", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Cambia password", "DASHBOARD_TITLE": "Dashboard", "DISCOVER_TITLE": "Scopri i progetti più seguiti", - "NEW_ITEM": "Nuovo", - "DISCOVER": "Scopri", - "ACTION_REORDER": "Usa drag & drop per riordinare" + "DISCOVER": "Scopri" }, "LIKE_BUTTON": { "LIKE": "Mi piace", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Crea Progetto", - "FRESH": "Nuovo di zecca. Vai così!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Progetto Pubblico", - "PRIVATE_PROJECT": "Progetto Privato", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Progetto Privato" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Nuovo di zecca. Vai così!", - "CHOOSE_TEMPLATE_TITLE": "Più info sui template di progetto", - "CHOOSE_TEMPLATE_INFO": "Più info", - "PROJECT_DETAILS": "Dettagli Progetto", - "PUBLIC_PROJECT": "Progetto Pubblico", - "PRIVATE_PROJECT": "Progetto Privato", - "CREATE_PROJECT": "Crea progetto", - "CHANGE_PLANS": "cambia abbonamento" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})", "SYNC_SUCCESS": "Il tuo progetto è stato importato con successo", "IMPORT": "Import", - "ARCHIVED": "Archiviato", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -997,8 +919,8 @@ "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Assegna", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", + "NO_RESULTS": "Sembra che non ci sia nulla che corrisponda ai criteri ricerca", + "ACTION_SEARCH": "cerca", "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "problemi", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Elimina Account Taiga", "CONFIRM": "Sei sicuro di voler eliminare il tuo account Taiga?", - "NEWSLETTER_LABEL_TEXT": "Non voglio più ricevere le vostre newsletter", "CANCEL": "Torna alle impostazioni", "ACCEPT": "Cancella account", - "BLOCK_PROJECT": "Ricorda che tutti i progetti che possiedi saranno bloccati quando cancellerai il tuo account. Se vuoi continuare a utilizzare un progetto bloccato, trasferisci la proprietà del progetto a un membro di ciascun progetto prima di cancellare il tuo account.", - "SUBTITLE": "Ci dispiace vederti andare via. Saremo qui se considererai ancora ! :(" + "BLOCK_PROJECT": "Ricorda che tutti i progetti che possiedi saranno bloccati quando cancellerai il tuo account. Se vuoi continuare a utilizzare un progetto bloccato, trasferisci la proprietà del progetto a un membro di ciascun progetto prima di cancellare il tuo account." }, "DELETE_PROJECT": { "TITLE": "Elimina progetto", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Aggiungere qualche nuova User Storie al carico", "PROMOTED": "Questa storia utente è stata promossa da problema:", "TITLE_LINK_GO_TO_ISSUE": "Vai al problema", - "EXTERNAL_REFERENCE": "Questo US é stato creato da", - "GO_TO_EXTERNAL_REFERENCE": "Ritorna all'inizio", - "BLOCKED": "Questa storia utente è bloccata", "TITLE_DELETE_ACTION": "Elimina la storia utente", "LIGHTBOX_TITLE_BLOKING_US": "Blocco la storia utente", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} compiti completati", - "ASSIGN": "Assegna la storia utente", "NOT_ESTIMATED": "Non stimato", - "TOTAL_US_POINTS": "Totale punti della storia utente", "TRIBE": { "PUBLISH": "Pubblica come Gig in Taiga Tribe", "PUBLISH_INFO": "Più info", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Requisito del team", - "CLIENT_REQUIREMENT": "Requisito del client", - "FINISH_DATE": "Data di conclusione" + "CLIENT_REQUIREMENT": "Requisito del client" } }, "COMMENTS": { "DELETED_INFO": "Commento eliminato da {{user}}", - "TITLE": "Commenti", "COMMENTS_COUNT": "{{comments}} Commenti", - "ORDER": "Ordine", "OLDER_FIRST": "I più vecchi prima", "RECENT_FIRST": "I più recenti prima", "COMMENT": "Commento", - "EDIT_COMMENT": "Modifica commento", "EDITED_COMMENT": "Modificato:", "SHOW_HISTORY": "Vai alla cronologia", "TYPE_NEW_COMMENT": "Scrivi un nuovo commento qui", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Mostra attività", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "Mostra gli inserimenti precedenti ({{showMore}} more)", "TITLE": "Attività", "ACTIVITIES_COUNT": "{{Activities}} Attività", - "REMOVED": "rimosso", - "ADDED": "aggiunto", "TAGS_ADDED": "Tag aggiunti:", "TAGS_REMOVED": "tag rimossi:", "US_POINTS": "{{role}} punti", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "Aggiorna allegato ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "crea un attributo personalizzato", "UPDATED_CUSTOM_ATTRIBUTE": "attributo personalizzato aggiornato", - "SIZE_CHANGE": "Fatto {size, plural, one{un cambiamento} other{# cambiamenti}}", "BECAME_DEPRECATED": "diventa deprecato", "BECAME_UNDEPRECATED": "diventa accettato", "TEAM_REQUIREMENT": "Requisito del team", "CLIENT_REQUIREMENT": "Requisito del client", "BLOCKED": "Bloccato", "VALUES": { - "YES": "si", - "NO": "no", - "EMPTY": "vuoto", "UNASSIGNED": "non assegnato" }, "FIELDS": { "SUBJECT": "oggetto", - "NAME": "nome", "DESCRIPTION": "descrizione", - "CONTENT": "contenuto", "STATUS": "stato", - "IS_CLOSED": "è chiuso?", - "FINISH_DATE": "Data di fine", "TYPE": "tipo", - "PRIORITY": "priorità", - "SEVERITY": "criticità", "ASSIGNED_TO": "assegnato a", - "WATCHERS": "Osservatori", "MILESTONE": "sprint", - "USER_STORY": "storia utente", - "PROJECT": "progetto", - "IS_BLOCKED": "è bloccato", - "BLOCKED_NOTE": "nota bloccata", - "POINTS": "punti", - "CLIENT_REQUIREMENT": "Requisito del client", - "TEAM_REQUIREMENT": "Requisiti del team", - "IS_IOCAINE": "è un'aspirina", - "TAGS": "tag", - "ATTACHMENTS": "allegati", - "IS_DEPRECATED": "è deprecato", - "IS_NOT_DEPRECATED": "non è deprecato", - "ORDER": "ordine", - "BACKLOG_ORDER": "Ordine di backlog", - "SPRINT_ORDER": "Ordine dello sprint", - "KANBAN_ORDER": "ordina kanban", - "TASKBOARD_ORDER": "Ordine del pannello dei compiti", - "US_ORDER": "Ordine delle storie utente", "COLOR": "colore" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Imposta i punti e gli sprint come Amministratore", "MOVE_US_TO_CURRENT_SPRINT": "Spostati allo sprint attuale", "MOVE_US_TO_LATEST_SPRINT": "Vai allo Sprint più recente", - "SHOW_FILTERS": "Mostra filtri", - "SHOW_TAGS": "Mostra tag", "EMPTY": "OMG..Il backlog é vuoto!!", "CREATE_NEW_US": "Crea una nuova Storia Utente", "CREATE_NEW_US_EMPTY_HELP": "Potresti voler creare una nuova storia utente", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Premi i filtri visibilità", - "TITLE": "Filtri", - "REMOVE": "Rimuovi filtri", "HIDE": "Nascondi Filtri", "SHOW": "Mostra Filtri" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Pannello dei compiti dello sprint", "TITLE_LINK_TASKBOARD": "Vai al pannello dei compiti di \"{{name}}\"", - "NUMBER_SPRINTS": "
    sprints", "EMPTY": "Non ci sono ancora sprints disponibili", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Lo Sprint non ha Storie Utente", "WARNING_EMPTY_SPRINT": "Metti qui le storie del tuo backlog che iniziare in nuovo sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Aggiungi un nuovo compito", "TITLE_ACTION_ADD_BULK": "Aggiungi qualche nuovo Compito nel carico", "TITLE_ACTION_ASSIGN": "Compito assegnato", - "TITLE_ACTION_EDIT": "Modifica compito", "PLACEHOLDER_CARD_TITLE": "Questo potrebbe essere un compito", "PLACEHOLDER_CARD_TEXT": "Dividi le storie in compiti per tenerne traccia separatamente", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Nome dello status", "OWNER_US": "Questo compito appartiene a", "TITLE_LINK_GO_OWNER": "Vai alla storia utente", - "ORIGIN_US": "Questo compito è stato creato da", - "TITLE_LINK_GO_ORIGIN": "Vai alla storia utente", - "BLOCKED": "Questo compito è bloccato", "TITLE_DELETE_ACTION": "Rimuovi compito", "LIGHTBOX_TITLE_BLOKING_TASK": "Sto bloccando il compito", "FIELDS": { - "MILESTONE": "Sprint", - "USER_STORY": "Storia utente", "IS_IOCAINE": "E' un'aspirina" }, - "ACTION_IOCAINE": "aspirina", "TITLE_ACTION_IOCAINE": "Sei stremato? Assicurati che gli altri lo sappiano cliccando su 'aspirina' quando stai lavorando su compito che ti affatica. Ma non demordere, ricordati: si può migliorare solo se di tanto in tanto si accettano sfide extra!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Criticitá - {{projectName}}", "PAGE_DESCRIPTION": "Il pannello con la lista dei problemi del progetto {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "problemi", "SECTION_NAME": "Problema", "ACTION_NEW_ISSUE": "+ NUOVA CRITICITÁ", "ACTION_PROMOTE_TO_US": "Promuovi la storia utente", "PROMOTED": "Il problema è stato promosso a storia utente", "EXTERNAL_REFERENCE": "Questo problema è stato creato da ", "GO_TO_EXTERNAL_REFERENCE": "Ritorna all'inizio", - "BLOCKED": "Questo problema è bloccato", "ACTION_DELETE": "Elimina problema", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Issue bloccante", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Ripiega la colonna", "TITLE_ACTION_UNFOLD": "Riapri la colonna", - "TITLE_ACTION_FOLD_CARDS": "ripiega la scheda", - "TITLE_ACTION_UNFOLD_CARDS": "Apri le carte", "TITLE_ACTION_ADD_US": "Aggiungi una nuova storia utente", "TITLE_ACTION_ADD_BULK": "Aggiungi un nuovo carico", "ACTION_SHOW_ARCHIVED": "Mostra archivio", "ACTION_HIDE_ARCHIVED": "Nascondi archivio", "HIDDEN_USER_STORIES": "Le storie utente in questo status sono nascoste by default", - "ARCHIVED": "Hai archiviato", - "UNDO_ARCHIVED": "Trascina e lascia di nuovo per annullare", "PLACEHOLDER_CARD_TITLE": "Queste sono le tue storie utente.", "PLACEHOLDER_CARD_TEXT": "Le storie possono anche avere dei sotto-compiti che separano i requisiti" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Team - {{projectName}}", "PAGE_DESCRIPTION": "Il pannello del team da mostrare a tutti i membri del progetto {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Squadra", - "APP_TITLE": "TEAM - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Cerca con il nome completo", "COLUMN_MR_WOLF": "Mr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Problema chiuso", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Tutti", "OPTION_INVOLVED": "Coinvolto", "OPTION_NONE": "Nessuno" - }, - "POPOVER": { - "USER_PROFILE": "Profilo utente", - "CHANGE_PASSWORD": "Cambia Password", - "NOTIFICATIONS": "Notifiche", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "Preferenze utente" } }, "USER_PROFILE": { - "IMAGE_HELP": "L'immagine sarà scalata a 80x80px.", - "ACTION_CHANGE_IMAGE": "Cambia", "ACTION_USE_GRAVATAR": "Usa l'immagine di default", "ACTION_DELETE_ACCOUNT": "Elimina l'account Taiga", "CHANGE_EMAIL_SUCCESS": "Controlla la tua casella di posta
    abbiamo mandato una mail al tuo account
    con le istruzioni per impostare un nuovo indirizzo", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "L'ultima versione su {{lastModifiedDate}} ({{totalEditions}} versioni in totale) Contenuto: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Crea la tua pagina wiki", "REMOVE": "Rimuovi questa pagina wiki", "DELETE_LIGHTBOX_TITLE": "Elimina Pagina Wiki", "DELETE_LINK_TITLE": "Cancella collegamento Wiki", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Preferiti", "MOST_LIKED_EMPTY": "Non ci sono ancora progetti PREFERITI", "VIEW_MORE": "Vedi altro", - "RECRUITING": "Il progetto cerca persone", "FEATURED": "Progetti in Vetrina", "EMPTY": "Non ci sono progetti da mostrare con questi criteri.
    Prova ancora!", "FILTERS": { diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index 7d2957d2..d185bb8f 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -4,7 +4,6 @@ "NO": "いいえ", "OR": "または", "LOADING": "ロード中...", - "LOADING_PROJECT": "プロジェクトを読み込んでいます...", "DATE": "YYYY年MM月DD日", "DATETIME": "YYYY年MM月DD日 HH時mm分", "SAVE": "保存", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "なぜこれはブロックされているのか?", "BLOCKED_REASON": "理由を説明してください", "CREATED_BY": "{{fullDisplayName}} によって作成", - "FROM": "from", - "TO": "to", "CLOSE": "閉じる", "GO_HOME": "ホームに戻る", "PLUGINS": "プラグイン", - "BETA": "これはベータ版です!", "ONE_ITEM_LINE": "1行に1アイテム", "NEW_BULK": "一括登録", "RELATED_TASKS": "関連タスク", @@ -148,7 +144,6 @@ "PRIORITY": "優先度", "ASSIGNED_TO": "担当者", "POINTS": "ポイント", - "BLOCKED_NOTE": "ブロックノート", "IS_BLOCKED": "はブロックされています。", "REF": "参照", "VOTES": "投票", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{one watcher} other{# 人がフォロー中}}" }, "VOTE_BUTTON": { - "UPVOTE": "賛成", - "UPVOTED": "賛成", - "DOWNVOTE": "反対", - "VOTERS": "投票者", "BUTTON_TITLE": "賛成/反対の投票を行う", "COUNTER_TITLE": "{total, plural, one{one vote} other{# 人が賛成}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Subject or reference", "TITLE_ACTION_FILTER_BUTTON": "検索", "TITLE": "フィルター", - "INPUT_SEARCH_PLACEHOLDER": "Subject or ref", "TITLE_ACTION_SEARCH": "検索", "ACTION_SAVE_CUSTOM_FILTER": "カスタムフィルターとして保存する", "PLACEHOLDER_FILTER_NAME": "フィルター名を入力しエンターキーを押してください。", @@ -220,16 +210,10 @@ "CREATED_BY": "作成者", "CUSTOM_FILTERS": "カスタムフィルター", "EPIC": "エピック" - }, - "CONFIRM_DELETE": { - "TITLE": "カスタムフィルターを削除", - "MESSAGE": "カスタムフィルター '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "あなたが編集中に別のユーザーが変更を加えました。あなたの変更点を保存する前に、アクティビティタブで新しいバージョンを確認してください。", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown記法のヘルプ" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Wikiリンクを追加", "DELETE_WIKI_LINKS": "Wikiリンクの削除" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga is a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "パスワードの変更 - Taiga", - "PAGE_DESCRIPTION": "あなたのTaigaアカウントに新しいパスワードを設定します。そして、いくつかの鉄分豊富な食品を摂取しましょう!脳にとって良いことです :-P", "SECTION_NAME": "パスワード変更", "FIELD_CURRENT_PASSWORD": "現在のパスワード", "PLACEHOLDER_CURRENT_PASSWORD": "現在のパスワード (パスワードが未設定の場合は空)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "「あなたの招待を確認できなかった」とウンパルンパたちが言っています。", - "SUCCESS": "プロジェクトへの参加に成功しました, {{project_name}}へようこそ", - "ERROR": "「あなたのアカウントはまだ登録されていないか無効なパスワードが入力された」とウンパルンパたちが言っています。" + "SUCCESS": "プロジェクトへの参加に成功しました, {{project_name}}へようこそ" }, "HOME": { "PAGE_TITLE": "ホーム - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "添付ファイルの削除...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "添付ファイル '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": " 削除に失敗: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。", - "FIELDS": { - "IS_DEPRECATED": "は非推奨です。" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。" }, "PAGINATION": { "PREVIOUS": "前へ", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "準備が出来たらメールで通知します。", "SYNC_MESSAGE": "ダウンロードが自動で開始されない場合はこちらをクリックしてください。", "ERROR": "ウンパルンパたちはダンプファイルの生成に手こずっているようです。もう一度お試しください。", - "ERROR_BUSY": "すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。", - "ERROR_MESSAGE": "ウンパルンパたちはダンプファイルの生成に手こずっているようです。{{message}}" + "ERROR_BUSY": "すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。" }, "MODULES": { "TITLE": "モジュール", - "ENABLE": "有効", - "DISABLE": "無効", "EPICS": "エピック", "EPICS_DESCRIPTION": "あなたのプロジェクトの最も戦略的な部分を視覚化し、管理する", "BACKLOG": "バックログ", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - プロジェクトプロフィール - {{projectName}}", "PROJECT_DETAILS": "プロジェクト詳細", "PROJECT_NAME": "プロジェクト名", - "PROJECT_SLUG": "プロジェクトのスラッグ", "TAGS": "タグ", "DESCRIPTION": "説明", "RECRUITING": "プロジェクトメンバーを探していますか?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "非公開プロジェクト", "PRIVATE_OR_PUBLIC": "パブリックプロジェクトとプライベートプロジェクトの違いは何ですか?", "DELETE": "このプロジェクトを削除", - "LOGO_HELP": "画像は縦横80ピクセルに変換されます。", "CHANGE_LOGO": "ロゴを変更", "ACTION_USE_DEFAULT_LOGO": "デフォルトのイメージを使用する", "MAX_PRIVATE_PROJECTS": "あなたの現在のプランで許可されている非公開プロジェクトの上限数に達しました。", @@ -654,7 +624,7 @@ }, "GITHUB": { "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Webhookは外部サービスへコメントやユーザーストーリーといったTaigaのイベントを通知します。", "ADD_NEW": "新規Webhookを追加", "TYPE_NAME": "サービス名を入力", "TYPE_PAYLOAD_URL": "サービスペイロードのURLを入力", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "メンバーを削除", "RESEND": "再送信", "SUCCESS_SEND_INVITATION": "招待メールを '{{email}}' へもう一度送りました。", - "ERROR_SEND_INVITATION": "招待はまだ送られていません。", "SUCCESS_DELETE": "{{message}} を削除しました", "ERROR_DELETE": "{{message}} を削除できませんでした", "DEFAULT_DELETE_MESSAGE": "{{email}} への招待メール" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "新しいステータス名を記入" }, "MENU": { - "TITLE": "管理", "PROJECT": "プロジェクト", "ATTRIBUTES": "属性", "MEMBERS": "メンバー", "PERMISSIONS": "権限", - "INTEGRATIONS": "インテグレーション", - "PLUGINS": "プラグイン" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "属性" + "INTEGRATIONS": "インテグレーション" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "ステータス", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "カスタムフィールド", "TAGS": "タグ" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "プロジェクトプロフィール" - }, "SUBMENU_ROLES": { "TITLE": "役割", "ACTION_NEW_ROLE": "+ 新規役割", "TITLE_ACTION_NEW_ROLE": "新しい役割を追加" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "サービス" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "新しいプロジェクトオーナーとなりますか?", "PRIVATE": "プライベート", @@ -783,15 +740,13 @@ "PRIVATE": "あなたが持てる非公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。", "PUBLIC": "あなたが持てる公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。" }, - "CANT_BE_OWNED": "この種類のプロジェクトのオーナーには現在なれません。このプロジェクトのオーナーになりたい場合は管理者に問い合わせて、プロジェクトオーナー権限を変更してもらってください。", - "CHANGE_MY_PLAN": "プランを変更" + "CANT_BE_OWNED": "この種類のプロジェクトのオーナーには現在なれません。このプロジェクトのオーナーになりたい場合は管理者に問い合わせて、プロジェクトオーナー権限を変更してもらってください。" } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "プロフィールを編集", - "FOLLOW": "フォロー", "CLOSED_US": "完了したユーザーストーリー", "PROJECTS": "プロジェクト", "PROJECTS_EMPTY": "{{username}} はまだプロジェクトに参加していません", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} はまだ連絡先を持っていません", "CURRENT_USER_CONTACTS_EMPTY": "あなたへのコンタクトはまだありません。", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Taigaで一緒に仕事をしたメンバーは自動的に連絡先へ追加されます", - "REPORT": "悪用を報告", "TABS": { "ACTIVITY_TAB": "タイムライン", "ACTIVITY_TAB_TITLE": "このユーザのすべてのアクティビティーを表示する", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "すべて", "FILTER_TYPE_ALL_TITLE": "すべてを表示", "FILTER_TYPE_PROJECTS": "プロジェクト", - "FILTER_TYPE_PROJECT_TITLES": "プロジェクトのみ表示", + "FILTER_TYPE_PROJECTS_TITLE": "プロジェクトのみ表示", "FILTER_TYPE_EPICS": "エピック", - "FILTER_TYPE_EPIC_TITLES": "エピックのみ表示", + "FILTER_TYPE_EPICS_TITLE": "エピックのみ表示", "FILTER_TYPE_USER_STORIES": "ストーリー", - "FILTER_TYPE_USER_STORIES_TITLES": "ユーザーストーリーを表示", + "FILTER_TYPE_USER_STORIES_TITLE": "ユーザーストーリーを表示", "FILTER_TYPE_TASKS": "タスク", - "FILTER_TYPE_TASK_TITLES": "タスクのみ表示", + "FILTER_TYPE_TASKS_TITLE": "タスクのみ表示", "FILTER_TYPE_ISSUES": "課題", "FILTER_TYPE_ISSUES_TITLE": "課題のみ表示", "EMPTY_TITLE": "表示するものがありません。" @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "ようこそ", - "SECTION_PROJECTS": "プロジェクト", "HELP": "最も良く使うプロジェクトがトップになるように順序を入れ替えてみましょう。
    トップ10のプロジェクトが上のナビゲーションバーのプロジェクトリストに現れます。", "PRIVATE": "プライベート プロジェクト", "LOOKING_FOR_PEOPLE": "プロジェクトはメンバーを探しています", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "このプロジェクトは一時的にブロックされています。", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "プロジェクトのブロックを解除したい場合は管理者にお問い合わせください。" }, - "STATS": { - "PROJECT": "プロジェクト
    ポイント", - "DEFINED": "定義された
    ポイント", - "ASSIGNED": "アサイン済み
    ポイント", - "CLOSED": "closed
    points" - }, "SECTION": { "SEARCH": "検索", "TIMELINE": "タイムライン", @@ -870,13 +816,9 @@ "ADMIN": "管理" }, "NAVIGATION": { - "SECTION_TITLE": "あなたのプロジェクト", - "PLACEHOLDER_SEARCH": "検索...", "ACTION_CREATE_PROJECT": "プロジェクトを作成", "MANAGE_PROJECTS": "プロジェクト管理", "TITLE_CREATE_PROJECT": "プロジェクトを作成", - "TITLE_PRVIOUS_PROJECT": "前のプロジェクトを表示", - "TITLE_NEXT_PROJECT": "次のプロジェクトを表示", "HELP_TITLE": "Taiga サポートページ", "HELP": "ヘルプ", "HOMEPAGE": "ホームページ", @@ -884,10 +826,6 @@ "FEEDBACK": "フィードバック", "NOTIFICATIONS_TITLE": "通知設定を編集", "NOTIFICATIONS": "通知", - "ORGANIZATIONS_TITLE": "あなたの組織を編集してください", - "ORGANIZATIONS": "組織を編集", - "SETTINGS_TITLE": "設定を編集", - "SETTINGS": "設定", "VIEW_PROFILE_TITLE": "プロフィールを表示", "VIEW_PROFILE": "プロフィールを表示", "EDIT_PROFILE_TITLE": "プロフィールを編集", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "パスワード変更", "DASHBOARD_TITLE": "ダッシュボード", "DISCOVER_TITLE": "トレンドプロジェクトを探す", - "NEW_ITEM": "新規", - "DISCOVER": "探す", - "ACTION_REORDER": "ドラッグ&ドロップで入れ替え" + "DISCOVER": "探す" }, "LIKE_BUTTON": { "LIKE": "いいね", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "プロジェクトを作成", - "FRESH": "フレッシュでクリーン。わくわくしますね!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "スクラム", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,27 +881,17 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "パブリック プロジェクト", - "PRIVATE_PROJECT": "プライベート プロジェクト", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "プライベート プロジェクト" }, "COMMON": { "DETAILS": "New project details", - "PROJECT_TITLE": "Project Name", + "PROJECT_TITLE": "プロジェクト名", "PROJECT_DESCRIPTION": "Project Description" }, "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "フレッシュでクリーン。わくわくしますね!", - "CHOOSE_TEMPLATE_TITLE": "プロジェクトテンプレートの詳細", - "CHOOSE_TEMPLATE_INFO": "詳細表示", - "PROJECT_DETAILS": "プロジェクト詳細", - "PUBLIC_PROJECT": "パブリック プロジェクト", - "PRIVATE_PROJECT": "プライベート プロジェクト", - "CREATE_PROJECT": "プロジェクトを作成", - "CHANGE_PLANS": "プランを変更" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。", "SYNC_SUCCESS": "プロジェクトのインポートに成功しました", "IMPORT": "Import", - "ARCHIVED": "アーカイブ", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "プロジェクトメンバー", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -997,9 +919,9 @@ "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "アサイン", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "NO_RESULTS": "検索条件に当てはまるものはありませんでした。", + "ACTION_SEARCH": "検索", + "ACTION_BACK": "バックエンド" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "プロジェクトメンバー", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "かんばん", "SCRUM_PROJECT": "スクラム", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "プロジェクトメンバー" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "プロジェクトメンバー", "KANBAN_PROJECT": "かんばん", "SCRUM_PROJECT": "スクラム", "ISSUES_PROJECT": "課題", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Taigaアカウントを削除", "CONFIRM": "本当にあなたのTaigaアカウントを削除してもよろしいですか?", - "NEWSLETTER_LABEL_TEXT": "ニュースレターを購読しない", "CANCEL": "設定に戻る", "ACCEPT": "アカウントを削除する", - "BLOCK_PROJECT": "あなたが所有しているプロジェクトは、あなたのアカウント削除後にブロックされることを覚えておいてください。あなたのアカウントが削除されてプロジェクトがブロックされる前にプロジェクトの所有権を他のメンバーに譲渡してください。", - "SUBTITLE": "お別れすることになって残念です。またのご利用をお待ちしております :(" + "BLOCK_PROJECT": "あなたが所有しているプロジェクトは、あなたのアカウント削除後にブロックされることを覚えておいてください。あなたのアカウントが削除されてプロジェクトがブロックされる前にプロジェクトの所有権を他のメンバーに譲渡してください。" }, "DELETE_PROJECT": { "TITLE": "プロジェクトを削除", @@ -1217,15 +1129,9 @@ "ADD_BULK": "新規ユーザーストーリーを一括で追加する", "PROMOTED": "このユーザーストーリーはこちらの課題から発展:", "TITLE_LINK_GO_TO_ISSUE": "課題へ移動", - "EXTERNAL_REFERENCE": "This US has been created from", - "GO_TO_EXTERNAL_REFERENCE": "originへ移動", - "BLOCKED": "このユーザーストーリーはブロックされています", "TITLE_DELETE_ACTION": "ユーザーストーリーを削除", "LIGHTBOX_TITLE_BLOKING_US": "Blocking us", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} タスク完了", - "ASSIGN": "ユーザーストーリーの割当", "NOT_ESTIMATED": "見積もりが行われていません", - "TOTAL_US_POINTS": "合計ユーザーストーリーポイント", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "詳細表示", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "チームからの要求", - "CLIENT_REQUIREMENT": "お客様からの要求", - "FINISH_DATE": "終了日" + "CLIENT_REQUIREMENT": "お客様からの要求" } }, "COMMENTS": { "DELETED_INFO": "{{user}}によってコメントは削除されました。", - "TITLE": "コメント", "COMMENTS_COUNT": "{{comments}}コメント", - "ORDER": "順番", "OLDER_FIRST": "古い順", "RECENT_FIRST": "新しい順", "COMMENT": "コメント", - "EDIT_COMMENT": "コメントを編集", "EDITED_COMMENT": "編集済み:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "新しいコメントをここに入力", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "アクティビティを表示", - "DATETIME": "YYYY年MM月DD日 HH時mm分", - "SHOW_MORE": "+ 前のエントリーを表示 ({{showMore}} more)", "TITLE": "アクティビティ", "ACTIVITIES_COUNT": "{{activities}} アクティビティー", - "REMOVED": "削除", - "ADDED": "追加", "TAGS_ADDED": "追加したタグ:", "TAGS_REMOVED": "削除したタグ:", "US_POINTS": "{{role}} ポイント", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "更新された添付ファイル ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "カスタム属性を作成しました", "UPDATED_CUSTOM_ATTRIBUTE": "カスタム属性を更新しました", - "SIZE_CHANGE": "Made {size, plural, one{one change} other{# changes}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "チームからの要求", "CLIENT_REQUIREMENT": "お客様からの要求", "BLOCKED": "ブロック中", "VALUES": { - "YES": "はい", - "NO": "no", - "EMPTY": "空", "UNASSIGNED": "未割当" }, "FIELDS": { "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": "is iocaine", - "TAGS": "タグ", - "ATTACHMENTS": "添付ファイル", - "IS_DEPRECATED": "は非推奨です。", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "表示順", - "BACKLOG_ORDER": "バックログオーダー", - "SPRINT_ORDER": "スプリントオーダー", - "KANBAN_ORDER": "かんばんオーダー", - "TASKBOARD_ORDER": "タスクボードオーダー", - "US_ORDER": "ユーザーストーリー順", "COLOR": "色" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "管理ユーザーでポイントとスプリントを設定してください。", "MOVE_US_TO_CURRENT_SPRINT": "現在のスプリントに移動", "MOVE_US_TO_LATEST_SPRINT": "最新のスプリントに移動", - "SHOW_FILTERS": "フィルターを表示", - "SHOW_TAGS": "タグを表示", "EMPTY": "バックログが空です!", "CREATE_NEW_US": "新規US作成", "CREATE_NEW_US_EMPTY_HELP": "新しくユーザーストーリーを作成してください。", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "フィルター表示を固定", - "TITLE": "フィルター", - "REMOVE": "フィルターを削除", "HIDE": "フィルターを非表示", "SHOW": "フィルターを表示" }, @@ -1402,7 +1266,6 @@ "DATE": "YYYY年MM月DD日", "LINK_TASKBOARD": "スプリントタスクボード", "TITLE_LINK_TASKBOARD": "タスクボード{{name}}へ移動", - "NUMBER_SPRINTS": "
    スプリント", "EMPTY": "まだスプリントはありません", "WARNING_EMPTY_SPRINT_ANONYMOUS": "This sprint has no User Stories", "WARNING_EMPTY_SPRINT": "新しいスプリントを始めるために、バックログからストーリーをここにドロップしてください。", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "新規タスクを追加", "TITLE_ACTION_ADD_BULK": "新規タスクを一括で追加する", "TITLE_ACTION_ASSIGN": "タスクをアサイン", - "TITLE_ACTION_EDIT": "タスクを編集", "PLACEHOLDER_CARD_TITLE": "This could be a task", "PLACEHOLDER_CARD_TEXT": "ストーリーを分割しタスクとして別管理する。", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "ステータス名", "OWNER_US": "このタスクはこちらに属しています。", "TITLE_LINK_GO_OWNER": "ユーザーストーリーに移動", - "ORIGIN_US": "このタスクはこちらから作成されました。", - "TITLE_LINK_GO_ORIGIN": "ユーザーストーリーに移動", - "BLOCKED": "このタスクはブロックされています。", "TITLE_DELETE_ACTION": "タスクを削除", "LIGHTBOX_TITLE_BLOKING_TASK": "Blocking task", "FIELDS": { - "MILESTONE": "スプリント", - "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": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "課題 - {{projectName}}", "PAGE_DESCRIPTION": "課題一覧パネル {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "課題", "SECTION_NAME": "課題", "ACTION_NEW_ISSUE": "+ 新規 ISSUE", "ACTION_PROMOTE_TO_US": "ユーザーストーリーに変更する", "PROMOTED": "この課題はこちらのユーザーストーリーへ発展:", "EXTERNAL_REFERENCE": "課題の作成元: ", "GO_TO_EXTERNAL_REFERENCE": "originへ移動", - "BLOCKED": "この課題はブロックされています", "ACTION_DELETE": "Issue を削除", "LIGHTBOX_TITLE_BLOKING_ISSUE": "ブロックしている Issue", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "かんばん", "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": "The user stories in this status are hidden by default", - "ARCHIVED": "アーカイブしました", - "UNDO_ARCHIVED": "アンドゥするにはドラッグ&ドロップしてください", "PLACEHOLDER_CARD_TITLE": "These are your User Stories", "PLACEHOLDER_CARD_TEXT": "Stories might also have subtasks to separate requirements" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "チーム - {{projectName}}", "PAGE_DESCRIPTION": "The team panel to show all the members of the project {{projectName}}: {{projectDescription}}", "SECTION_NAME": "チーム", - "APP_TITLE": "チーム - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "フルネームで検索する", "COLUMN_MR_WOLF": "Mr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "完了した課題", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "すべて", "OPTION_INVOLVED": "Involved", "OPTION_NONE": "なし" - }, - "POPOVER": { - "USER_PROFILE": "ユーザープロフィール", - "CHANGE_PASSWORD": "パスワードを変更", - "NOTIFICATIONS": "通知", - "FEEDBACK": "フィードバック", - "TITLE_AVATAR": "ユーザー設定" } }, "USER_PROFILE": { - "IMAGE_HELP": "画像は縦横80ピクセルに変換されます。", - "ACTION_CHANGE_IMAGE": "変更", "ACTION_USE_GRAVATAR": "デフォルトのイメージを使用する", "ACTION_DELETE_ACCOUNT": "Taigaアカウントを削除", "CHANGE_EMAIL_SUCCESS": "メールボックスを確認してください!
    新しいメールアドレスを設定するための手順を送信しました。", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "{{lastModifiedDate}} に最後に編集がありました。(合計 {{totalEditions}} 件) 内容: {{ wikiPageContent }}", "DATETIME": "YYYY年MM月DD日 HH時mm分", - "PLACEHOLDER_PAGE": "Wikiページを作成", "REMOVE": "このWikiページを削除", "DELETE_LIGHTBOX_TITLE": "Wikiページを削除", "DELETE_LINK_TITLE": "Wikiリンクを削除", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "最も好まれているプロジェクト", "MOST_LIKED_EMPTY": "「いいね」されたプロジェクトはまだありません", "VIEW_MORE": "もっと見る", - "RECRUITING": "プロジェクトはメンバーを探しています", "FEATURED": "注目プロジェクト", "EMPTY": "該当するプロジェクトがありませんでした。
    検索条件を変えて再度試してみてください!", "FILTERS": { diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index 320e5ed1..c058e808 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -4,7 +4,6 @@ "NO": "아니오", "OR": "또는", "LOADING": "불러오는 중...", - "LOADING_PROJECT": "프로젝트 불러오는 중...", "DATE": "YYYY MMM DD", "DATETIME": "YYYY MMM DD HH:mm", "SAVE": "저장", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "왜 차단되었나요?", "BLOCKED_REASON": "이유를 적어주시겠어요?", "CREATED_BY": "{{fullDisplayName}} 님이 생성", - "FROM": "이전 상태", - "TO": "현재 상태", "CLOSE": "완료", "GO_HOME": "첫 화면으로 가기", "PLUGINS": "플러그인", - "BETA": "아직 베타 버전입니다!", "ONE_ITEM_LINE": "한 줄마다 하나씩...", "NEW_BULK": "여러개 생성하기", "RELATED_TASKS": "연관된 태스크", @@ -148,7 +144,6 @@ "PRIORITY": "우선순위", "ASSIGNED_TO": "할당됨", "POINTS": "포인트", - "BLOCKED_NOTE": "차단된 노트", "IS_BLOCKED": "차단됨", "REF": "참조", "VOTES": "투표", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{one watcher} other{# 명이 구독중}}" }, "VOTE_BUTTON": { - "UPVOTE": "공감하기", - "UPVOTED": "공감했음", - "DOWNVOTE": "비공감하기", - "VOTERS": "투표자", "BUTTON_TITLE": "이 아이템 공감/비공감", "COUNTER_TITLE": "{total, plural, one{one vote} other{# 명의 찬성}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "제목 또는 참조", "TITLE_ACTION_FILTER_BUTTON": "검색하기", "TITLE": "필터", - "INPUT_SEARCH_PLACEHOLDER": "제목 또는 참조", "TITLE_ACTION_SEARCH": "검색", "ACTION_SAVE_CUSTOM_FILTER": "커스컴 필터 저장하기", "PLACEHOLDER_FILTER_NAME": "필터 이름을 쓰고 엔터키를 누르세요", @@ -220,16 +210,10 @@ "CREATED_BY": "생성함", "CUSTOM_FILTERS": "사용자 정의 필터", "EPIC": "에픽" - }, - "CONFIRM_DELETE": { - "TITLE": "사용자 정의 필터 삭제하기", - "MESSAGE": "'{{customFilterName}}' 사용자 정의 필터" } }, "WYSIWYG": { "OUTDATED": "편집하는 동안 다른 사람이 변경했습니다. 변경 사항을 저장하기 전에 활성 탭에서 새 버전을 확인하십시오.", - "ATTACH_FILE_HELP": "파일을 텍스트 입력 공간에 드래그 & 드롭하여 첨부하세요.", - "ATTACH_FILE_HELP_SAVE_FIRST": "파일을 텍스트 입력란에 드래그 & 드롭하여 첨부하려면 먼저 저장해주세요.", "MARKDOWN_HELP": "마크다운 문법 도움말" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "위키 링크 추가하기", "DELETE_WIKI_LINKS": "위키 링크 삭제하기" } - }, - "META": { - "PAGE_TITLE": "타이가", - "PAGE_DESCRIPTION": "타이가는 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "비밀번호 변경하기 - 타이가", - "PAGE_DESCRIPTION": "새 비밀번호를 설정하세요. 그리고, 참! 철분이 많은 음식을 먹으면 기억력에 좋다네요. ^^", "SECTION_NAME": "비밀번호 변경하기", "FIELD_CURRENT_PASSWORD": "현재 비밀번호", "PLACEHOLDER_CURRENT_PASSWORD": "현재 비밀번호 (아직 설정한 적이 없다면 비워두세요)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "움파룸파가, 당신의 초대장을 못 찾았습니다.", - "SUCCESS": "{{project_name}} 프로젝트에 오신 것을 환영합니다.", - "ERROR": "움파룸파가 말하길, 등록되지 않은 사용자이거나 비밀번호를 틀렸다고 합니다." + "SUCCESS": "{{project_name}} 프로젝트에 오신 것을 환영합니다." }, "HOME": { "PAGE_TITLE": "홈페이지 - 타이가", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "첨부파일 삭제하기", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "첨부 파일 '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "삭제할 수 없었습니다: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", - "FIELDS": { - "IS_DEPRECATED": "지원안함" - } + "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요." }, "PAGINATION": { "PREVIOUS": "이전", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "작업이 끝나면 이메일로 알려드릴게요.", "SYNC_MESSAGE": "자동으로 다운로드가 시작되지 않는다면 여기를 클릭하세요.", "ERROR": "움파룸파가 덤프 파일을 만들 수 없었습니다. 다시 한 번 시도해주세요.", - "ERROR_BUSY": "죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?", - "ERROR_MESSAGE": "움파룸파가 덤프 파일을 만들 수 없었습니다. 다시 한 번 시도해주세요. {{message}}" + "ERROR_BUSY": "죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?" }, "MODULES": { "TITLE": "모듈", - "ENABLE": "활성화", - "DISABLE": "비활성화", "EPICS": "에픽", "EPICS_DESCRIPTION": "프로젝트의 가장 전략적인 부분을 시각화하고 관리합니다.", "BACKLOG": "백로그", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - 프로젝트 프로필 - {{projectName}}", "PROJECT_DETAILS": "프로젝트 세부사항", "PROJECT_NAME": "프로젝트 이름", - "PROJECT_SLUG": "프로젝트 슬러그", "TAGS": "태그", "DESCRIPTION": "설명", "RECRUITING": "이 프로젝트에 다른 사람이 필요합니까?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "비공개 프로젝트", "PRIVATE_OR_PUBLIC": "공공 프로젝트와 비공개 프로젝트의 차이점은 무엇입니까?", "DELETE": "프로젝트 삭제하기", - "LOGO_HELP": "이미지는 80x80px 크기로 보여집니다.", "CHANGE_LOGO": "로고 변경하기", "ACTION_USE_DEFAULT_LOGO": "기본 이미지 사용", "MAX_PRIVATE_PROJECTS": "당신에게 적용된 설정에서 허용하는 최대 비공개 프로젝트 수에 도달했습니다.", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Gitlab 요청은 IP를 이용해서 출처를 확인하는 방법으로 서명되지 않았습니다. 필드가 비어있을 경우, IP 유효성 검증이 되지 않습니다." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "웹훅 - {{projectName}}", "SECTION_NAME": "웹훅", - "SUBTITLE": "웹훅은 댓글, 유저 스토리 등 타이가의 이벤트를 외부 서비스에 알립니다.", "ADD_NEW": "웹훅 추가하기", "TYPE_NAME": "서비스 이름을 입력해 주세요", "TYPE_PAYLOAD_URL": "서비스 주소를 입력하세요", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "회원 삭제하기", "RESEND": "다시 보내기", "SUCCESS_SEND_INVITATION": "'{{email}}' 님에게 다시 초대장을 보냈습니다.", - "ERROR_SEND_INVITATION": "초대장을 보내지 못했습니다.", "SUCCESS_DELETE": "{{message}} 를 지웠습니다.", "ERROR_DELETE": "{{message}} 를 지울 수 없었습니다.", "DEFAULT_DELETE_MESSAGE": "{{email}} 초대하기" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "새 상태의 이름을 입력하세요" }, "MENU": { - "TITLE": "관리자", "PROJECT": "프로젝트", "ATTRIBUTES": "속성", "MEMBERS": "회원", "PERMISSIONS": "권한", - "INTEGRATIONS": "연동", - "PLUGINS": "플러그인" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "속성" + "INTEGRATIONS": "연동" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "상태", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "사용자 정의 필드", "TAGS": "태그" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "프로젝트 프로필" - }, "SUBMENU_ROLES": { "TITLE": "역할", "ACTION_NEW_ROLE": "역할 추가하기", "TITLE_ACTION_NEW_ROLE": "역할 추가하기" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "서비스" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "새 프로젝트의 소유자가 되고 싶습니까?", "PRIVATE": "비공개", @@ -783,15 +740,13 @@ "PRIVATE": "{{maxProjects}}개의 비공개 프로젝트를 소유 할 수 있음을 기억하십시오. 현재 당신은 {{currentProjects}}개의 비공개 프로젝트를 소유하고 있습니다.", "PUBLIC": "{{maxProjects}}개의 공공 프로젝트를 소유 할 수 있음을 기억하십시오. 현재 당신은 {{currentProjects}}개의 공공 프로젝트를 소유하고 있습니다." }, - "CANT_BE_OWNED": "현재 이 유형의 프로젝트 소유자가 될 수 없습니다. 이 프로젝트의 소유자가되고 싶다면 관리자에게 문의하여 프로젝트 소유권을 사용하도록 계정 설정을 변경하십시오.", - "CHANGE_MY_PLAN": "내 계획 변경하기" + "CANT_BE_OWNED": "현재 이 유형의 프로젝트 소유자가 될 수 없습니다. 이 프로젝트의 소유자가되고 싶다면 관리자에게 문의하여 프로젝트 소유권을 사용하도록 계정 설정을 변경하십시오." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "프로필 수정하기", - "FOLLOW": "팔로우", "CLOSED_US": "완료한 유저 스토리", "PROJECTS": "프로젝트", "PROJECTS_EMPTY": "{{username}} 님은 아직 프로젝트가 없습니다", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} 님은 연락처가 없습니다", "CURRENT_USER_CONTACTS_EMPTY": "연락처가 없습니다", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "타이가에서 일하는 사람들은 자동으로 당신의 연락처가 됩니다.", - "REPORT": "부당행위 보고서", "TABS": { "ACTIVITY_TAB": "타임라인", "ACTIVITY_TAB_TITLE": "이 사용자의 전체 액티비티 보기", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "전체", "FILTER_TYPE_ALL_TITLE": "모두 보기", "FILTER_TYPE_PROJECTS": "프로젝트", - "FILTER_TYPE_PROJECT_TITLES": "프로젝트만 보기", + "FILTER_TYPE_PROJECTS_TITLE": "프로젝트만 보기", "FILTER_TYPE_EPICS": "에픽", - "FILTER_TYPE_EPIC_TITLES": "에픽만 보기", + "FILTER_TYPE_EPICS_TITLE": "에픽만 보기", "FILTER_TYPE_USER_STORIES": "스토리", - "FILTER_TYPE_USER_STORIES_TITLES": "유저 스토리만 보기", + "FILTER_TYPE_USER_STORIES_TITLE": "유저 스토리만 보기", "FILTER_TYPE_TASKS": "태스크", - "FILTER_TYPE_TASK_TITLES": "태스크만 보기", + "FILTER_TYPE_TASKS_TITLE": "태스크만 보기", "FILTER_TYPE_ISSUES": "이슈", "FILTER_TYPE_ISSUES_TITLE": "이슈만 보기", "EMPTY_TITLE": "여기엔 보여 줄 수 있는게 하나도 없네요." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "환영합니다", - "SECTION_PROJECTS": "프로젝트", "HELP": "자주 사용하는 프로젝트들을 상위로 올려보세요.
    상위 10개 프로젝트는 내비게이션 바의 프로젝트 목록에 나타납니다.", "PRIVATE": "비공개 프로젝트", "LOOKING_FOR_PEOPLE": "이 프로젝트는 사람을 찾고 있습니다.", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "이 프로젝트는 임시로 차단되었습니다.", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "프로젝트의 차단을 해제하려면 관리자에게 문의하십시오." }, - "STATS": { - "PROJECT": "프로젝트
    포인트", - "DEFINED": "정의된
    포인트", - "ASSIGNED": "할당받은
    포인트", - "CLOSED": "완료한
    포인트" - }, "SECTION": { "SEARCH": "검색", "TIMELINE": "타임라인", @@ -870,13 +816,9 @@ "ADMIN": "관리자" }, "NAVIGATION": { - "SECTION_TITLE": "프로젝트", - "PLACEHOLDER_SEARCH": "검색하기", "ACTION_CREATE_PROJECT": "프로젝트 생성하기", "MANAGE_PROJECTS": "프로젝트 관리하기", "TITLE_CREATE_PROJECT": "프로젝트 생성하기", - "TITLE_PRVIOUS_PROJECT": "이전 프로젝트 보기", - "TITLE_NEXT_PROJECT": "다음 프로젝트 보기", "HELP_TITLE": "타이가 고객 지원 페이지", "HELP": "도움말", "HOMEPAGE": "홈페이지", @@ -884,10 +826,6 @@ "FEEDBACK": "피드백", "NOTIFICATIONS_TITLE": "알림 설정 수정", "NOTIFICATIONS": "알림", - "ORGANIZATIONS_TITLE": "소속 기관 수정", - "ORGANIZATIONS": "조직 수정", - "SETTINGS_TITLE": "설정 수정", - "SETTINGS": "설정", "VIEW_PROFILE_TITLE": "프로필 보기", "VIEW_PROFILE": "프로필 보기", "EDIT_PROFILE_TITLE": "프로필 수정하기", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "비밀번호 변경하기", "DASHBOARD_TITLE": "대시보드", "DISCOVER_TITLE": "트렌드 프로젝트 찾기", - "NEW_ITEM": "신규", - "DISCOVER": "찾기", - "ACTION_REORDER": "드래그&드롭으로 순서 바꾸기" + "DISCOVER": "찾기" }, "LIKE_BUTTON": { "LIKE": "좋아요", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "프로젝트 생성하기", - "FRESH": "시원하고 개운하네요! 너무 신나요!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "스크럼", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "공개된 프로젝트", - "PRIVATE_PROJECT": "비공개 프로젝트", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "비공개 프로젝트" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "시원하고 개운하네요! 너무 신나요!", - "CHOOSE_TEMPLATE_TITLE": "프로젝트 템플릿에 대한 더 많은 정보", - "CHOOSE_TEMPLATE_INFO": "더 많은 정보", - "PROJECT_DETAILS": "프로젝트 세부사항", - "PUBLIC_PROJECT": "공개된 프로젝트", - "PRIVATE_PROJECT": "비공개 프로젝트", - "CREATE_PROJECT": "프로젝트 생성하기", - "CHANGE_PLANS": "계획 변경하기" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.", "SYNC_SUCCESS": "프로젝트를 불러오는 데 성공했습니다.", "IMPORT": "Import", - "ARCHIVED": "보관됨", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "프로젝트 회원", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -997,9 +919,9 @@ "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "할당", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "NO_RESULTS": "검색 기준에 아무 것도 발견되지 않았습니다.", + "ACTION_SEARCH": "검색하기", + "ACTION_BACK": "이전" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "프로젝트 회원", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "칸반", "SCRUM_PROJECT": "스크럼", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "프로젝트 회원" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "프로젝트 회원", "KANBAN_PROJECT": "칸반", "SCRUM_PROJECT": "스크럼", "ISSUES_PROJECT": "이슈", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "타이가 계정 삭제하기", "CONFIRM": "타이가 계정을 정말로 삭제하시겠어요?", - "NEWSLETTER_LABEL_TEXT": "뉴스레터를 더이상 받지 않고 싶습니다.", "CANCEL": "설정으로 돌아가기", "ACCEPT": "계정 삭제", - "BLOCK_PROJECT": "계정을 삭제한 후에는 당신이 소유하고 있는 모든 프로젝트가 차단됩니다. 이걸 원치 않으시면, 계정을 삭제하기 전에 프로젝트 소유권을 다른 회원에게 넘겨주세요.", - "SUBTITLE": "떠나서 아쉽네요. 다시 올때까지 기다릴게요! :(" + "BLOCK_PROJECT": "계정을 삭제한 후에는 당신이 소유하고 있는 모든 프로젝트가 차단됩니다. 이걸 원치 않으시면, 계정을 삭제하기 전에 프로젝트 소유권을 다른 회원에게 넘겨주세요." }, "DELETE_PROJECT": { "TITLE": "프로젝트 삭제하기", @@ -1217,15 +1129,9 @@ "ADD_BULK": "유저 스토리 여러개 생성하기", "PROMOTED": "이 유저 스토리는 이슈에서 만들어졌음", "TITLE_LINK_GO_TO_ISSUE": "이슈로 가기", - "EXTERNAL_REFERENCE": "이 유저 스토리가 만들어 진 곳 ", - "GO_TO_EXTERNAL_REFERENCE": "원본으로 가기", - "BLOCKED": "이 유저 스토리는 차단되었습니다.", "TITLE_DELETE_ACTION": "유저 스토리 삭제하기", "LIGHTBOX_TITLE_BLOKING_US": "블로킹 유저 스토리", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} 태스크가 완료됨", - "ASSIGN": "유저 스토리 할당하기", "NOT_ESTIMATED": "추산되지 않음", - "TOTAL_US_POINTS": "전체 유저 스토리 포인트", "TRIBE": { "PUBLISH": "Tiaga Tribe의 Gig으로 배포하기", "PUBLISH_INFO": "더 많은 정보", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "팀 요구 사항", - "CLIENT_REQUIREMENT": "고객 요구 사항", - "FINISH_DATE": "마감일" + "CLIENT_REQUIREMENT": "고객 요구 사항" } }, "COMMENTS": { "DELETED_INFO": "{{user}} 에 의해 댓글이 지워짐.", - "TITLE": "댓글", "COMMENTS_COUNT": "{{comments}} 댓글", - "ORDER": "순서", "OLDER_FIRST": "오랜된 순으로", "RECENT_FIRST": "최신 순으로", "COMMENT": "댓글", - "EDIT_COMMENT": "댓글 수정", "EDITED_COMMENT": "수정됨:", "SHOW_HISTORY": "역사 보기", "TYPE_NEW_COMMENT": "댓글을 입력하세요", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "활동 내역 보기", - "DATETIME": "YYYY MMM DD HH:mm", - "SHOW_MORE": "+ 이전 항목 보기 ({{showMore}} 더 보기)", "TITLE": "활동 내역", "ACTIVITIES_COUNT": "{{activities}} 활동", - "REMOVED": "삭제됨", - "ADDED": "추가됨", "TAGS_ADDED": "태그 추가됨:", "TAGS_REMOVED": "태그 삭제됨:", "US_POINTS": "{{role}} 포인트", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "첨부 파일이 업데이트됨 ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "사용자 정의 속성 만들기", "UPDATED_CUSTOM_ATTRIBUTE": "사용자 정의 속성 업데이트하기", - "SIZE_CHANGE": "Made {size, plural, one{one change} other{# 개의 변경}}", "BECAME_DEPRECATED": "지원하지 않도록 되었습니다.", "BECAME_UNDEPRECATED": "다시 지원하도록 되었습니다.", "TEAM_REQUIREMENT": "팀 요구 사항", "CLIENT_REQUIREMENT": "고객 요구 사항", "BLOCKED": "차단됨", "VALUES": { - "YES": "예", - "NO": "아니오", - "EMPTY": "비었음", "UNASSIGNED": "할당되지 않음" }, "FIELDS": { "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": "지원안함", - "IS_NOT_DEPRECATED": "아직 지원중입니다.", - "ORDER": "순서", - "BACKLOG_ORDER": "백로그 순서", - "SPRINT_ORDER": "스프린트 순서", - "KANBAN_ORDER": "칸반 순서", - "TASKBOARD_ORDER": "태스크보드 순서", - "US_ORDER": "유저 스토리 순서", "COLOR": "색" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "관리자 메뉴에서 포인트와 스프린트를 설정하세요.", "MOVE_US_TO_CURRENT_SPRINT": "현재 스프린트로 옮기기", "MOVE_US_TO_LATEST_SPRINT": "가장 최근 스프린트로 옮기기", - "SHOW_FILTERS": "필터 보기", - "SHOW_TAGS": "태그 보기", "EMPTY": "백로그가 비었습니다!", "CREATE_NEW_US": "유저 스토리 생성하기", "CREATE_NEW_US_EMPTY_HELP": "새로운 유저 스토리를 만들어 보고 싶죠?", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "필터 보여짐 토글", - "TITLE": "필터", - "REMOVE": "필터 삭제하기", "HIDE": "필터 숨기기", "SHOW": "필터 보기" }, @@ -1402,7 +1266,6 @@ "DATE": "YYYY MMM DD", "LINK_TASKBOARD": "스프린트 태스크보드", "TITLE_LINK_TASKBOARD": "\"{{name}}\" 태스크보드로 가기", - "NUMBER_SPRINTS": "
    스프린트", "EMPTY": "스프린트가 아직 없습니다.", "WARNING_EMPTY_SPRINT_ANONYMOUS": "이 스프린트는 유저 스토리가 없습니다.", "WARNING_EMPTY_SPRINT": "새 스프린트를 추가하려면 백로그에서 스토리를 끌어 놓으세요", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "태스크 추가하기", "TITLE_ACTION_ADD_BULK": "태스트 여러개 생성하기", "TITLE_ACTION_ASSIGN": "태스크 할당하기", - "TITLE_ACTION_EDIT": "태스크 수정하기", "PLACEHOLDER_CARD_TITLE": "이것은 태스크가 될 수 있습니다.", "PLACEHOLDER_CARD_TEXT": "스토리를 여러 태스크로 나누고 개별적으로 추적하세요.", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "상태 이름", "OWNER_US": "이 태스크는 다음에 속합니다.", "TITLE_LINK_GO_OWNER": "유저 스토리로 가기", - "ORIGIN_US": "이 태스크가 만들어 진 곳", - "TITLE_LINK_GO_ORIGIN": "유저 스토리로 가기", - "BLOCKED": "이 태스크는 차단되었습니다.", "TITLE_DELETE_ACTION": "태스크 삭제하기", "LIGHTBOX_TITLE_BLOKING_TASK": "블로킹 태스크", "FIELDS": { - "MILESTONE": "스프린트", - "USER_STORY": "유저 스토리", "IS_IOCAINE": "독약인가요?" }, - "ACTION_IOCAINE": "독약", "TITLE_ACTION_IOCAINE": "이 태스크에 대해 조금 압박감을 느끼나요? 이 태스크를 수정할 때 아이오케인을 클릭해 다른 사람들에게 알리세요. 조금씩 이 독에 맞서면 이 (허구의)치명적인 독에 면역이 될 수 있습니다. 때로는 추가 도전 과제를 취함으로써 당신이 하는 일을 더 잘 할 수 있는 것 처럼 말이죠!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "이슈 - {{projectName}}", "PAGE_DESCRIPTION": "프로젝트 {{projectName}}: {{projectDescription}}의 이슈 목록 패널", - "LIST_SECTION_NAME": "이슈", "SECTION_NAME": "이슈", "ACTION_NEW_ISSUE": "이슈 추가하기", "ACTION_PROMOTE_TO_US": "유저 스토리에 등록하기", "PROMOTED": "이 이슈가 유저 스토리에 등록되었습니다.", "EXTERNAL_REFERENCE": "이 이슈가 만들어 진 곳은 ", "GO_TO_EXTERNAL_REFERENCE": "원본으로 가기", - "BLOCKED": "이 이슈는 차단되었습니다.", "ACTION_DELETE": "이슈 삭제하기", "LIGHTBOX_TITLE_BLOKING_ISSUE": "걸림돌이 되는 이슈", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "칸반", "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": "드래그&드롭으로 되돌리기", "PLACEHOLDER_CARD_TITLE": "당신의 유저 스토리들 입니다.", "PLACEHOLDER_CARD_TEXT": "스토리에는 요구 사항을 구분하는 하위 태스크가 있을 수도 있습니다." }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "팀 - {{projectName}}", "PAGE_DESCRIPTION": "프로젝트의 모든 회원들을 보여주기 위한 팀 패널 {{projectName}}: {{projectDescription}}", "SECTION_NAME": "팀", - "APP_TITLE": "팀 - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "전체 이름 검색하기", "COLUMN_MR_WOLF": "울프씨", "EXPLANATION_COLUMN_MR_WOLF": " 완료한 이슈", @@ -1610,18 +1459,9 @@ "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": "타이가 계정 삭제하기", "CHANGE_EMAIL_SUCCESS": "이메일 보관함을 확인하세요!
    새 주소를 설정할 수 있는 방법을
    이메일로 알려드렸습니다.", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - 위키 - {{projectName}}", "PAGE_DESCRIPTION": "{{lastModifiedDate}}에 최종 수정 (총 {{totalEditions}} 회 수정) 내용: {{ wikiPageContent }}", "DATETIME": "YYYY MMM DD HH:mm", - "PLACEHOLDER_PAGE": "위키 페이지를 만들어 보세요", "REMOVE": "이 위키 페이지 삭제하기", "DELETE_LIGHTBOX_TITLE": "위키 페이지 삭제하기", "DELETE_LINK_TITLE": "위키 링크 삭제하기", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "가장 인기있는", "MOST_LIKED_EMPTY": "아직 '좋아요' 표시한 프로젝트가 없습니다.", "VIEW_MORE": "더 보기", - "RECRUITING": "이 프로젝트는 사람을 찾고 있습니다.", "FEATURED": "주요 프로젝트", "EMPTY": "이 검색 기준으로 표시 할 프로젝트가 없습니다.
    다시 시도해주세요!", "FILTERS": { diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index 1ff6875f..e64df132 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -4,7 +4,6 @@ "NO": "Nei", "OR": "eller", "LOADING": "Laster...", - "LOADING_PROJECT": "Laster prosjekt...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Lagre", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Hvorfor er dette blokkert?", "BLOCKED_REASON": "Venligst forklar årsaken", "CREATED_BY": "Opprettet av {{fullDisplayName}}", - "FROM": "fra", - "TO": "til", "CLOSE": "lukk", "GO_HOME": "Led meg hjem", "PLUGINS": "Programtillegg", - "BETA": "Vi er i beta!", "ONE_ITEM_LINE": "En enhet per linje...", "NEW_BULK": "Ny sett (mange)", "RELATED_TASKS": "Relaterte oppgaver", @@ -148,7 +144,6 @@ "PRIORITY": "Prioritet", "ASSIGNED_TO": "Tildelt til", "POINTS": "Poeng", - "BLOCKED_NOTE": "blokkert notat", "IS_BLOCKED": "er blokkert", "REF": "Ref", "VOTES": "Stemmer", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{en følger} other{# følgere}}" }, "VOTE_BUTTON": { - "UPVOTE": "Stem på", - "UPVOTED": "Stemt på", - "DOWNVOTE": "Stem ned", - "VOTERS": "Stemmegivere", "BUTTON_TITLE": "Stem opp / Stem ned dette elementet", "COUNTER_TITLE": "{total, plural, one{en stemme} other{# stemmer}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Subjekt eller referanse", "TITLE_ACTION_FILTER_BUTTON": "Søk", "TITLE": "Filtre", - "INPUT_SEARCH_PLACEHOLDER": "Subjekt eller referanse", "TITLE_ACTION_SEARCH": "Søk", "ACTION_SAVE_CUSTOM_FILTER": "lagre som egendefinert filter", "PLACEHOLDER_FILTER_NAME": "Skriv filternavnet og trykk enter", @@ -220,16 +210,10 @@ "CREATED_BY": "Laget av", "CUSTOM_FILTERS": "Egendefinert filtre", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Slett egendefinert filter", - "MESSAGE": "det egendefinerte filteret '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown syntaks hjelp" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Legg til wiki-lenker", "DELETE_WIKI_LINKS": "Slett wiki-lenker" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga er en prosjektstyringsplatform for oppstartsbedrifter og agile utviklere & designere som vil ha et enkelt, nydelig verktøy som gjør arbeidet virkelig hyggelig." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Endre ditt passord - Taiga", - "PAGE_DESCRIPTION": "Angi et nytt passord for din Taiga konto og hei!, det kan være lurt å spise litt mer jern-rik mat, det er godt for hjernen din :P", "SECTION_NAME": "Endre passord", "FIELD_CURRENT_PASSWORD": "Nåværende passord", "PLACEHOLDER_CURRENT_PASSWORD": "Din nåværende passord (eller tomt hvis du ikke har ett)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Våre Oompa Loompas can ikke finne invitasjonen din.", - "SUCCESS": "Du er nå sluttet til prosjektet {{project_name}}, velkommen!", - "ERROR": "I følge våre Oompa Loompas har du ikke registert deg ennå eller skrevet et ugyldig passord" + "SUCCESS": "Du er nå sluttet til prosjektet {{project_name}}, velkommen!" }, "HOME": { "PAGE_TITLE": "Hjem - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Slett vedlegg...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "vedlegget '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Vi hadde ikke mulighet til å slette: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "Er foreldet" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Forrige", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Vi sender deg en epost når det er klart.", "SYNC_MESSAGE": "Hvis nedlastningen ikke starter automatisk, klikk her.", "ERROR": "Våre Oompa Loompaer har problemer med å generere din data dump. Vennligst prøv på nytt.", - "ERROR_BUSY": "Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter.", - "ERROR_MESSAGE": "Våre Oompa Loompaer har problemer med å generere din dump: {{message}}" + "ERROR_BUSY": "Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter." }, "MODULES": { "TITLE": "Moduler", - "ENABLE": "Aktiver", - "DISABLE": "Deaktiver", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Backlog", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Prosjektprofil - {{projectName}}", "PROJECT_DETAILS": "Prosjektdetaljer", "PROJECT_NAME": "Prosjektnavn", - "PROJECT_SLUG": "Prosjekt slug", "TAGS": "Etiketter", "DESCRIPTION": "Beskrivelse", "RECRUITING": "Leter dette prosjektet etter folk?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Privat prosjekt", "PRIVATE_OR_PUBLIC": "Hva er forskjellen mellom offentlige og private prosjekt?", "DELETE": "Slett dette prosjektet", - "LOGO_HELP": "Bildet vil bli skalert til 80x80px.", "CHANGE_LOGO": "Endre logo", "ACTION_USE_DEFAULT_LOGO": "Bruk standardbilde", "MAX_PRIVATE_PROJECTS": "Du har nådd maksimalt antall private prosjekter som tillates med din gjeldende plan", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "GitHub-forespørsler er ikke signert så den beste måten å verifisere opprinnelsen på er med IP. Hvis feltet er tomt blir det ingen IP validering." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webkoblinger", - "SUBTITLE": "Webkoblinger varsler eksterne tjenester om hendelser i Taiga, som kommentarer, brukerhistorier ....", "ADD_NEW": "Legg til en ny webkobling", "TYPE_NAME": "Skriv inn tjenestenavn", "TYPE_PAYLOAD_URL": "Skriv inn tjenestens payload url", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Slett medlem", "RESEND": "Send igjen", "SUCCESS_SEND_INVITATION": "Vi har sendt invitasjonen på nytt til '{{email}}'.", - "ERROR_SEND_INVITATION": "Vi har ikke sendt invitasjonen.", "SUCCESS_DELETE": "Vi har slettet {{message}}.", "ERROR_DELETE": "Vi har ikke vært i stand til å slette {{message}}.", "DEFAULT_DELETE_MESSAGE": "invitasjonen til {{epost}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Skriv et navn til den nye statusen" }, "MENU": { - "TITLE": "Admin", "PROJECT": "Prosjekt", "ATTRIBUTES": "Egenskaper", "MEMBERS": "Medlemmer", "PERMISSIONS": "Tilganger", - "INTEGRATIONS": "Integrasjoner", - "PLUGINS": "Programtillegg" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Egenskaper" + "INTEGRATIONS": "Integrasjoner" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Egendefinerte felter", "TAGS": "Etiketter" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Prosjektprofil" - }, "SUBMENU_ROLES": { "TITLE": "Roller", "ACTION_NEW_ROLE": "+ Ny rolle", "TITLE_ACTION_NEW_ROLE": "Legg til ny rolle" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Tjenester" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Har du lyst til å bli den nye prosjekteieren?", "PRIVATE": "Privat", @@ -783,15 +740,13 @@ "PRIVATE": "Husk, du kan eie opp til {{maxProjects}} private prosjekter. Du eier for tiden {{currentProjects}} private prosjekter", "PUBLIC": "Husk, du kan eie opp til {{maxProjects}} offentlige prosjekter. Du eier foreløpig {{currentProjects}} offentlige prosjekter" }, - "CANT_BE_OWNED": "For øyeblikket kan du ikke bli eier av et prosjekt av denne typen. Dersom du ønsker å bli eier av dette prosjektet, venligst kontakt en administrator så de kan endre dine kontoinstillinger slik at du kan eie et prosjekt.", - "CHANGE_MY_PLAN": "Endre min plan" + "CANT_BE_OWNED": "For øyeblikket kan du ikke bli eier av et prosjekt av denne typen. Dersom du ønsker å bli eier av dette prosjektet, venligst kontakt en administrator så de kan endre dine kontoinstillinger slik at du kan eie et prosjekt." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Endre profil", - "FOLLOW": "Følg", "CLOSED_US": "Lukket historie", "PROJECTS": "Prosjekter", "PROJECTS_EMPTY": "{{username}} har ikke prosjekter enda", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} har ingen kontakter enda", "CURRENT_USER_CONTACTS_EMPTY": "Du har ingen kontakter enda", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Personene som du jobber sammen med i Taiga vil automatisk bli dine kontakter", - "REPORT": "Rapporter misbruk", "TABS": { "ACTIVITY_TAB": "Tidslinje", "ACTIVITY_TAB_TITLE": "Vis all aktiviteten til denne brukeren", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Alle", "FILTER_TYPE_ALL_TITLE": "Vis alle", "FILTER_TYPE_PROJECTS": "Prosjekter", - "FILTER_TYPE_PROJECT_TITLES": "Vis kun prosjekter", + "FILTER_TYPE_PROJECTS_TITLE": "Vis kun prosjekter", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS_TITLE": "Show only epics", "FILTER_TYPE_USER_STORIES": "Historier", - "FILTER_TYPE_USER_STORIES_TITLES": "Vis kun brukerhistorier", + "FILTER_TYPE_USER_STORIES_TITLE": "Vis kun brukerhistorier", "FILTER_TYPE_TASKS": "Oppgaver", - "FILTER_TYPE_TASK_TITLES": "Vis kun oppgaver", + "FILTER_TYPE_TASKS_TITLE": "Vis kun oppgaver", "FILTER_TYPE_ISSUES": "Hendelser", "FILTER_TYPE_ISSUES_TITLE": "Vis kun hendelser", "EMPTY_TITLE": "Det ser ut som om det ikke er noe å vise her." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Velkommen", - "SECTION_PROJECTS": "Prosjekter", "HELP": "Reorganiser prosjektene dine etter de mest brukte.
    De topp 10 mest brukte prosjektene vil vises i navigasjonslenken på toppen.", "PRIVATE": "Privat prosjekt", "LOOKING_FOR_PEOPLE": "Dette prosjekter søker etter mennesker", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Dette prosjektet er midlertidig blokkert", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "For å avblokkere dine prosjekter, kontakt administratoren" }, - "STATS": { - "PROJECT": "prosjekt
    poeng", - "DEFINED": "definerte
    poeng", - "ASSIGNED": "tildelte
    poeng", - "CLOSED": "lukkede
    poeng" - }, "SECTION": { "SEARCH": "Søk", "TIMELINE": "Tidslinje", @@ -870,13 +816,9 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Dine prosjekter", - "PLACEHOLDER_SEARCH": "Søk i...", "ACTION_CREATE_PROJECT": "Opprett prosjekt", "MANAGE_PROJECTS": "Håndter prosjekter", "TITLE_CREATE_PROJECT": "Opprett prosjekt", - "TITLE_PRVIOUS_PROJECT": "Vis forrige prosjekter", - "TITLE_NEXT_PROJECT": "Vis neste prosjekter", "HELP_TITLE": "Taiga Brukerstøtte", "HELP": "Hjelp", "HOMEPAGE": "Hjemmeside", @@ -884,10 +826,6 @@ "FEEDBACK": "Tilbakemelding", "NOTIFICATIONS_TITLE": "Endre dine varslingsinstillinger", "NOTIFICATIONS": "Varsler", - "ORGANIZATIONS_TITLE": "Rediger dine organisasjoner", - "ORGANIZATIONS": "Endre organisasjoner", - "SETTINGS_TITLE": "Endre dine instillinger", - "SETTINGS": "Instillinger", "VIEW_PROFILE_TITLE": "Vis Profil", "VIEW_PROFILE": "Vis Profil", "EDIT_PROFILE_TITLE": "Rediger din profil", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Endre passord", "DASHBOARD_TITLE": "Dashbord", "DISCOVER_TITLE": "Oppdag populære prosjekter", - "NEW_ITEM": "Ny", - "DISCOVER": "Oppdag", - "ACTION_REORDER": "Dra & slipp for å omorganisere" + "DISCOVER": "Oppdag" }, "LIKE_BUTTON": { "LIKE": "Liker", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Opprett prosjekt", - "FRESH": "Friskt og stilrent. Så spennende!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Offentlig Prosjekt", - "PRIVATE_PROJECT": "Privat Prosjekt", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Privat Prosjekt" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Friskt og stilrent. Så spennende!", - "CHOOSE_TEMPLATE_TITLE": "Mer info om prosjektmaler", - "CHOOSE_TEMPLATE_INFO": "Mer info", - "PROJECT_DETAILS": "Prosjektdetaljer", - "PUBLIC_PROJECT": "Offentlig Prosjekt", - "PRIVATE_PROJECT": "Privat Prosjekt", - "CREATE_PROJECT": "Opprett prosjekt", - "CHANGE_PLANS": "endre planer" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})", "SYNC_SUCCESS": "Importen av ditt prosjekt var vellykket", "IMPORT": "Import", - "ARCHIVED": "Arkivert", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Prosjektmedlemmer", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -998,7 +920,7 @@ "ASSIGN": "Tildel", "PROJECT_SELECTOR": { "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", + "ACTION_SEARCH": "søk", "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Prosjektmedlemmer", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Prosjektmedlemmer" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Prosjektmedlemmer", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Hendelser", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Slett din Taiga konto", "CONFIRM": "Er du sikker på at du vil slette din Taiga konto?", - "NEWSLETTER_LABEL_TEXT": "Jeg vil ikke motta flere nyhetsbrev", "CANCEL": "Tilbake til instillinger", "ACCEPT": "Slett konto", - "BLOCK_PROJECT": "Merk at alle prosjektene der du står som eier vil bli blokkert etter at du sletter din konto. Dersom du ikke ønsker dette, overfør eierskapet til et annet medlem før du sletter kontoen.", - "SUBTITLE": "Det er synd å se at du forlater oss. Vi er her, skulle du noen sinne vurdere oss igjen! :(" + "BLOCK_PROJECT": "Merk at alle prosjektene der du står som eier vil bli blokkert etter at du sletter din konto. Dersom du ikke ønsker dette, overfør eierskapet til et annet medlem før du sletter kontoen." }, "DELETE_PROJECT": { "TITLE": "Slett prosjekt", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Legg til mange nye Brukerhistorier", "PROMOTED": "Denne Brukerhistorien har blitt oppgradert fra Hendelse:", "TITLE_LINK_GO_TO_ISSUE": "Gå til hendelse", - "EXTERNAL_REFERENCE": "Denne BH ble opprettet av", - "GO_TO_EXTERNAL_REFERENCE": "Gå til opphav", - "BLOCKED": "Denne brukerhistorien er blokkert", "TITLE_DELETE_ACTION": "Slett Brukerhistorie", "LIGHTBOX_TITLE_BLOKING_US": "Blokkerer oss", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} oppgaver ferdigstilt", - "ASSIGN": "Tildel Brukerhistorie", "NOT_ESTIMATED": "Ikke estimert", - "TOTAL_US_POINTS": "Total BH poeng", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "Mer info", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Team behov", - "CLIENT_REQUIREMENT": "Klientkrav", - "FINISH_DATE": "Sluttdato" + "CLIENT_REQUIREMENT": "Klientkrav" } }, "COMMENTS": { "DELETED_INFO": "Comment deleted by {{user}}", - "TITLE": "Kommentarer", "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", "OLDER_FIRST": "Older first", "RECENT_FIRST": "Recent first", "COMMENT": "Kommentar", - "EDIT_COMMENT": "Edit comment", "EDITED_COMMENT": "Edited:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Skriv en ny kommentar her", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Vis aktivitet", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Vis tidligere innlegg ({{showMore}} mer)", "TITLE": "Aktivitet", "ACTIVITIES_COUNT": "{{activities}} Activities", - "REMOVED": "fjernet", - "ADDED": "lagt til", "TAGS_ADDED": "tags added:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "Gjorde {size, plural, one{en endring} other{# endringer}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Team behov", "CLIENT_REQUIREMENT": "Klientkrav", "BLOCKED": "Blokkert", "VALUES": { - "YES": "ja", - "NO": "nei", - "EMPTY": "tomt", "UNASSIGNED": "ikke tildelt" }, "FIELDS": { "SUBJECT": "subjekt", - "NAME": "navn", "DESCRIPTION": "beskrivelse", - "CONTENT": "innhold", "STATUS": "status", - "IS_CLOSED": "er lukket", - "FINISH_DATE": "Sluttdato", "TYPE": "type", - "PRIORITY": "prioritet", - "SEVERITY": "Alvorlighetsgrad", "ASSIGNED_TO": "tildelt til", - "WATCHERS": "følgere", "MILESTONE": "sprint", - "USER_STORY": "brukerhistorie", - "PROJECT": "prosjekt", - "IS_BLOCKED": "er blokkert", - "BLOCKED_NOTE": "blokkert notat", - "POINTS": "poeng", - "CLIENT_REQUIREMENT": "klientkrav", - "TEAM_REQUIREMENT": "team behov", - "IS_IOCAINE": "Er Iocaine", - "TAGS": "etiketter", - "ATTACHMENTS": "vedlegg", - "IS_DEPRECATED": "Er foreldet", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "rekkefølge", - "BACKLOG_ORDER": "backlog rekkefølge", - "SPRINT_ORDER": "sprint rekkefølge", - "KANBAN_ORDER": "kanban rekkefølge", - "TASKBOARD_ORDER": "Oppgavetavle rekkefølge", - "US_ORDER": "BH rekkefølge", "COLOR": "farge" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Sett opp poengene og sprintene gjennom Admin-panelet", "MOVE_US_TO_CURRENT_SPRINT": "Gå til nåværende sprint", "MOVE_US_TO_LATEST_SPRINT": "Flytt til siste Sprint", - "SHOW_FILTERS": "Vis filtre", - "SHOW_TAGS": "Vis etiketter", "EMPTY": "Backlogen er tom!", "CREATE_NEW_US": "Opprett en ny BH", "CREATE_NEW_US_EMPTY_HELP": "Det kan være lurt å opprette en ny brukerhistorie", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Veksle filteres synlighet", - "TITLE": "Filter", - "REMOVE": "Fjern Filtere", "HIDE": "Skjul Filtere", "SHOW": "Vis Filtere" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Sprint Oppgavepanel", "TITLE_LINK_TASKBOARD": "Gå til Oppgavepanel for \"{{name}}\"", - "NUMBER_SPRINTS": "
    sprinter", "EMPTY": "Det er ingen sprinter enda", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Denne sprinten har ingen Brukerhistorier", "WARNING_EMPTY_SPRINT": "Slipp Brukerhistorier her fra din backlog for å starte en ny sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Legg til en ny oppgave", "TITLE_ACTION_ADD_BULK": "Legg til noen nye Oppgaver samlet", "TITLE_ACTION_ASSIGN": "Tildel oppgave", - "TITLE_ACTION_EDIT": "Rediger oppgave", "PLACEHOLDER_CARD_TITLE": "Dette kunne vært en oppgave", "PLACEHOLDER_CARD_TEXT": "Splitt historier inn i oppgaver og følg dem separat", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Status Navn", "OWNER_US": "Denne oppgaven tilhører", "TITLE_LINK_GO_OWNER": "Gå til brukerhistorie", - "ORIGIN_US": "Denne oppgaven har blitt opprettet fra", - "TITLE_LINK_GO_ORIGIN": "Gå til brukerhistorie", - "BLOCKED": "Denne oppgaven er blokkert", "TITLE_DELETE_ACTION": "Slett oppgave", "LIGHTBOX_TITLE_BLOKING_TASK": "Blokkerende oppgave", "FIELDS": { - "MILESTONE": "Sprint", - "USER_STORY": "Brukerhistorie", "IS_IOCAINE": "Er Iocaine" }, - "ACTION_IOCAINE": "Iocaine", "TITLE_ACTION_IOCAINE": "Føler du deg litt overveldet av en oppgave? Sørg for at andre vet om det ved å klikke på \"Iocane\" når du redigerer en oppgave. Det er mulig å bli immun mot denne (fiktive) dødelige giften ved å konsumere små mengder over tid, akkurat som det er mulig å bli bedre på det du gjør ved av og til å ta på deg ekstra utfordringer!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Hendelser - {{projectName}}", "PAGE_DESCRIPTION": "Hendelsespanelet for prosjekt {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Hendelser", "SECTION_NAME": "Hendelse", "ACTION_NEW_ISSUE": "+ NY HENDELSE", "ACTION_PROMOTE_TO_US": "Oppgrader til Brukerhistorie", "PROMOTED": "Denne hendelsen har blitt oppgradert til BH", "EXTERNAL_REFERENCE": "Denne hendelsen har blitt opprettet av", "GO_TO_EXTERNAL_REFERENCE": "Gå til opphav", - "BLOCKED": "Denne hendelsen er blokkert", "ACTION_DELETE": "Slett hendelse", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Blokker hendelse", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Slå sammen kolonne", "TITLE_ACTION_UNFOLD": "Brett ut kolonne", - "TITLE_ACTION_FOLD_CARDS": "Brett kort", - "TITLE_ACTION_UNFOLD_CARDS": "Brett ut kort", "TITLE_ACTION_ADD_US": "Legg til ny Brukerhistorie", "TITLE_ACTION_ADD_BULK": "Legg til ny samling", "ACTION_SHOW_ARCHIVED": "Vis arkiverte", "ACTION_HIDE_ARCHIVED": "Skjul arkivert", "HIDDEN_USER_STORIES": "Brukerhistoriene med denne statusen er skjult som standard", - "ARCHIVED": "Du har arkivert", - "UNDO_ARCHIVED": "Dra & slipp igjen for å angre", "PLACEHOLDER_CARD_TITLE": "Dette er dine Brukerhistorier", "PLACEHOLDER_CARD_TEXT": "Historier kan også ha underoppgaver med egne krav" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Team - {{projectName}}", "PAGE_DESCRIPTION": "Teampanelet for å vise alle medlemmene i prosjektet {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Team", - "APP_TITLE": "TEAM - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Søk på fult navn---", "COLUMN_MR_WOLF": "Mr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Lukkede hendelser", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Alle", "OPTION_INVOLVED": "Involvert", "OPTION_NONE": "Ingen" - }, - "POPOVER": { - "USER_PROFILE": "Brukerprofil", - "CHANGE_PASSWORD": "Endre passord", - "NOTIFICATIONS": "Varsler", - "FEEDBACK": "Tilbakemelding", - "TITLE_AVATAR": "Brukerpreferanser" } }, "USER_PROFILE": { - "IMAGE_HELP": "Bildet vil bli skalert til 80x80px.", - "ACTION_CHANGE_IMAGE": "Endre", "ACTION_USE_GRAVATAR": "Bruk standardbilde", "ACTION_DELETE_ACCOUNT": "Slett Taiga-konto", "CHANGE_EMAIL_SUCCESS": "Sjekk din innboks!
    Vi har sent en epost til din konto
    med instruksjonene for å velge ny epostadresse.", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Siste versjon: {{lastModifiedDate}} ({{totalEditions}} versjoner totalt) Innhold: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Skriv din wiki-side", "REMOVE": "Fjern denne wiki-siden", "DELETE_LIGHTBOX_TITLE": "Slett wiki-siden", "DELETE_LINK_TITLE": "Slett wiki-lenke", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Mest likt", "MOST_LIKED_EMPTY": "Det er ingen LIKTE prosjekter enda", "VIEW_MORE": "Vis mer", - "RECRUITING": "Dette prosjekter søker etter mennesker", "FEATURED": "Utvalgte Prosjekter", "EMPTY": "Det er ingen prosjekter å vise med dette søkekriteriet.
    Prøv igjen!", "FILTERS": { diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index a8a0ec55..564aa1b1 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -4,7 +4,6 @@ "NO": "Nee", "OR": "of", "LOADING": "Aan het laden...", - "LOADING_PROJECT": "Project laden...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Bewaar", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Why is this blocked?", "BLOCKED_REASON": "Gelieve de reden uit te leggen", "CREATED_BY": "Aangemaakt door {{fullDisplayName}}", - "FROM": "van", - "TO": "aan", "CLOSE": "sluiten", "GO_HOME": "Neem me naar de homepage", "PLUGINS": "Plugins", - "BETA": "We zijn in beta!", "ONE_ITEM_LINE": "Eén item per regel...", "NEW_BULK": "Nieuwe bulk toevoeging", "RELATED_TASKS": "Gerelateerde taken", @@ -148,7 +144,6 @@ "PRIORITY": "Prioriteit", "ASSIGNED_TO": "Toegewezen aan", "POINTS": "Punten", - "BLOCKED_NOTE": "geblokkeerde notitie", "IS_BLOCKED": "is geblokkeerd", "REF": "Ref", "VOTES": "Stemmen", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{one watcher} other{# watchers}}" }, "VOTE_BUTTON": { - "UPVOTE": "Upvote", - "UPVOTED": "Upvoted", - "DOWNVOTE": "Downvote", - "VOTERS": "Voters", "BUTTON_TITLE": "Upvote/Downvote this item", "COUNTER_TITLE": "{total, plural, one{one vote} other{# votes}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Onderwerp of referentie", "TITLE_ACTION_FILTER_BUTTON": "zoek", "TITLE": "Filters", - "INPUT_SEARCH_PLACEHOLDER": "Onderwerp of ref.", "TITLE_ACTION_SEARCH": "Zoek", "ACTION_SAVE_CUSTOM_FILTER": "Als eigen filter opslaan", "PLACEHOLDER_FILTER_NAME": "Geef de filternaam in en druk op enter", @@ -220,16 +210,10 @@ "CREATED_BY": "Aangemaakt door", "CUSTOM_FILTERS": "Eigen filters", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Verwijder eigen filter", - "MESSAGE": "de eigen filter '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown syntax help" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Wiki links toevoegen", "DELETE_WIKI_LINKS": "Verwijder wiki links" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga is een project management platform voor startups en agile ontwikkelaars & designers die een simpele, mooie tool willen om werken echt leuk te maken." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Verander je wachtwoord - Taiga", - "PAGE_DESCRIPTION": "Zet een nieuw wachtwoord voor je Taiga account. Hey! Je kan best wat ijzerrijk voedsel eten, dat is goed voor de hersenen :P", "SECTION_NAME": "Wachtwoord wijzigen", "FIELD_CURRENT_PASSWORD": "Huidig wachtwoord", "PLACEHOLDER_CURRENT_PASSWORD": "Je huidige wachtwoord (of leeg als je nog geen wachtwoord hebt)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Onze Oompa Loompa's kunnen je uitnodiging niet vinden.", - "SUCCESS": "Je bent met succes toegetreden tot dit project, Welkom bij {{project_name}}", - "ERROR": "Volgens onze Oempa-Loempa's, ben je nog niet geregistreerd of heb je een fout wachtwoord getypt." + "SUCCESS": "Je bent met succes toegetreden tot dit project, Welkom bij {{project_name}}" }, "HOME": { "PAGE_TITLE": "Home -Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Verwijder bijlage", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "de bijlage '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "We zijn er niet in geslaagd om te verwijderen: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "is verouderd" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Vor", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "We sturen je een email als het klaar is", "SYNC_MESSAGE": "Als de download niet automatisch start, klik dan hier.", "ERROR": "Onze Oempa-Loempa's hebben wat problemen bij het genereren van uw dump.\nProbeer het opnieuw a.u.b.", - "ERROR_BUSY": "Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten.", - "ERROR_MESSAGE": "Onze Oempa-Loempa's hebben wat problemen met het genereren van je dump: {{message}}" + "ERROR_BUSY": "Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten." }, "MODULES": { "TITLE": "Modules", - "ENABLE": "Inschakelen", - "DISABLE": "Uitschakelen", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Backlog", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Project profiel - {{projectName}}", "PROJECT_DETAILS": "Project details", "PROJECT_NAME": "Naam project", - "PROJECT_SLUG": "Project Slug", "TAGS": "Tags", "DESCRIPTION": "Beschrijving", "RECRUITING": "Is this project looking for people?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Gesloten project", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", "DELETE": "Verwijder dit project", - "LOGO_HELP": "The image will be scaled to 80x80px.", "CHANGE_LOGO": "Change logo", "ACTION_USE_DEFAULT_LOGO": "Use default image", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Gitlab requests zijn niet gesigneerd, dus de beste manier om hun oorsprong te verifiëren is op basis van IP. Als het veld leeg is zal er geen IP validatie plaatsvinden." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Webhooks houden externe diensten op de hoogte van evenenmenten in Taiga, zoals commentaar, user stories....", "ADD_NEW": "Nieuwe webhook toevoegen", "TYPE_NAME": "Type de service naam", "TYPE_PAYLOAD_URL": "Type de service payload url", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Verwijder gebruiker", "RESEND": "Resend", "SUCCESS_SEND_INVITATION": "We hebben de uitnodiging opnieuw gestuurd aan '{{email}}'.", - "ERROR_SEND_INVITATION": "We hebben je een uitnodiging gestuurd", "SUCCESS_DELETE": "We hebben {{message}} verwijderd.", "ERROR_DELETE": "We zijn er niet in geslaagd om te verwijderen {{message}}", "DEFAULT_DELETE_MESSAGE": "de uitnodiging naar {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Schrijf een naam voor de nieuwe status" }, "MENU": { - "TITLE": "Admin", "PROJECT": "Project", "ATTRIBUTES": "Attributen", "MEMBERS": "Gebruikers", "PERMISSIONS": "Permissies", - "INTEGRATIONS": "Integraties", - "PLUGINS": "Plugins" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Attributen" + "INTEGRATIONS": "Integraties" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Eigen velden", "TAGS": "Tags" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Project profiel" - }, "SUBMENU_ROLES": { "TITLE": "Rollen", "ACTION_NEW_ROLE": "+ Nieuwe rol", "TITLE_ACTION_NEW_ROLE": "Nieuwe rol toevoegen" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Services" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Private", @@ -783,15 +740,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Profiel bewerken", - "FOLLOW": "Volgen", "CLOSED_US": "Gesloten US", "PROJECTS": "Projecten", "PROJECTS_EMPTY": "{{username}} heeft nog geen projecten", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} heeft nog geen contacten", "CURRENT_USER_CONTACTS_EMPTY": "Je hebt nog geen contacten", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "De mensen waarmee je via Taiga werkt zullen automatisch je contacten worden", - "REPORT": "Meld misbruik", "TABS": { "ACTIVITY_TAB": "Tijdlijn", "ACTIVITY_TAB_TITLE": "Alle activiteit van deze gebruiker weergeven", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Alles", "FILTER_TYPE_ALL_TITLE": "Alles weergeven", "FILTER_TYPE_PROJECTS": "Projecten", - "FILTER_TYPE_PROJECT_TITLES": "Enkel projecten weergeven", + "FILTER_TYPE_PROJECTS_TITLE": "Enkel projecten weergeven", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS_TITLE": "Show only epics", "FILTER_TYPE_USER_STORIES": "Verhalen", - "FILTER_TYPE_USER_STORIES_TITLES": "Enkel verhalen van gebruikers weergeven", + "FILTER_TYPE_USER_STORIES_TITLE": "Enkel verhalen van gebruikers weergeven", "FILTER_TYPE_TASKS": "Taken", - "FILTER_TYPE_TASK_TITLES": "Enkel taken weergeven", + "FILTER_TYPE_TASKS_TITLE": "Enkel taken weergeven", "FILTER_TYPE_ISSUES": "Issues", "FILTER_TYPE_ISSUES_TITLE": "Enkel problemen weergeven", "EMPTY_TITLE": "Het ziet er naar uit dat er hier niets is om weer te geven." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Welkom", - "SECTION_PROJECTS": "Projecten", "HELP": "Herorden je projecten met de vaakst gebruikte bovenaan.
    De top 10 projecten zullen verschijnen in de project lijst bovenaan in de navigatie bar.", "PRIVATE": "Gesloten project", "LOOKING_FOR_PEOPLE": "This project is looking for people", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." }, - "STATS": { - "PROJECT": "project
    punten", - "DEFINED": "gedefinieerde
    punten", - "ASSIGNED": "toegewezen
    punten", - "CLOSED": "gesloten
    punten" - }, "SECTION": { "SEARCH": "Zoek", "TIMELINE": "Tijdlijn", @@ -870,13 +816,9 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Jouw projecten", - "PLACEHOLDER_SEARCH": "Zoeken in...", "ACTION_CREATE_PROJECT": "Project aanmaken", "MANAGE_PROJECTS": "Manage projects", "TITLE_CREATE_PROJECT": "Project aanmaken", - "TITLE_PRVIOUS_PROJECT": "Toon voorgaande projecten", - "TITLE_NEXT_PROJECT": "Toon volgende projecten", "HELP_TITLE": "Taiga support pagina", "HELP": "Help", "HOMEPAGE": "Homepage", @@ -884,10 +826,6 @@ "FEEDBACK": "Feedback", "NOTIFICATIONS_TITLE": "Notificatie instellingen bewerken", "NOTIFICATIONS": "Notificaties", - "ORGANIZATIONS_TITLE": "Jouw organisaties bewerken", - "ORGANIZATIONS": "Organisaties bewerken", - "SETTINGS_TITLE": "Instellingen aanpassen", - "SETTINGS": "Instellingen", "VIEW_PROFILE_TITLE": "Bekijk profiel", "VIEW_PROFILE": "Bekijk profiel", "EDIT_PROFILE_TITLE": "Bewerk je profiel", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Wachtwoord wijzigen", "DASHBOARD_TITLE": "Dashboard", "DISCOVER_TITLE": "Ontdek trending projecten", - "NEW_ITEM": "Nieuw", - "DISCOVER": "Ontdek", - "ACTION_REORDER": "Sleep om de volgorde te veranderen" + "DISCOVER": "Ontdek" }, "LIKE_BUTTON": { "LIKE": "Vind ik leuk", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Project aanmaken", - "FRESH": "Vers en proper. Spanned!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Private Project" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Vers en proper. Spanned!", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Project aanmaken", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})", "SYNC_SUCCESS": "Je project werd met succes geïmporteerd", "IMPORT": "Import", - "ARCHIVED": "Gearchiveerd", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -998,7 +920,7 @@ "ASSIGN": "Assign", "PROJECT_SELECTOR": { "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", + "ACTION_SEARCH": "zoek", "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Issues", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Taiga account verwijderen", "CONFIRM": "Weet je zeker dat je je Taiga account wilt verwijderen?", - "NEWSLETTER_LABEL_TEXT": "Ik wil de nieuwsbrief niet meer ontvangen", "CANCEL": "Back to settings", "ACCEPT": "Delete account", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account." }, "DELETE_PROJECT": { "TITLE": "Verwijder project", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Voeg enkele nieuwe User Stories in bulk toe", "PROMOTED": "Deze US werd gepromoveerd van Issue:", "TITLE_LINK_GO_TO_ISSUE": "Ga naar probleem", - "EXTERNAL_REFERENCE": "Deze US is aangemaakt vanaf", - "GO_TO_EXTERNAL_REFERENCE": "Ga naar bron", - "BLOCKED": "Deze user story is geblokkeerd", "TITLE_DELETE_ACTION": "Verwijder user story", "LIGHTBOX_TITLE_BLOKING_US": "User story blokkeren", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} taken afgewerkt", - "ASSIGN": "User story toewijzen", "NOT_ESTIMATED": "Niet ingeschat", - "TOTAL_US_POINTS": "Totaal US punten", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "More info", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Eisen team", - "CLIENT_REQUIREMENT": "Requirement van de klant", - "FINISH_DATE": "Einddatum" + "CLIENT_REQUIREMENT": "Requirement van de klant" } }, "COMMENTS": { "DELETED_INFO": "Comment deleted by {{user}}", - "TITLE": "Reacties", "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", "OLDER_FIRST": "Older first", "RECENT_FIRST": "Recent first", "COMMENT": "Reageer", - "EDIT_COMMENT": "Edit comment", "EDITED_COMMENT": "Edited:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Type hier nieuw commentaar", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Toon activiteit", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Toon vorige items ({{showMore}} meer)", "TITLE": "Activiteit", "ACTIVITIES_COUNT": "{{activities}} Activities", - "REMOVED": "verwijderd", - "ADDED": "toegevoegd", "TAGS_ADDED": "tags added:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "{size, plural, one{één verandering} other{# veranderingen}} gemaakt", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Eisen team", "CLIENT_REQUIREMENT": "Requirement van de klant", "BLOCKED": "Geblokkeerd", "VALUES": { - "YES": "ja", - "NO": "nee", - "EMPTY": "leeg", "UNASSIGNED": "niet toegewezen" }, "FIELDS": { "SUBJECT": "onderwerp", - "NAME": "naam", "DESCRIPTION": "beschrijving", - "CONTENT": "inhoud", "STATUS": "status", - "IS_CLOSED": "is gesloten", - "FINISH_DATE": "einddatum", "TYPE": "type", - "PRIORITY": "prioriteit", - "SEVERITY": "ernst", "ASSIGNED_TO": "toegewezen aan", - "WATCHERS": "waarnemers", "MILESTONE": "sprint", - "USER_STORY": "user story", - "PROJECT": "project", - "IS_BLOCKED": "is geblokkeerd", - "BLOCKED_NOTE": "geblokkeerde notitie", - "POINTS": "punten", - "CLIENT_REQUIREMENT": "eisen klant", - "TEAM_REQUIREMENT": "team eisen", - "IS_IOCAINE": "is iocaine", - "TAGS": "tags", - "ATTACHMENTS": "bijlagen", - "IS_DEPRECATED": "is verourderd", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "volgorde", - "BACKLOG_ORDER": "backlog volgorde", - "SPRINT_ORDER": "sprint volgorde", - "KANBAN_ORDER": "kanban volgorde", - "TASKBOARD_ORDER": "taakbord volgorde", - "US_ORDER": "us volgorde", "COLOR": "kleur" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Set up the points and sprints through the Admin", "MOVE_US_TO_CURRENT_SPRINT": "Verplaats naar huidige sprint", "MOVE_US_TO_LATEST_SPRINT": "Move to latest Sprint", - "SHOW_FILTERS": "Toon filters", - "SHOW_TAGS": "Toon tags", "EMPTY": "The backlog is empty!", "CREATE_NEW_US": "Nieuwe US aanmaken", "CREATE_NEW_US_EMPTY_HELP": "Misschien wil je een nieuwe user story aanmaken", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Zet de filter zichtbaarheid aan of af", - "TITLE": "Filters", - "REMOVE": "Filters verwijderd", "HIDE": "Filters verbergen", "SHOW": "Toon filters" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Sprint taakbord", "TITLE_LINK_TASKBOARD": "Ga naar taakbord van \"{{name}}\"", - "NUMBER_SPRINTS": "
    sprints", "EMPTY": "There are no sprints yet", "WARNING_EMPTY_SPRINT_ANONYMOUS": "This sprint has no User Stories", "WARNING_EMPTY_SPRINT": "Drop here Stories from your backlog to start a new sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Voeg een nieuwe taak toe", "TITLE_ACTION_ADD_BULK": "Wat nieuwe taken in bulk toevoegen", "TITLE_ACTION_ASSIGN": "Toegewezen taak", - "TITLE_ACTION_EDIT": "Bewerk taak", "PLACEHOLDER_CARD_TITLE": "Dit zou een taak kunnen zijn", "PLACEHOLDER_CARD_TEXT": "Split Stories into tasks to track them separately", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Status naam", "OWNER_US": "Deze taak is van", "TITLE_LINK_GO_OWNER": "Ga naar user story", - "ORIGIN_US": "Deze taak werd aangemaakt vanaf", - "TITLE_LINK_GO_ORIGIN": "Ga naar user story", - "BLOCKED": "Deze taak is geblokkeerd", "TITLE_DELETE_ACTION": "Verwijder taak", "LIGHTBOX_TITLE_BLOKING_TASK": "Blokkerende taak", "FIELDS": { - "MILESTONE": "Sprint", - "USER_STORY": "User story", "IS_IOCAINE": "Is iocaine" }, - "ACTION_IOCAINE": "Iocaine", "TITLE_ACTION_IOCAINE": "Voel je je wat overweldigd door een taak? Zorg ervoor dat anderen dit weten door op Iocaine te klikken bij het wijzigen van een taak. Je kan stapsgewijs immuun worden tegen dit (fictioneel) dodelijk gif door kleine dosissen op te nemen. Net zoals je beter kan worden in wat je doet door af en toe een extra uitdaging aan te gaan!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Issues - {{projectName}}", "PAGE_DESCRIPTION": "Het issue lijst overzicht van het project {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Issues", "SECTION_NAME": "Issue", "ACTION_NEW_ISSUE": "+ nieuw probleem", "ACTION_PROMOTE_TO_US": "Promoveer tot User Story", "PROMOTED": "Dit issue is gepromoveerd tot US:", "EXTERNAL_REFERENCE": "Dit issue is aangemaakt vanaf", "GO_TO_EXTERNAL_REFERENCE": "Ga naar bron", - "BLOCKED": "Dit issue is geblokkeerd", "ACTION_DELETE": "Verwijderd issue", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Blokkerend issue", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Kolom inklappen", "TITLE_ACTION_UNFOLD": "Kolom uitklappen", - "TITLE_ACTION_FOLD_CARDS": "Kaarten inklappen", - "TITLE_ACTION_UNFOLD_CARDS": "Kaarten uitklappen", "TITLE_ACTION_ADD_US": "Nieuwe user story toevoegen", "TITLE_ACTION_ADD_BULK": "Nieuwe bulk toevoegen", "ACTION_SHOW_ARCHIVED": "Toon gearchiveerd", "ACTION_HIDE_ARCHIVED": "Verberg gearchiveerde", "HIDDEN_USER_STORIES": "De user stories met deze status zijn standaard verborgen", - "ARCHIVED": "Je hebt gearchiveerd", - "UNDO_ARCHIVED": "Drag & drop nog een keer om ongedaan te maken", "PLACEHOLDER_CARD_TITLE": "These are your User Stories", "PLACEHOLDER_CARD_TEXT": "Stories might also have subtasks to separate requirements" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Team - {{projectName}}", "PAGE_DESCRIPTION": "Het team overzicht toont alle leden van het project {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Team", - "APP_TITLE": "TEAM - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Zoek op volledige naam", "COLUMN_MR_WOLF": "Dhr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Gesloten issues", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Alles", "OPTION_INVOLVED": "Betrokken", "OPTION_NONE": "Geen" - }, - "POPOVER": { - "USER_PROFILE": "Gebruikersprofiel", - "CHANGE_PASSWORD": "Wachtwoord wijzigen", - "NOTIFICATIONS": "Notificaties", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "Gebruikersinstellingen" } }, "USER_PROFILE": { - "IMAGE_HELP": "The image will be scaled to 80x80px.", - "ACTION_CHANGE_IMAGE": "Verander", "ACTION_USE_GRAVATAR": "Use default image", "ACTION_DELETE_ACCOUNT": "Verwijderd Taiga account", "CHANGE_EMAIL_SUCCESS": "Controleer je inbox!
    We hebben je een email gestuurd met instructie om je nieuwe adres in te stellen", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Laatst bewerkt op {{lastModifiedDate}} ({{totalEditions}} keer bewerkt in totaal) Inhoud: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Schrijf je wiki pagina", "REMOVE": "Verwijder deze wiki pagina", "DELETE_LIGHTBOX_TITLE": "Verwijderd wiki pagina", "DELETE_LINK_TITLE": "Delete Wiki link", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Most liked", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", - "RECRUITING": "This project is looking for people", "FEATURED": "Featured Projects", "EMPTY": "There are no projects to show with this search criteria.
    Try again!", "FILTERS": { diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index 4a8cd520..c400dbb7 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -4,7 +4,6 @@ "NO": "Nie", "OR": "lub", "LOADING": "Wczytywanie...", - "LOADING_PROJECT": "Wczytywanie projektu...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Zapisz", @@ -27,16 +26,13 @@ "BLOCKED_NOTE": "Dlaczego jest zabokowane?", "BLOCKED_REASON": "Wyjaśnij powód", "CREATED_BY": "Utworzone przez {{fullDisplayName}}", - "FROM": "od", - "TO": "do", "CLOSE": "zamknij", "GO_HOME": "Zabierz mnie do strony domowej", "PLUGINS": "Wtyczki", - "BETA": "Wersja beta", "ONE_ITEM_LINE": "Jedna pozycja na wiersz...", "NEW_BULK": "Nowe zbiorcze dodawanie", "RELATED_TASKS": "Zadania pokrewne", - "PREVIOUS": "Previous", + "PREVIOUS": "Poprzedni", "NEXT": "Następny", "LOGOUT": "Wyloguj", "EXTERNAL_USER": "zewnętrzny użytkownik", @@ -148,7 +144,6 @@ "PRIORITY": "Priorytet", "ASSIGNED_TO": "Przydzielone do", "POINTS": "Punkty", - "BLOCKED_NOTE": "zablokowana notka", "IS_BLOCKED": "zablokowana", "REF": "Ref", "VOTES": "Głosy", @@ -172,7 +167,7 @@ "OPEN": "Otwórz" }, "WATCHERS": { - "WATCHERS": "Watchers", + "WATCHERS": "Obserwatorzy", "ADD": "Dodaj obserwatorów", "TITLE_ADD": "Dodaj członka projektu do listy obserwatorów.", "DELETE": "Usuń obserwatora", @@ -182,15 +177,11 @@ "WATCH": "Obserwuj", "WATCHING": "Obserwujesz", "UNWATCH": "Nie obserwuj", - "WATCHERS": "Watchers", + "WATCHERS": "Obserwatorzy", "BUTTON_TITLE": "Obserwuj lub przestań obserwować", "COUNTER_TITLE": "{total, plural, one{one watcher} other{# watchers}}" }, "VOTE_BUTTON": { - "UPVOTE": "Oceń pozytywnie", - "UPVOTED": "Ocenione pozytywnie", - "DOWNVOTE": "Oceń negatywnie", - "VOTERS": "Voters", "BUTTON_TITLE": "Ocen ten obiekt", "COUNTER_TITLE": "{total, plural, one{one vote} other{# votes}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Temat lub odniesienie", "TITLE_ACTION_FILTER_BUTTON": "szukaj", "TITLE": "Filtry", - "INPUT_SEARCH_PLACEHOLDER": "Temat lub referencja", "TITLE_ACTION_SEARCH": "Szukaj", "ACTION_SAVE_CUSTOM_FILTER": "zapisz jako filtr niestandardowy", "PLACEHOLDER_FILTER_NAME": "Wpisz nazwę filtru i kliknij enter", @@ -220,16 +210,10 @@ "CREATED_BY": "Stworzona przez", "CUSTOM_FILTERS": "Filtry niestandardowe", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Usuń filtr niestandardowy", - "MESSAGE": "filtr niestandardowy '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Składnia Markdown pomoc" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Dodawaj linki Wiki", "DELETE_WIKI_LINKS": "Usuwaj linki Wiki" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga to platforma do zarządzania projektami dla startup'ów i zwinnych deweloperów i projektantów, którzy potrzebują prostego,atrakcyjnego wizualnie narzędzia. Taiga sprawia, że praca z projektem staje się przyjemniejsza." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Zmień hasło - Taiga", - "PAGE_DESCRIPTION": "Ustaw nowe hasło dla swojego konta Taiga. Ej! może byś coś zjadł? To jest dobre dla Twojego mózgu :)", "SECTION_NAME": "Zmień hasło", "FIELD_CURRENT_PASSWORD": "Obecne hasło", "PLACEHOLDER_CURRENT_PASSWORD": "Twoje obecne hasło (lub puste, jeśli jeszcze go nie masz)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Nasze Umpa Lumpy nie znajdują Twojego zaproszenia :(", - "SUCCESS": "Udało Ci się dołączyć do tego projektu. Witaj w {{project_name}}", - "ERROR": "Według naszych Umpa Lump, nie jesteś jeszcze zarejestrowany. Albo wpisałeś złe hasło." + "SUCCESS": "Udało Ci się dołączyć do tego projektu. Witaj w {{project_name}}" }, "HOME": { "PAGE_TITLE": "Strona główna - Taiga", @@ -402,7 +380,7 @@ "ASSIGNED_TO": "Przydzielone", "STATUS": "Statusy", "PROGRESS": "Postęp", - "VIEW_OPTIONS": "View options" + "VIEW_OPTIONS": "Zobacz opcje" }, "CREATE": { "TITLE": "Nowy epik", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Usuń załącznik...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "załącznik '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Nie udało się usunąć załącznika w związku z następującym błędem: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "jest przedawniony" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Poprzedni", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Wyślemy Ci wiadomość e-mail, kiedy będziemy gotowi.", "SYNC_MESSAGE": "Jeśli pobieranie nie rozpocznie się automatycznie kliknij tutaj.", "ERROR": "Umpa Lumpy mają problem z wygenerowaniem zrzutu. Spróbuj ponownie.", - "ERROR_BUSY": "Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę.", - "ERROR_MESSAGE": "Umpa Lumpy mają następujący problem z wygenerowaniem zrzutu: {{message}}" + "ERROR_BUSY": "Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę." }, "MODULES": { "TITLE": "Moduły", - "ENABLE": "Włącz", - "DISABLE": "Wyłącz", "EPICS": "Epiki", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Dziennik", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Profil projektu - {{projectName}}", "PROJECT_DETAILS": "Szczegóły projektu", "PROJECT_NAME": "Nazwa projektu", - "PROJECT_SLUG": "Szczegóły projektu", "TAGS": "Tagi", "DESCRIPTION": "Opis", "RECRUITING": "Czy ten pojekt szuka uczestników?", @@ -523,11 +494,10 @@ "PRIVATE_PROJECT": "Projekt prywatny", "PRIVATE_OR_PUBLIC": "What's the difference between public and private projects?", "DELETE": "Usuń ten projekt", - "LOGO_HELP": "The image will be scaled to 80x80px.", - "CHANGE_LOGO": "Change logo", - "ACTION_USE_DEFAULT_LOGO": "Use default image", - "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", - "MAX_PRIVATE_PROJECTS_MEMBERS": "The maximum number of members for private projects has been exceeded", + "CHANGE_LOGO": "Zmień logo", + "ACTION_USE_DEFAULT_LOGO": "Użyj domyślnego obrazu", + "MAX_PRIVATE_PROJECTS": "Osiągnąłeś maksymalną liczbę prywatnych projektów dozwoloną przez obecny plan", + "MAX_PRIVATE_PROJECTS_MEMBERS": "Maksymalna liczba członków dla prywatnych projektów została przekroczona.", "MAX_PUBLIC_PROJECTS": "Unfortunately, you've reached the maximum number of public projects allowed by your current plan", "MAX_PUBLIC_PROJECTS_MEMBERS": "The project exceeds your maximum number of members for public projects", "PROJECT_OWNER": "Project owner", @@ -617,9 +587,9 @@ "TITLE": "Tagi", "SUBTITLE": "View and edit the color of your tags", "EMPTY": "Currently there are no tags", - "EMPTY_SEARCH": "It looks like nothing was found with your search criteria", + "EMPTY_SEARCH": "Nie znaleziono niczego, co spełniałoby podane kryteria.", "ACTION_ADD": "Dodaj tag", - "NEW_TAG": "New tag", + "NEW_TAG": "Nowy tag", "MIXING_HELP_TEXT": "Select the tags that you want to merge", "MIXING_MERGE": "Merge Tags", "SELECTED": "Selected" @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Zapytania Gitlab nie są szyfrowane zatem najlepszym sposobem weryfikacji źródła jest sprawdzenie adresu IP.Jeśli pole pozostanie puste sprawdzanie IP nie będzie działać." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Webhooks notify external services about events in Taiga, like comments, user stories....", "ADD_NEW": "Dodaj nowy webhook", "TYPE_NAME": "Wpisz nazwę serwisu", "TYPE_PAYLOAD_URL": "Type the service payload url", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Usuń członka", "RESEND": "Wyślij ponownie", "SUCCESS_SEND_INVITATION": "Ponownie wysłano zaproszenie do '{{e-mail}}'.", - "ERROR_SEND_INVITATION": "Zaproszenie nie zostało wysłane.", "SUCCESS_DELETE": "Usunięto {{message}}.", "ERROR_DELETE": "Nie usunięto {{message}}.", "DEFAULT_DELETE_MESSAGE": "zaproszenie do {{e-mail}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Wpisz nazwę nowego statusu" }, "MENU": { - "TITLE": "Admin", "PROJECT": "Projekt", "ATTRIBUTES": "Atrybuty", "MEMBERS": "Członkowie", "PERMISSIONS": "Uprawnienia", - "INTEGRATIONS": "Integracje", - "PLUGINS": "Wtyczki" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Atrybuty" + "INTEGRATIONS": "Integracje" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Niestandardowe pola", "TAGS": "Tagi" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Profil projektu" - }, "SUBMENU_ROLES": { "TITLE": "Role", "ACTION_NEW_ROLE": "+ Nowa rola", "TITLE_ACTION_NEW_ROLE": "Dodaj nową rolę" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Ważność" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Private", @@ -783,15 +740,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Zmień mój plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Edycja profilu", - "FOLLOW": "Obserwuj", "CLOSED_US": "Zamknięte historyjki użytkownika", "PROJECTS": "Projekty", "PROJECTS_EMPTY": "{{username}} jeszcze nie uczestniczy w żadnym projekcie", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} jeszcze nie ma kontaktów", "CURRENT_USER_CONTACTS_EMPTY": "Jeszcze nie masz kontaktów", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Ludzie z którymi pracujesz w Taiga staną się Twoimi kontaktami automatycznie.", - "REPORT": "Zgłoś naruszenie", "TABS": { "ACTIVITY_TAB": "Oś czasu", "ACTIVITY_TAB_TITLE": "Wyświetl całą aktywność użytkownika", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Wszystkie", "FILTER_TYPE_ALL_TITLE": "Show all", "FILTER_TYPE_PROJECTS": "Projekty", - "FILTER_TYPE_PROJECT_TITLES": "Show only projects", + "FILTER_TYPE_PROJECTS_TITLE": "Show only projects", "FILTER_TYPE_EPICS": "Epiki", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS_TITLE": "Show only epics", "FILTER_TYPE_USER_STORIES": "Stories", - "FILTER_TYPE_USER_STORIES_TITLES": "Show only user stories", + "FILTER_TYPE_USER_STORIES_TITLE": "Show only user stories", "FILTER_TYPE_TASKS": "Zadania", - "FILTER_TYPE_TASK_TITLES": "Show only tasks", + "FILTER_TYPE_TASKS_TITLE": "Show only tasks", "FILTER_TYPE_ISSUES": "Zgłoszenia", "FILTER_TYPE_ISSUES_TITLE": "Show only issues", "EMPTY_TITLE": "Wygląda na to, że nie ma niczego do wyświetlenia tutaj." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Witamy", - "SECTION_PROJECTS": "Projekty", "HELP": "Ustal kolejność Twoich projektów tak, aby na górze znalazły się te najważniejsze.
    Pierwsze 10 projektów pojawi się w liście projektów na górnym pasku nawigacji.", "PRIVATE": "Projekt prywatny", "LOOKING_FOR_PEOPLE": "Ten projekt szuka uczestników", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Ten projekt jest tymczasowo zablokowany", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Aby odblokować swój projekt, skontaktuj się z administacją" }, - "STATS": { - "PROJECT": "projekt
    punkty", - "DEFINED": "zdefiniowane
    punkty", - "ASSIGNED": "przypisane
    punkty", - "CLOSED": "zamknięte
    punkty" - }, "SECTION": { "SEARCH": "Szukaj", "TIMELINE": "Oś czasu", @@ -870,24 +816,16 @@ "ADMIN": "Admin" }, "NAVIGATION": { - "SECTION_TITLE": "Twoje projekty", - "PLACEHOLDER_SEARCH": "Szukaj w ...", "ACTION_CREATE_PROJECT": "Stwórz projekt", - "MANAGE_PROJECTS": "Manage projects", + "MANAGE_PROJECTS": "Zarządzaj projektami", "TITLE_CREATE_PROJECT": "Utwórz projekt", - "TITLE_PRVIOUS_PROJECT": "Pokaż poprzedni projekt", - "TITLE_NEXT_PROJECT": "Pokaż kolejne projekty", "HELP_TITLE": "Taiga strona wsparcia", "HELP": "Pomoc", - "HOMEPAGE": "Homepage", + "HOMEPAGE": "Strona startowa", "FEEDBACK_TITLE": "Prześlij opinię", "FEEDBACK": "Feedback", "NOTIFICATIONS_TITLE": "Edytuj ustawienia powiadomień", "NOTIFICATIONS": "Powiadomienia", - "ORGANIZATIONS_TITLE": "Edytuj organizacje", - "ORGANIZATIONS": "Edytuj organizacje", - "SETTINGS_TITLE": "Edytuj ustawienia", - "SETTINGS": "Ustawienia", "VIEW_PROFILE_TITLE": "Zobacz profil", "VIEW_PROFILE": "Zobacz profil", "EDIT_PROFILE_TITLE": "Edytuj profil", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Zmień hasło", "DASHBOARD_TITLE": "Dashboard", "DISCOVER_TITLE": "Odkryj projekty", - "NEW_ITEM": "Nowe", - "DISCOVER": "Odkryj", - "ACTION_REORDER": "Przeciągnij i upuść żeby zmienić kolejność" + "DISCOVER": "Odkryj" }, "LIKE_BUTTON": { "LIKE": "Like", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Utwórz projekt", - "FRESH": "Nowy, zwinny! To takie ekscytujące!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -943,30 +878,20 @@ "SOLO_PROJECT": "You'll be alone in this project", "INVITE_LATER": "(You'll be able to invite more members later)", "BACK": "Back", - "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PRIVATE_PROJECTS": "Niestety, osiągnąłeś maksimum dozwolonych projektów prywatnych.\nJeśli chciałbyś zwiększyć obecny limit, skontaktuj się z administratorem.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Projekt publiczny", - "PRIVATE_PROJECT": "Projekt prywatny", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Projekt prywatny" }, "COMMON": { "DETAILS": "New project details", - "PROJECT_TITLE": "Project Name", + "PROJECT_TITLE": "Nazwa Projektu", "PROJECT_DESCRIPTION": "Project Description" }, "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Nowy, zwinny! To takie ekscytujące!", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Projekt publiczny", - "PRIVATE_PROJECT": "Projekt prywatny", - "CREATE_PROJECT": "Utwórz projekt", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})", "SYNC_SUCCESS": "Twój projekt zaimportował się prawidłowo!", "IMPORT": "Import", - "ARCHIVED": "Zarchiwizowane", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -997,8 +919,8 @@ "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Assign", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", + "NO_RESULTS": "Nie znaleziono niczego, co spełniałoby podane kryteria.", + "ACTION_SEARCH": "szukaj", "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Zgłoszenia", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Usuń konto z Taiga", "CONFIRM": "Czy na pewno chcesz usunąć swoje konto z Taiga?", - "NEWSLETTER_LABEL_TEXT": "Nie chcę więcej otrzymywać waszego newslettera", "CANCEL": "Powrót do ustawień", "ACCEPT": "Usuń konto", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account." }, "DELETE_PROJECT": { "TITLE": "Usuń projekt", @@ -1112,10 +1024,10 @@ "ADD_MEMBER": { "TITLE": "Nowy Członek", "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", + "ADD_EMAIL": "Dodaj e-mail", + "REMOVE": "Usuń", + "INVITE": "Zaproś", + "CHOOSE_ROLE": "Wybierz rolę", "PLACEHOLDER_INVITATION_TEXT": "(Opcjonalne) Dodaj spersonalizowany tekst do zaproszenia. Napisz coś słodziachnego do nowego członka zespołu :)", "HELP_TEXT": "Jeżeli użytkownik jest już zarejestrowany w Taiga, będzie dodany automatycznie. W przeciwnym wypadku otrzyma zaproszenie." }, @@ -1160,7 +1072,7 @@ "CREATE_MEMBER": { "PLACEHOLDER_INVITATION_TEXT": "(Opcjonalne) Dodaj spersonalizowany tekst do zaproszenia. Napisz coś słodziachnego do nowego członka zespołu :)", "PLACEHOLDER_TYPE_EMAIL": "Wpisz Email", - "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.", + "LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER": "Wkrótce osiągniesz maksimum dozwolonych członków dla tego projektu - {{maxMembers}} członków. Jeśli chciałbyś zwiększyć obecny limit, skontaktuj się z administratorem.", "LIMIT_USERS_WARNING_MESSAGE": "You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members." }, "LEAVE_PROJECT_WARNING": { @@ -1176,14 +1088,14 @@ }, "CHANGE_OWNER": { "TITLE": "Kto ma być nowym właścicielem projektu?", - "ADD_COMMENT": "Add comment", + "ADD_COMMENT": "Dodaj komentarz", "BUTTON": "Ask this project member to become the new project owner" }, "CONTACT_PROJECT": { - "TITLE": "Send an email to", + "TITLE": "Wyślij e-mail do", "WARNING": "The email will be received by the project admins", "PLACEHOLDER": "Write your message", - "SEND": "Send" + "SEND": "Wyślij" } }, "EPIC": { @@ -1217,21 +1129,15 @@ "ADD_BULK": "Masowo dodaj nowe historyjki użytkownika", "PROMOTED": "Ta historyjka awansowała ze zgłoszenia:", "TITLE_LINK_GO_TO_ISSUE": "Idź do zgłoszenia", - "EXTERNAL_REFERENCE": "Ta historyjka została utworzona z", - "GO_TO_EXTERNAL_REFERENCE": "Idź do źródła", - "BLOCKED": "Ta historia użytkownika jest zablokowana", "TITLE_DELETE_ACTION": "Usuń historyjkę użytkownika", "LIGHTBOX_TITLE_BLOKING_US": "Blokuje nas", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} zadanie zakończone", - "ASSIGN": "Przypisz historyjkę użytkownika", "NOT_ESTIMATED": "Nie oszacowane", - "TOTAL_US_POINTS": "Łącznie punktów", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "More info", "PUBLISH_TITLE": "More info on publishing in Taiga Tribe", "PUBLISHED_AS_GIG": "Story published as Gig in Taiga Tribe", - "EDIT_LINK": "Edit link", + "EDIT_LINK": "Edytuj link", "CLOSE": "Zamknij", "SYNCHRONIZE_LINK": "synchronizuj z Taiga Tribe", "PUBLISH_MORE_INFO_TITLE": "Potrzebujesz kogoś do tego zadania?", @@ -1239,90 +1145,52 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Wymaganie zespołu", - "CLIENT_REQUIREMENT": "Wymaganie klienta", - "FINISH_DATE": "Data zakończenia" + "CLIENT_REQUIREMENT": "Wymaganie klienta" } }, "COMMENTS": { "DELETED_INFO": "Komentarz usunięty przez {{user}}", - "TITLE": "Komentarze", "COMMENTS_COUNT": "{{comments}} Komentarze", - "ORDER": "Order", "OLDER_FIRST": "Starsze najpierw", "RECENT_FIRST": "Ostatnie najpierw", "COMMENT": "Komentarz", - "EDIT_COMMENT": "Edytuj komentarz", "EDITED_COMMENT": "Edytowano", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Tutaj wpisz nowy komentarz", "SHOW_DELETED": "Pokaż usunięty komentarz", "HIDE_DELETED": "Ukryj skasowane komentarze", - "DELETE": "Delete comment", + "DELETE": "Usuń komentarz", "RESTORE": "Przywróć komentarz", "HISTORY": { "TITLE": "Aktywność" } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Pokaż aktywność", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Pokaż poprzednie wpisy ({{showMore}} więcej)", "TITLE": "Aktywność", "ACTIVITIES_COUNT": "{{activities}} Aktywności", - "REMOVED": "usunięty", - "ADDED": "dodany", "TAGS_ADDED": "dodano klucz", "TAGS_REMOVED": "usunięto tag:", "US_POINTS": "{{role}} points", "NEW_ATTACHMENT": "nowy załącznik", - "DELETED_ATTACHMENT": "deleted attachment:", + "DELETED_ATTACHMENT": "załącznik usunięty:", "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "Dokonano {size, plural, one{one change} other{# changes}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Wymaganie zespołu", "CLIENT_REQUIREMENT": "Wymaganie klienta", "BLOCKED": "Zablokowane", "VALUES": { - "YES": "tak", - "NO": "nie", - "EMPTY": "pusty", "UNASSIGNED": "nieprzypisany" }, "FIELDS": { "SUBJECT": "temat", - "NAME": "imię", "DESCRIPTION": "opis", - "CONTENT": "treść", "STATUS": "status", - "IS_CLOSED": "zamknięty", - "FINISH_DATE": "data zakończenia", "TYPE": "typ", - "PRIORITY": "priorytet", - "SEVERITY": "ważność", "ASSIGNED_TO": "przypisane do", - "WATCHERS": "obserwatorzy", "MILESTONE": "sprint", - "USER_STORY": "historyjka użytkownika", - "PROJECT": "projekt", - "IS_BLOCKED": "zablokowany", - "BLOCKED_NOTE": "notka blokady", - "POINTS": "punkty", - "CLIENT_REQUIREMENT": "wymaganie klienta", - "TEAM_REQUIREMENT": "wymaganie zespołu", - "IS_IOCAINE": "Iokaina", - "TAGS": "tagi", - "ATTACHMENTS": "załączniki", - "IS_DEPRECATED": "jest przedawniony", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "kolejność", - "BACKLOG_ORDER": "kolejność backlogu", - "SPRINT_ORDER": "kolejność sprintów", - "KANBAN_ORDER": "kolejność kanban", - "TASKBOARD_ORDER": "kolejność tablicy zadań", - "US_ORDER": "Kolejność HU", "COLOR": "kolor" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Set up the points and sprints through the Admin", "MOVE_US_TO_CURRENT_SPRINT": "Przejdź do bieżącego sprintu", "MOVE_US_TO_LATEST_SPRINT": "Przejdź do ostatniego sprintu", - "SHOW_FILTERS": "Pokaż filtry", - "SHOW_TAGS": "Pokaż tagi", "EMPTY": "The backlog is empty!", "CREATE_NEW_US": "Utwórz nową HU", "CREATE_NEW_US_EMPTY_HELP": "Możesz utworzyć nową historyjkę użytkownika", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Przełącz widoczność filtrów", - "TITLE": "Filtry", - "REMOVE": "Usuń filtry", "HIDE": "Ukryj filtry", "SHOW": "Pokaż filtry" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Tablica zadań sprintu", "TITLE_LINK_TASKBOARD": "Idź do tablicy zadań użytkownika {{name}}", - "NUMBER_SPRINTS": "
    sprintów", "EMPTY": "There are no sprints yet", "WARNING_EMPTY_SPRINT_ANONYMOUS": "This sprint has no User Stories", "WARNING_EMPTY_SPRINT": "Drop here Stories from your backlog to start a new sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Dodaj nowe zadanie", "TITLE_ACTION_ADD_BULK": "Dodaj nowe zadania zbiorczo", "TITLE_ACTION_ASSIGN": "Przydziel zadanie", - "TITLE_ACTION_EDIT": "Zmień zadanie", "PLACEHOLDER_CARD_TITLE": "This could be a task", "PLACEHOLDER_CARD_TEXT": "Split Stories into tasks to track them separately", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "SNazwa statusu", "OWNER_US": "To zadanie należy do", "TITLE_LINK_GO_OWNER": "Idź do historyjki użytkownika", - "ORIGIN_US": "Źródło tego zadania to", - "TITLE_LINK_GO_ORIGIN": "Idź do historyjki użytkownika", - "BLOCKED": "To zadanie jest zablokowane", "TITLE_DELETE_ACTION": "Usuń zadanie", "LIGHTBOX_TITLE_BLOKING_TASK": "Blokowanie zadania", "FIELDS": { - "MILESTONE": "Sprint", - "USER_STORY": "Historyjka użytkownika", "IS_IOCAINE": "Iocaina" }, - "ACTION_IOCAINE": "Iocaina", "TITLE_ACTION_IOCAINE": "Czujesz się trochę przytłoczony zadaniem? Daj znać innym klikając na ikonę Iokainy podczas edycji zadania. Jest szansa, że staniesz się odporny na tą (fikcyjną ;) ) śmiertelną truciznę biorąc małe dawki. Z pewnością jednak da Ci ona dodatkowego kopa, który pomoże w pokonaniu nowego wyzwania i staniu się lepszym w tym co robisz!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Zgłoszenia - {{projectName}}", "PAGE_DESCRIPTION": "Lista zgłoszeń w projekcie {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Zgłoszenia", "SECTION_NAME": "Zgłoszenie", "ACTION_NEW_ISSUE": "+ NOWE ZGŁOSZENIE", "ACTION_PROMOTE_TO_US": "Awansuj na historyjkę użytkownika", "PROMOTED": "To zgłoszenie zostało wypromowane na HU:", "EXTERNAL_REFERENCE": "Źródło zgłoszenia", "GO_TO_EXTERNAL_REFERENCE": "Idź do źródła", - "BLOCKED": "To zgłoszenie jest zablokowane", "ACTION_DELETE": "Usuń zgłoszenie", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Blokowanie zgłoszenia", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanaban", "TITLE_ACTION_FOLD": "Zwiń kolumnę", "TITLE_ACTION_UNFOLD": "Rozwiń kolumnę", - "TITLE_ACTION_FOLD_CARDS": "Zwiń karty", - "TITLE_ACTION_UNFOLD_CARDS": "Rozwiń karty", "TITLE_ACTION_ADD_US": "Dodaj nową HU", "TITLE_ACTION_ADD_BULK": "Dodaj zbiorczo HU", "ACTION_SHOW_ARCHIVED": "Pokaż archiwalne", "ACTION_HIDE_ARCHIVED": "Ukryj archiwalne", "HIDDEN_USER_STORIES": "Historyjki użytkownika o tym statusie są domyślnie ukryte", - "ARCHIVED": "Zarchiwizowano", - "UNDO_ARCHIVED": "Przeciągnij i upuść ponownie aby cofnąć", "PLACEHOLDER_CARD_TITLE": "To są Twoje Historyjki Użytkownika", "PLACEHOLDER_CARD_TEXT": "Stories might also have subtasks to separate requirements" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Zespół - {{projectName}}", "PAGE_DESCRIPTION": "Panel zespołu w którym zebrani są wszyscy jego członkowie pracujący przy projekcie {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Zespół", - "APP_TITLE": "ZESPÓŁ - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Szukaj po imieniu...", "COLUMN_MR_WOLF": "Mr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Zamknięte zgłoszenia", @@ -1610,19 +1459,10 @@ "OPTION_ALL": "Wszystkie", "OPTION_INVOLVED": "Z moim udziałem", "OPTION_NONE": "Żadne" - }, - "POPOVER": { - "USER_PROFILE": "Profil użytkownika", - "CHANGE_PASSWORD": "Zmień hasło", - "NOTIFICATIONS": "Powiadomienia", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "Preferencje użytkownika" } }, "USER_PROFILE": { - "IMAGE_HELP": "The image will be scaled to 80x80px.", - "ACTION_CHANGE_IMAGE": "Zmień", - "ACTION_USE_GRAVATAR": "Use default image", + "ACTION_USE_GRAVATAR": "Użyj domyślnego obrazu", "ACTION_DELETE_ACCOUNT": "Usuń konto Taiga", "CHANGE_EMAIL_SUCCESS": "Sprawdź swoją skrzynkę e-mail!
    Wysłaliśmy wiadomość z instrukcjami.", "CHANGE_PHOTO": "Zmień zdjęcie", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Ostatnio edytowane dnia {{lastModifiedDate}} ({{totalEditions}} edycji łącznie) Zawartość: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Napisz swoje Wiki", "REMOVE": "Usuń tą stronę Wiki", "DELETE_LIGHTBOX_TITLE": "Usuń tą stronę Wiki", "DELETE_LINK_TITLE": "Usuń link Wiki", @@ -1651,7 +1490,7 @@ "HOME": "Strona Główna", "SECTION_NAME": "ZAKŁADKI", "ACTION_ADD_LINK": "Dodaj zakładkę", - "ALL_PAGES": "All wiki pages" + "ALL_PAGES": "Wszystkie strony Wiki" }, "SUMMARY": { "TIMES_EDITED": "razy
    edytowano", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Najbardziej lubiane", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", - "RECRUITING": "Ten projekt szuka ludzi", "FEATURED": "Featured Projects", "EMPTY": "There are no projects to show with this search criteria.
    Try again!", "FILTERS": { diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index 8a20d7df..a21bbba1 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -4,7 +4,6 @@ "NO": "Não", "OR": "ou", "LOADING": "Carregando...", - "LOADING_PROJECT": "Carregando o projeto...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Salvar", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Por que esta bloqueado?", "BLOCKED_REASON": "Por favor, explique a razão", "CREATED_BY": "Criado por {{fullDisplayName}}", - "FROM": "de", - "TO": "para", "CLOSE": "fechar", "GO_HOME": "Ir ao início", "PLUGINS": "Plugins", - "BETA": "Estamos em beta!", "ONE_ITEM_LINE": "Um item por linha...", "NEW_BULK": "Nova inserção em lote", "RELATED_TASKS": "Tarefas relacionadas", @@ -148,7 +144,6 @@ "PRIORITY": "Prioridade", "ASSIGNED_TO": "Atribuído a", "POINTS": "Pontos", - "BLOCKED_NOTE": "Nota de bloqueio", "IS_BLOCKED": "está bloqueada", "REF": "Ref", "VOTES": "Votos", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{um observador} other{#watchers}}" }, "VOTE_BUTTON": { - "UPVOTE": "Aprovar", - "UPVOTED": "Aprovado", - "DOWNVOTE": "Reprovar", - "VOTERS": "Eleitores", "BUTTON_TITLE": "Aprovar/Reprovar este item", "COUNTER_TITLE": "{total, plural, one{um voto} other{# votos}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Assunto ou referência", "TITLE_ACTION_FILTER_BUTTON": "procurar", "TITLE": "Filtros", - "INPUT_SEARCH_PLACEHOLDER": "Assunto ou ref", "TITLE_ACTION_SEARCH": "Procurar", "ACTION_SAVE_CUSTOM_FILTER": "salve como filtro personalizado", "PLACEHOLDER_FILTER_NAME": "Digite o nome do filtro e pressione Enter", @@ -220,16 +210,10 @@ "CREATED_BY": "Criado por", "CUSTOM_FILTERS": "Filtros personalizados", "EPIC": "Épico" - }, - "CONFIRM_DELETE": { - "TITLE": "Apagar filtro personalizado", - "MESSAGE": "O filtro personalizado '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Ajuda de sintaxe markdown" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Adicionar links da wiki", "DELETE_WIKI_LINKS": "Apagar links da wiki" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga é uma plataforma de gerenciamento de projetos para startups e desenvolvedores ágeis & designers que querem uma simples, bela ferramenta que faça o trabalho ser agradável." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Alterar sua senha - Taiga", - "PAGE_DESCRIPTION": "Escolher nova senha para o seu Taiga e hey!, você deveria comer comida rica em ferro, é ótimo para o cérebro :P", "SECTION_NAME": "Alterar senha", "FIELD_CURRENT_PASSWORD": "Senha atual", "PLACEHOLDER_CURRENT_PASSWORD": "Sua senha atual (ou vazio caso ainda não tenha uma senha)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Nossos Oompa Loompas não puderam encontrar seu convite.", - "SUCCESS": "Você ingressou com sucesso nesse projeto, Seja bem vindo ao projeto {{project_name}}", - "ERROR": "De acordo com nossos Oompa Loompas, você não está inscrito ou digitou uma senha inválida." + "SUCCESS": "Você ingressou com sucesso nesse projeto, Seja bem vindo ao projeto {{project_name}}" }, "HOME": { "PAGE_TITLE": "Início - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Apagar anexo...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "o anexo '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Não fomos capazes de apagar: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "está obsoleto" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Anterior", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Enviaremos um email para você assim que estiver pronto.", "SYNC_MESSAGE": "Se o download não iniciar automáticamente clique aqui", "ERROR": "Nossos Oompa Loopmas tiveram alguns problemas gerando o dump. Por favor, tente novamente.", - "ERROR_BUSY": "Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos.", - "ERROR_MESSAGE": "Nossos Oompa Loompas tiveram alguns problemas gerando o seu dump: {{message}}" + "ERROR_BUSY": "Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos." }, "MODULES": { "TITLE": "Modulos", - "ENABLE": "Habilitar", - "DISABLE": "Desabilitar", "EPICS": "Épicos", "EPICS_DESCRIPTION": "Visualize e gerencie a parte mais estratégica do seu projeto", "BACKLOG": "Backlog", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Perfil do projeto - {{projectName}}", "PROJECT_DETAILS": "Detalhes do projeto", "PROJECT_NAME": "Nome do projeto", - "PROJECT_SLUG": "Slug do projeto", "TAGS": "Tags", "DESCRIPTION": "Descrição", "RECRUITING": "Este projeto esta a procura de colaboradores?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Projeto Privado", "PRIVATE_OR_PUBLIC": "Qual a diferença entre projeto público e privado?", "DELETE": "Apagar este projeto", - "LOGO_HELP": "A imagem deve ser na escala de 80x80px.", "CHANGE_LOGO": "Alterar logo", "ACTION_USE_DEFAULT_LOGO": "Usar imagem padrão", "MAX_PRIVATE_PROJECTS": "Você atingiu o número máximo de projetos privados permitidos para seu plano atual.", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Requisições do Gitlab não são assinadas, ou seja, a melhor maneira de verificar a origem é por IP. Se o campo estiver vazio não será realizada verificação de IP." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Webhooks notificam serviços externos sobre eventos no Taiga, como comentários, histórias de usuários...", "ADD_NEW": "Adicionar um Novo Webhook", "TYPE_NAME": "Digite o nome do serviço", "TYPE_PAYLOAD_URL": "Digite a url do serviço Payload", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Apagar membro", "RESEND": "Reenviar", "SUCCESS_SEND_INVITATION": "Enviamos novamente um convite para '{{email}}'.", - "ERROR_SEND_INVITATION": "Nós não enviamos o convite.", "SUCCESS_DELETE": "Nós apagamos {{message}}.", "ERROR_DELETE": "Nós não fomos capaz de apagar {{message}}.", "DEFAULT_DELETE_MESSAGE": "o convite para {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Digite um nome para o novo status" }, "MENU": { - "TITLE": "Administrador", "PROJECT": "Projeto", "ATTRIBUTES": "Atributos", "MEMBERS": "Membros", "PERMISSIONS": "Permissões", - "INTEGRATIONS": "Integrações", - "PLUGINS": "Plugins" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Atributos" + "INTEGRATIONS": "Integrações" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Campos personalizados", "TAGS": "Tags" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Perfil do Projeto" - }, "SUBMENU_ROLES": { "TITLE": "Funções", "ACTION_NEW_ROLE": "+ Nova Função", "TITLE_ACTION_NEW_ROLE": "Adicionar nova função" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Serviços" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Você gostaria de se tornar o novo dono do projeto?", "PRIVATE": "Privado", @@ -783,15 +740,13 @@ "PRIVATE": "Por favor, lembre-se que você pode ser dono de até {{maxProjects}} projetos privados. Você, atualmente, é dono de {{currentProjects}} projetos privados", "PUBLIC": "Por favor, lembre-se que você pode ser dono de até {{maxProjects}} projetos públicos. Você, atualmente, é dono de {{currentProjects}} projetos públicos" }, - "CANT_BE_OWNED": "No momento, você não pode se tornar dono de um projeto desse tipo. Se você quiser se tornar dono desse projeto, por favor, entre em contato com os administradores para mudarem as configurações da sua conta para habilitar a propriedade do projeto.", - "CHANGE_MY_PLAN": "Mudar meu plano" + "CANT_BE_OWNED": "No momento, você não pode se tornar dono de um projeto desse tipo. Se você quiser se tornar dono desse projeto, por favor, entre em contato com os administradores para mudarem as configurações da sua conta para habilitar a propriedade do projeto." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Editar Perfil", - "FOLLOW": "Seguir", "CLOSED_US": "Histórias Fechadas", "PROJECTS": "Projetos", "PROJECTS_EMPTY": "{{username}} ainda não tem projetos", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} ainda não tem nenhum contato", "CURRENT_USER_CONTACTS_EMPTY": "Você não tem nenhum contato", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "As pessoas que trabalahm na Taiga serão seus contatos automaticamente", - "REPORT": "Reportar Abuso", "TABS": { "ACTIVITY_TAB": "Linha do Tempo", "ACTIVITY_TAB_TITLE": "Exibir todas as atividade deste usuário", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Tudo", "FILTER_TYPE_ALL_TITLE": "Mostrar tudo", "FILTER_TYPE_PROJECTS": "Projetos", - "FILTER_TYPE_PROJECT_TITLES": "Mostrar somente projetos", + "FILTER_TYPE_PROJECTS_TITLE": "Mostrar somente projetos", "FILTER_TYPE_EPICS": "Épicos", - "FILTER_TYPE_EPIC_TITLES": "Mostrar somente épicos", + "FILTER_TYPE_EPICS_TITLE": "Mostrar somente épicos", "FILTER_TYPE_USER_STORIES": "Histórias", - "FILTER_TYPE_USER_STORIES_TITLES": "Mostrar apenas histórias de usuários", + "FILTER_TYPE_USER_STORIES_TITLE": "Mostrar apenas histórias de usuários", "FILTER_TYPE_TASKS": "Tarefas", - "FILTER_TYPE_TASK_TITLES": "Mostrar apenas tarefas", + "FILTER_TYPE_TASKS_TITLE": "Mostrar apenas tarefas", "FILTER_TYPE_ISSUES": "Problemas", "FILTER_TYPE_ISSUES_TITLE": "mostrar apenas apontamentos", "EMPTY_TITLE": "Parece que não há nada para exibir aqui." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Bem vindo", - "SECTION_PROJECTS": "Projetos", "HELP": "Reordene seus projetos para colocar no topo os mais usados.
    Os 10 primeiros projetos aparecerão na lista de projetos da barra de navegação superior.", "PRIVATE": "Projeto Privado", "LOOKING_FOR_PEOPLE": "Este projeto esta a procura de colaboradores", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Este projeto está temporariamente bloqueado", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Para desbloquear seus projetos, contate o administrador." }, - "STATS": { - "PROJECT": "projetos
    pontos", - "DEFINED": "pontos
    definidos", - "ASSIGNED": "pontos
    com designação", - "CLOSED": "pontos
    fechados" - }, "SECTION": { "SEARCH": "Procurar", "TIMELINE": "Linha do Tempo", @@ -870,13 +816,9 @@ "ADMIN": "Administrador" }, "NAVIGATION": { - "SECTION_TITLE": "Seus projetos", - "PLACEHOLDER_SEARCH": "Procurar em...", "ACTION_CREATE_PROJECT": "Criar projeto", "MANAGE_PROJECTS": "Gerenciar projetos", "TITLE_CREATE_PROJECT": "Criar projeto", - "TITLE_PRVIOUS_PROJECT": "Mostrar projetos prévios", - "TITLE_NEXT_PROJECT": "Mostrar os próximos projetos", "HELP_TITLE": "Página de Suporte do Taiga", "HELP": "Ajuda", "HOMEPAGE": "Página pessoal", @@ -884,10 +826,6 @@ "FEEDBACK": "Feedback", "NOTIFICATIONS_TITLE": "Editar suas configurações de notificações", "NOTIFICATIONS": "Notificações", - "ORGANIZATIONS_TITLE": "Edite suas organizações", - "ORGANIZATIONS": "Editar organizações", - "SETTINGS_TITLE": "Editar suas configurações", - "SETTINGS": "Configurações", "VIEW_PROFILE_TITLE": "Ver perfil", "VIEW_PROFILE": "Ver perfil", "EDIT_PROFILE_TITLE": "Edit seu perfil", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Alterar senha", "DASHBOARD_TITLE": "Painel", "DISCOVER_TITLE": "Descobrir projetos em destaques", - "NEW_ITEM": "Novo", - "DISCOVER": "Descubra", - "ACTION_REORDER": "Seguro e arraste para ordenar" + "DISCOVER": "Descubra" }, "LIKE_BUTTON": { "LIKE": "Curtir", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Criar Projeto", - "FRESH": "Novo em folha. Tão excitante!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Projeto Público", - "PRIVATE_PROJECT": "Projeto Privado", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Projeto Privado" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Novo em folha. Tão excitante!", - "CHOOSE_TEMPLATE_TITLE": "Mais informações sobre templates de projeto", - "CHOOSE_TEMPLATE_INFO": "Mais informações", - "PROJECT_DETAILS": "Detalhes do Projeto", - "PUBLIC_PROJECT": "Projeto Público", - "PRIVATE_PROJECT": "Projeto Privado", - "CREATE_PROJECT": "Criar projeto", - "CHANGE_PLANS": "mudar planos" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})", "SYNC_SUCCESS": "Seu projeto foi importado com sucesso", "IMPORT": "Import", - "ARCHIVED": "Arquivado", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Membros do Projeto", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -997,8 +919,8 @@ "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "Atribuir", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", + "NO_RESULTS": "Parece que nada foi encontrado com os critérios de sua pesquisa.", + "ACTION_SEARCH": "procurar", "ACTION_BACK": "Back" }, "PROJECT_RESTRICTIONS": { @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Membros do Projeto", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Membros do Projeto" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Membros do Projeto", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Tipos de problemas", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Apagar conta no Taiga", "CONFIRM": "Você tem certeza que quer apagar sua conta Taiga?", - "NEWSLETTER_LABEL_TEXT": "Eu não quero receber mais os informativos", "CANCEL": "Voltar para configurações", "ACCEPT": "Remover conta", - "BLOCK_PROJECT": "Note que todos os projetos em que você é o dono serão bloqueados depois que você apagar sua conta. Se você quer um projeto bloqueado, transfira a posse para outro membro de cada projeto antes de apagar sua conta.", - "SUBTITLE": "É uma pena vê-lo partir. Estaremos aqui se você algum dia considerar-nos novamente! :(" + "BLOCK_PROJECT": "Note que todos os projetos em que você é o dono serão bloqueados depois que você apagar sua conta. Se você quer um projeto bloqueado, transfira a posse para outro membro de cada projeto antes de apagar sua conta." }, "DELETE_PROJECT": { "TITLE": "Apagar projeto", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Adicionar Histórias de Usuários em lote", "PROMOTED": "Esta História de Usuário foi criada a partir do Problema:", "TITLE_LINK_GO_TO_ISSUE": "Adicionar comentários aos apontamentos", - "EXTERNAL_REFERENCE": "Esta História de Usuário foi criada de", - "GO_TO_EXTERNAL_REFERENCE": "Ir para a origem", - "BLOCKED": "Esta história de usuário está bloqueada", "TITLE_DELETE_ACTION": "Apagar história de usuário", "LIGHTBOX_TITLE_BLOKING_US": "História de usuário bloqueadora", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} tarefas completas", - "ASSIGN": "Atribuir História de Usuário", "NOT_ESTIMATED": "Não estimado", - "TOTAL_US_POINTS": "Total de pontos de histórias", "TRIBE": { "PUBLISH": "Publicar como Gig no Taiga Tribe", "PUBLISH_INFO": "Mais informações", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Requisitos da Equipe", - "CLIENT_REQUIREMENT": "Requisitos do Cliente", - "FINISH_DATE": "Data de término" + "CLIENT_REQUIREMENT": "Requisitos do Cliente" } }, "COMMENTS": { "DELETED_INFO": "Comentário apagado por {{user}}", - "TITLE": "Comentários", "COMMENTS_COUNT": "{{comments}} comentários", - "ORDER": "Ordenação", "OLDER_FIRST": "Antigos primeiro", "RECENT_FIRST": "Recentes primeiro", "COMMENT": "Comentário", - "EDIT_COMMENT": "Editar comentário", "EDITED_COMMENT": "Editado:", "SHOW_HISTORY": "Ver histórico", "TYPE_NEW_COMMENT": "Escreva um novo comentário aqui", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Exibir atividade", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Mostrar entradas anteriores (mais {{showMore}})", "TITLE": "Atividade", "ACTIVITIES_COUNT": "{{activities}} atividades", - "REMOVED": "removido", - "ADDED": "adicionado", "TAGS_ADDED": "tags adicionadas:", "TAGS_REMOVED": "tags removidas:", "US_POINTS": "{{role}} pontos", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "anexo atualizado ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "atributo personalizado criado", "UPDATED_CUSTOM_ATTRIBUTE": "atributo personalizado atualizado", - "SIZE_CHANGE": "Feito {size, plural, one{one change} other{# changes}}", "BECAME_DEPRECATED": "foi depreciado", "BECAME_UNDEPRECATED": "foi depreciado", "TEAM_REQUIREMENT": "Requisitos da Equipe", "CLIENT_REQUIREMENT": "Requisitos do Cliente", "BLOCKED": "Bloqueado", "VALUES": { - "YES": "sim", - "NO": "não", - "EMPTY": "vazio", "UNASSIGNED": "não atribuído" }, "FIELDS": { "SUBJECT": "assunto", - "NAME": "nome", "DESCRIPTION": "descrição", - "CONTENT": "conteúdo", "STATUS": "status", - "IS_CLOSED": "está fechado", - "FINISH_DATE": "Data de término", "TYPE": "Digite", - "PRIORITY": "prioridade", - "SEVERITY": "gravidade", "ASSIGNED_TO": "Assinado à", - "WATCHERS": "Observadores", "MILESTONE": "sprint", - "USER_STORY": "história de usuário", - "PROJECT": "projeto", - "IS_BLOCKED": "está bloqueada", - "BLOCKED_NOTE": "Nota de bloqueio", - "POINTS": "pontos", - "CLIENT_REQUIREMENT": "requisitos do cliente", - "TEAM_REQUIREMENT": "requisitos da equipe", - "IS_IOCAINE": "É Iocaine", - "TAGS": "tags", - "ATTACHMENTS": "anexos", - "IS_DEPRECATED": "está obsoleto", - "IS_NOT_DEPRECATED": "não está obsoleto", - "ORDER": "ordem", - "BACKLOG_ORDER": "requisição do backlog", - "SPRINT_ORDER": "ordem de sprint ", - "KANBAN_ORDER": "pedido kanban", - "TASKBOARD_ORDER": "Ordem de quadro de tarefa", - "US_ORDER": "ordem da história de usuário", "COLOR": "cor" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Configure os pontos e sprints pelo Administrador", "MOVE_US_TO_CURRENT_SPRINT": "Mover para a Sprint Atual", "MOVE_US_TO_LATEST_SPRINT": "Mover para a última Sprint", - "SHOW_FILTERS": "Mostrar filtros", - "SHOW_TAGS": "Exibir tags", "EMPTY": "O backlog está vazio!", "CREATE_NEW_US": "Criar uma nova História de Usuário", "CREATE_NEW_US_EMPTY_HELP": "Você talvez queira criar uma nova história de usuário", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Alternar visibilidade de filtros", - "TITLE": "Filtros", - "REMOVE": "Remover filtros", "HIDE": "Esconder Filtros", "SHOW": "Mostrar Filtros" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Quadro de tarefas da Sprint", "TITLE_LINK_TASKBOARD": "ir para quadro de tarefas de \"{{name}}\"", - "NUMBER_SPRINTS": "
    sprints", "EMPTY": "Ainda não temos sprints.", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Esta sprint não tem Histórias de Usuário", "WARNING_EMPTY_SPRINT": "Solte aqui Histórias do seu backlog para iniciar uma nova sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Adicionar uma nova Tarefa", "TITLE_ACTION_ADD_BULK": "Adicionar algumas tarefas em lote", "TITLE_ACTION_ASSIGN": "Assinalar tarefa", - "TITLE_ACTION_EDIT": "Editar tarefa", "PLACEHOLDER_CARD_TITLE": "Isto pode ser uma atividade", "PLACEHOLDER_CARD_TEXT": "Separe Histórias de Usuários em atividades para rastreá-las separadamente.", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Nome de Status", "OWNER_US": "Esta tarefa pertence a ", "TITLE_LINK_GO_OWNER": "Ir para história de usuário", - "ORIGIN_US": "Essa tarefa foi criada a partir de", - "TITLE_LINK_GO_ORIGIN": "Ir para história de usuário", - "BLOCKED": "Esta tarefa está bloqueada", "TITLE_DELETE_ACTION": "Apagar Tarefa", "LIGHTBOX_TITLE_BLOKING_TASK": "Tarefa bloqueadora", "FIELDS": { - "MILESTONE": "Sprint", - "USER_STORY": "História de usuário", "IS_IOCAINE": "É Iocaine" }, - "ACTION_IOCAINE": "Iocaine", "TITLE_ACTION_IOCAINE": "Se sentindo sobrecarregado por uma tarefa? Assegure-se de que os outros saibam disso clicando em Iocaine quando estiver editando a tarefa. É possível se tornar imune a essse veneno mortal (fictício) consumindo pequenas quantidades ao longo do tempo, assim como é possível ficar melhor no que faz, ocasionalmente, por assumir desafios extras!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Apontamentos - {{projectName}}", "PAGE_DESCRIPTION": "O painel de problemas do projeto {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Tipos de problemas", "SECTION_NAME": "Problema", "ACTION_NEW_ISSUE": "+ NOVO PROBLEMA", "ACTION_PROMOTE_TO_US": "Promover para História de Usuário", "PROMOTED": "Esse problema foi promovido para história de usuário", "EXTERNAL_REFERENCE": "Esse problema foi criado a partir de", "GO_TO_EXTERNAL_REFERENCE": "Ir para a origem", - "BLOCKED": "Esse apontamento está bloqueado", "ACTION_DELETE": "Problema apagado", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Problema que está bloqueando", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Recolher coluna", "TITLE_ACTION_UNFOLD": "Abrir coluna", - "TITLE_ACTION_FOLD_CARDS": "Guardar cartões", - "TITLE_ACTION_UNFOLD_CARDS": "Mostrar cartões", "TITLE_ACTION_ADD_US": "Adicionar Nova História de Usuário", "TITLE_ACTION_ADD_BULK": "Adicionar novo lote", "ACTION_SHOW_ARCHIVED": "Mostrar arquivados", "ACTION_HIDE_ARCHIVED": "esconder arquivados", "HIDDEN_USER_STORIES": "As histórias de usuários nesse status são escondidas por padrão", - "ARCHIVED": "Você arquivou", - "UNDO_ARCHIVED": "Pegue e arraste novamente para desfazer", "PLACEHOLDER_CARD_TITLE": "Estas são suas Histórias de Usuários", "PLACEHOLDER_CARD_TEXT": "Histórias poderão também ter sub-atividades para separar os requisitos" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Equipe - {{projectName}}", "PAGE_DESCRIPTION": "O painel do time irá exibir todos os membros envolvidos no projeto {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Time", - "APP_TITLE": "EQUIPE - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Procurar pelo nome completo...", "COLUMN_MR_WOLF": "Sr. Wolf", "EXPLANATION_COLUMN_MR_WOLF": "Adicionar apontamentos", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Tudo", "OPTION_INVOLVED": "Envolvido", "OPTION_NONE": "Nada" - }, - "POPOVER": { - "USER_PROFILE": "Perfil do Usuário", - "CHANGE_PASSWORD": "Alterar Senha", - "NOTIFICATIONS": "Notificações", - "FEEDBACK": "Feedback", - "TITLE_AVATAR": "Preferências do Usuário" } }, "USER_PROFILE": { - "IMAGE_HELP": "A imagem será redimensionada para a escala de 80x80px.", - "ACTION_CHANGE_IMAGE": "Alterar", "ACTION_USE_GRAVATAR": "Usar imagem padrão", "ACTION_DELETE_ACCOUNT": "Apagar conta Taiga", "CHANGE_EMAIL_SUCCESS": "Verifique sua caixa de entrada!
    Enviamos um e-mail para sua conta
    com as instruções para definir seu novo endereço", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Ultima edição em {{lastModifiedDate}} ({{totalEditions}} total de edições) Conteúdo: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Escreve sua página wiki", "REMOVE": "Remover essa página wiki", "DELETE_LIGHTBOX_TITLE": "Apagar página Wiki", "DELETE_LINK_TITLE": "Remover link de Wiki", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Mais curtidas", "MOST_LIKED_EMPTY": "Não existe projetos curtidos ainda", "VIEW_MORE": "Visualizar mais", - "RECRUITING": "Este projeto esta procurando colaboradores", "FEATURED": "Projetos em destaque", "EMPTY": "Não há projetos para exibir sob esse critério de pesquisa.
    Tente novamente!", "FILTERS": { diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index feef2b63..c07cb4e7 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -4,7 +4,6 @@ "NO": "Нет", "OR": "или", "LOADING": "Пожалуйста, подождите...", - "LOADING_PROJECT": "Проект загружается...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "Сохранить", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Почему это заблокировано?", "BLOCKED_REASON": "Пожалуйста разъясните причину", "CREATED_BY": "Создано {{fullDisplayName}}", - "FROM": "от", - "TO": "к", "CLOSE": "закрыть", "GO_HOME": "Домой", "PLUGINS": "Плагины", - "BETA": "Программа тестируется!", "ONE_ITEM_LINE": "Один объект на строку...", "NEW_BULK": "Добавить пакетно", "RELATED_TASKS": "Связанные задачи", @@ -148,7 +144,6 @@ "PRIORITY": "Приоритет", "ASSIGNED_TO": "Назначено", "POINTS": "Очки", - "BLOCKED_NOTE": "Пояснение блокировки", "IS_BLOCKED": "заблокирован", "REF": "Ссылка", "VOTES": "Голоса", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{один наблюдатель} other{# наблюдателя (-ей)}}" }, "VOTE_BUTTON": { - "UPVOTE": "Повысить", - "UPVOTED": "Повышено", - "DOWNVOTE": "Понизить", - "VOTERS": "Проголосовавшие", "BUTTON_TITLE": "Повысить/понизить", "COUNTER_TITLE": "{total, plural, one{один голос} other{# голоса (-ов)}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Название ссылки", "TITLE_ACTION_FILTER_BUTTON": "поиск", "TITLE": "Фильтры", - "INPUT_SEARCH_PLACEHOLDER": "Название ссылки", "TITLE_ACTION_SEARCH": "Поиск", "ACTION_SAVE_CUSTOM_FILTER": "сохранить как специальный фильтр", "PLACEHOLDER_FILTER_NAME": "Введите название фильтра и нажмите \"ввод\"", @@ -220,16 +210,10 @@ "CREATED_BY": "Создано", "CUSTOM_FILTERS": "Собственные фильтры", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Удалить фильтр", - "MESSAGE": "специальный фильтр '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Помощь по синтаксису Markdown" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Добавить wiki-ссылки", "DELETE_WIKI_LINKS": "Удалить wiki-ссылки" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga - это платформа по управлению проектами для стартапов и agile-разработчиков/дизайнеров, которые хотят пользоваться простым и красивым инструментом, делающим их жизнь по-настоящему приятной." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Изменить пароль - Taiga", - "PAGE_DESCRIPTION": "Введите новый пароль для Вашего Taiga аккаунта и кстати, еда богатая железом — полезна для мозгов :P", "SECTION_NAME": "Изменить пароль", "FIELD_CURRENT_PASSWORD": "Текущий пароль", "PLACEHOLDER_CURRENT_PASSWORD": "Ваш текущий пароль (или оставьте пустым, если пароль еще не задан)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "У наших Умпа-Лумп не получается найти ваше приглашение.", - "SUCCESS": "Вы успешно добавлены к проекту. Добро пожаловать в {{project_name}}", - "ERROR": "Умпа-Лумпы говорят, что вы не зарегистрированы или ввели неверный пароль." + "SUCCESS": "Вы успешно добавлены к проекту. Добро пожаловать в {{project_name}}" }, "HOME": { "PAGE_TITLE": "Домашняя страница - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Удалить вложение...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "приложение '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Мы не смогли провести удаление: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "рекомендовано" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Пред.", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Мы отправим вам письмо когда будет готово.", "SYNC_MESSAGE": "Если загрузка не начинается самостоятельно, нажмите здесь.", "ERROR": "У Oompa Loompas возникли проблемы при создании резервной копии. Повторите еще раз.", - "ERROR_BUSY": "Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут.", - "ERROR_MESSAGE": "Умпа-Лумпы не смогли создать для вас дамп: {{message}}" + "ERROR_BUSY": "Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут." }, "MODULES": { "TITLE": "Модули", - "ENABLE": "Включить", - "DISABLE": "Выключить", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Список задач", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - профиль Проекта - {{projectName}}", "PROJECT_DETAILS": "Детали проекта", "PROJECT_NAME": "Название проекта", - "PROJECT_SLUG": "Ссылочное имя проекта", "TAGS": "Тэги", "DESCRIPTION": "Описание", "RECRUITING": "Этот проект ищет людей?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Закрытый проект", "PRIVATE_OR_PUBLIC": "В чём разница между публичными и приватными проектами?", "DELETE": "Удалить проект", - "LOGO_HELP": "Изображение будет отмасштабировано до 80x80px.", "CHANGE_LOGO": "Изменить лого", "ACTION_USE_DEFAULT_LOGO": "Использовать картинку по умолчанию", "MAX_PRIVATE_PROJECTS": "Вы достигли максимального числа приватных проектов которое разрешено вашим планом.", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Запросы к Gitlab не подписаны, так что лучший способ их проверки - это проверка по IP-адресу. Если это поле пустое, IP-адрес не будет проверяться." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Веб-хуки - {{projectName}}", "SECTION_NAME": "Веб-хуки", - "SUBTITLE": "Веб-хуки рассказывают внешним сервисам о событиях в Taiga, таких как комментарии, новые пользовательские истории и т.д.", "ADD_NEW": "Добавить новый веб-хук", "TYPE_NAME": "Укажите имя сервиса", "TYPE_PAYLOAD_URL": "Укажите нагрузочную ссылку сервиса", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Удалить участника", "RESEND": "Переотправить", "SUCCESS_SEND_INVITATION": "Мы отправили ещё одно приглашение на адрес '{{email}}'.", - "ERROR_SEND_INVITATION": "Мы не выслали приглашение.", "SUCCESS_DELETE": "Мы удалили {{message}}.", "ERROR_DELETE": "Мы не смогли удалить {{message}}", "DEFAULT_DELETE_MESSAGE": "приглашение на {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Укажите название для нового статуса" }, "MENU": { - "TITLE": "Админка", "PROJECT": "Проект", "ATTRIBUTES": "Атрибуты", "MEMBERS": "Участники", "PERMISSIONS": "Разрешения", - "INTEGRATIONS": "Интеграции", - "PLUGINS": "Плагины" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Атрибуты" + "INTEGRATIONS": "Интеграции" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Статус", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Собственные поля", "TAGS": "Тэги" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Профиль проекта" - }, "SUBMENU_ROLES": { "TITLE": "Роли", "ACTION_NEW_ROLE": "+ Новая роль", "TITLE_ACTION_NEW_ROLE": "Добавить новую роль" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Сервисы" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Private", @@ -783,15 +740,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Изменить профиль", - "FOLLOW": "Следить", "CLOSED_US": "Закрытые ПИ", "PROJECTS": "Проекты", "PROJECTS_EMPTY": "{{username}} пока не имеет проектов", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} ещё не имеет контактов", "CURRENT_USER_CONTACTS_EMPTY": "У вас пока нет контактов", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Люди, с которыми вы работаете в Taiga, будут отмечены как ваши контакты автоматически", - "REPORT": "Пожаловаться", "TABS": { "ACTIVITY_TAB": "График работ", "ACTIVITY_TAB_TITLE": "Показать все действия пользователя", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Все", "FILTER_TYPE_ALL_TITLE": "Показать все", "FILTER_TYPE_PROJECTS": "Проекты", - "FILTER_TYPE_PROJECT_TITLES": "Показать только проекты", + "FILTER_TYPE_PROJECTS_TITLE": "Показать только проекты", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Показывать только эпосы", + "FILTER_TYPE_EPICS_TITLE": "Показывать только эпосы", "FILTER_TYPE_USER_STORIES": "Истории", - "FILTER_TYPE_USER_STORIES_TITLES": "Показывать только пользовательские истории", + "FILTER_TYPE_USER_STORIES_TITLE": "Показывать только пользовательские истории", "FILTER_TYPE_TASKS": "Задачи", - "FILTER_TYPE_TASK_TITLES": "Показывать только задачи", + "FILTER_TYPE_TASKS_TITLE": "Показывать только задачи", "FILTER_TYPE_ISSUES": "Запросы", "FILTER_TYPE_ISSUES_TITLE": "Показывать только запросы", "EMPTY_TITLE": "Похоже, здесь ничего нет." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Добро пожаловать", - "SECTION_PROJECTS": "Проекты", "HELP": "Реорганизуйте свои проекты так чтобы часто используемые были бы наверху.
    Первые 10 проектов будут находится вверху списка проектов.", "PRIVATE": "Закрытый проект", "LOOKING_FOR_PEOPLE": "Этот проект ищет людей", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Этот проект временно заблокирован", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." }, - "STATS": { - "PROJECT": "проекта
    очки", - "DEFINED": "заданные
    очки", - "ASSIGNED": "назначенные
    очки", - "CLOSED": "закрытые
    очки" - }, "SECTION": { "SEARCH": "Поиск", "TIMELINE": "График работ", @@ -870,13 +816,9 @@ "ADMIN": "Админка" }, "NAVIGATION": { - "SECTION_TITLE": "Ваши проекты", - "PLACEHOLDER_SEARCH": "Искать в...", "ACTION_CREATE_PROJECT": "Создать проект", "MANAGE_PROJECTS": "Управлять проектами", "TITLE_CREATE_PROJECT": "Создать проект", - "TITLE_PRVIOUS_PROJECT": "Показать предыдущие проекты", - "TITLE_NEXT_PROJECT": "Показать следующие проекты", "HELP_TITLE": "Страница поддержки Taiga", "HELP": "Помощь", "HOMEPAGE": "Домашняя страница", @@ -884,10 +826,6 @@ "FEEDBACK": "Обратная связь", "NOTIFICATIONS_TITLE": "Настроить уведомления", "NOTIFICATIONS": "Уведомления", - "ORGANIZATIONS_TITLE": "Редактировать Ваши организации", - "ORGANIZATIONS": "Настроить организации", - "SETTINGS_TITLE": "Редактировать настройки", - "SETTINGS": "Настройки", "VIEW_PROFILE_TITLE": "Посмотреть профиль", "VIEW_PROFILE": "Посмотреть профиль", "EDIT_PROFILE_TITLE": "Править свой профиль", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Изменить пароль", "DASHBOARD_TITLE": "Рабочий стол", "DISCOVER_TITLE": "Найти проекты в тренде", - "NEW_ITEM": "Новая", - "DISCOVER": "Найти", - "ACTION_REORDER": "Можно перетаскивать мышкой" + "DISCOVER": "Найти" }, "LIKE_BUTTON": { "LIKE": "Мне нравится", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Создать проект", - "FRESH": "Свежий и чистый! Так здóрово!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Частный проект", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Частный проект" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Свежий и чистый! Так здóрово!", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "Больше инфо", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Частный проект", - "CREATE_PROJECT": "Создать проект", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})", "SYNC_SUCCESS": "Импорт проекта выполнен успешно", "IMPORT": "Import", - "ARCHIVED": "В архиве", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Участники проекта", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -998,8 +920,8 @@ "ASSIGN": "Назначить", "PROJECT_SELECTOR": { "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "ACTION_SEARCH": "поиск", + "ACTION_BACK": "Бэкенд разработчик" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Участники проекта", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Участники проекта" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Участники проекта", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Запросы", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Удалить аккаунт", "CONFIRM": "Вы уверены, что хотите удалить ваш аккаунт?", - "NEWSLETTER_LABEL_TEXT": "Я больше не хочу получать вашу новостную рассылку", "CANCEL": "Вернуться к настройкам", "ACCEPT": "Удалить аккаунт", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account." }, "DELETE_PROJECT": { "TITLE": "Удалить проект", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Добавить Пользовательские Истории пакетно", "PROMOTED": "Эта ПИ была сформирована из запроса:", "TITLE_LINK_GO_TO_ISSUE": "Перейти к запросу", - "EXTERNAL_REFERENCE": "Эта ПИ была создана из:", - "GO_TO_EXTERNAL_REFERENCE": "Перейти в начало", - "BLOCKED": "Эта пользовательская история заблокирована", "TITLE_DELETE_ACTION": "Удалить пользовательскую историю", "LIGHTBOX_TITLE_BLOKING_US": "Блокирующая ПИ", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} задач выполнено", - "ASSIGN": "Поручить пользовательскую историю", "NOT_ESTIMATED": "Не оценено", - "TOTAL_US_POINTS": "Всего очков за ПИ", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "Больше инфо", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Требование от Команды", - "CLIENT_REQUIREMENT": "Требование клиента", - "FINISH_DATE": "Дата завершения" + "CLIENT_REQUIREMENT": "Требование клиента" } }, "COMMENTS": { "DELETED_INFO": "Комментарий удалён {{user}}", - "TITLE": "Комментарии", "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Порядок", "OLDER_FIRST": "Сначала старые", "RECENT_FIRST": "Сначала новые", "COMMENT": "Комментарий", - "EDIT_COMMENT": "Редактировать комментарий", "EDITED_COMMENT": "Изменено:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Добавить комментарий", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Показать действия", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Показать предыдущие записи (ещё {{showMore}})", "TITLE": "Действия", "ACTIVITIES_COUNT": "{{activities}} Activities", - "REMOVED": "удален", - "ADDED": "добавлено", "TAGS_ADDED": "тэги добавлены:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "Сделано {size, plural, one{изменение} other{# изменений}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Требование от Команды", "CLIENT_REQUIREMENT": "Требование клиента", "BLOCKED": "Заблокирован", "VALUES": { - "YES": "да", - "NO": "нет", - "EMPTY": "пусто", "UNASSIGNED": "нет ответственного" }, "FIELDS": { "SUBJECT": "название", - "NAME": "имя", "DESCRIPTION": "описание", - "CONTENT": "контент", "STATUS": "cтатус", - "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": "рекомендовано", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "порядок", - "BACKLOG_ORDER": "порядок списка задач", - "SPRINT_ORDER": "порядок спринтов", - "KANBAN_ORDER": "порядок kanban", - "TASKBOARD_ORDER": "порядок панели задач", - "US_ORDER": "порядок ПИ", "COLOR": "цвет" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Настройте очки и спринты в админке", "MOVE_US_TO_CURRENT_SPRINT": "Перейти к текущему спринту", "MOVE_US_TO_LATEST_SPRINT": "Перейти к последнему спринту", - "SHOW_FILTERS": "Показать фильтры", - "SHOW_TAGS": "Показать теги", "EMPTY": "Список задач пуст!", "CREATE_NEW_US": "Создать новую ПИ", "CREATE_NEW_US_EMPTY_HELP": "Вы можете создать пользовательскую историю", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Переключить видимость фильтров", - "TITLE": "Фильтры", - "REMOVE": "Сбросить фильтры", "HIDE": "Спрятать фильтры", "SHOW": "Показать фильтры" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "Панель задач Спринта", "TITLE_LINK_TASKBOARD": "Перейти к Панели Задач \"{{name}}\"", - "NUMBER_SPRINTS": "
    спринты", "EMPTY": "Спринтов пока что нет", "WARNING_EMPTY_SPRINT_ANONYMOUS": "У этого спринта нет пользовательских историй", "WARNING_EMPTY_SPRINT": "Накидайте сюда ПИ из списка задач чтобы начать новый спринт", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Добавить новую Задачу", "TITLE_ACTION_ADD_BULK": "Добавить новые задачи пакетно", "TITLE_ACTION_ASSIGN": "Назначить задачу", - "TITLE_ACTION_EDIT": "Редактировать задачу", "PLACEHOLDER_CARD_TITLE": "Это может быть задачей", "PLACEHOLDER_CARD_TEXT": "Разделяйте ПИ в задачи чтобы отслеживать их по отдельности", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Статус", "OWNER_US": "Эта задача принадлежит:", "TITLE_LINK_GO_OWNER": "Перейти к пользовательской истории", - "ORIGIN_US": "Эта задача была создана из", - "TITLE_LINK_GO_ORIGIN": "Перейти к пользовательской истории", - "BLOCKED": "Эта задача заблокирована", "TITLE_DELETE_ACTION": "Удалить задачу", "LIGHTBOX_TITLE_BLOKING_TASK": "Блокирующее задание", "FIELDS": { - "MILESTONE": "Спринт", - "USER_STORY": "Пользовательская история", "IS_IOCAINE": "- иокаин" }, - "ACTION_IOCAINE": "иокаин", "TITLE_ACTION_IOCAINE": "Чувствуете, что задание берет верх над вами? Дайте другим знать об этом, нажав на \"Иокаин\", когда редактируете задание. Возможно стать неуязвимым к этому (выдуманному) смертельном яду, потребляя небольшие количества время от времени, так же как возможно стать лучше в том, что вы делаете, временами беря на себя дополнительные препятствия!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Запросы - {{projectName}}", "PAGE_DESCRIPTION": "Панель запросов проекта {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Запросы", "SECTION_NAME": "Запрос", "ACTION_NEW_ISSUE": "+НОВЫЙ ЗАПРОС", "ACTION_PROMOTE_TO_US": "Повысить до пользовательской истории", "PROMOTED": "Этот запрос был переделан в ПИ:", "EXTERNAL_REFERENCE": "Этот запрос был создан из", "GO_TO_EXTERNAL_REFERENCE": "Перейти в начало", - "BLOCKED": "Этот запрос заблокирована", "ACTION_DELETE": "Удалить запрос", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Блокирующий запрос", "FIELDS": { @@ -1545,15 +1399,11 @@ "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": "Для отмены надо перетащить и сбросить ещё раз", "PLACEHOLDER_CARD_TITLE": "Это - ваши Пользовательские Истории.", "PLACEHOLDER_CARD_TEXT": "У ПИ также могут быть подзадачи чтобы можно было разделять требования" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Команда - {{projectName}}", "PAGE_DESCRIPTION": "Панель команды показывает всех участников проекта {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Команда", - "APP_TITLE": "КОМАНДА - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Искать по имени", "COLUMN_MR_WOLF": "Мр. Вульф", "EXPLANATION_COLUMN_MR_WOLF": "Закрытые запросы", @@ -1610,18 +1459,9 @@ "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": "Удалить аккаунт", "CHANGE_EMAIL_SUCCESS": "Проверьте входящие письма!
    Мы послали письмо на ваш аккаунт
    с инструкциями по установке вашего нового адреса.", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Вики - {{projectName}}", "PAGE_DESCRIPTION": "Последнее редактирование: {{lastModifiedDate}} ({{totalEditions}} - всего правок) Контент: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Создать вики страницу", "REMOVE": "Удалить эту вики страницу", "DELETE_LIGHTBOX_TITLE": "Удалить вики страницу", "DELETE_LINK_TITLE": "Удалить ссылку wiki", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Больше всего лайков", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "Показать больше", - "RECRUITING": "Этот проект ищет людей", "FEATURED": "Популярные проекты", "EMPTY": "Нету проектов, удовлетворяющих заданным критериям поиска.
    Попробуйте снова!", "FILTERS": { diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index 705d1314..d5dd6836 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -4,7 +4,6 @@ "NO": "Nej", "OR": "eller", "LOADING": "Laddar...", - "LOADING_PROJECT": "Laddar projekt...", "DATE": "YYYY-MM-DD", "DATETIME": "YYYY-MM-DD HH:mm", "SAVE": "Spara", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Varför är denna blockerad?", "BLOCKED_REASON": "Vänligen förklara orsaken", "CREATED_BY": "Skapad av {{fullDisplayName}}", - "FROM": "från", - "TO": "till ", "CLOSE": "stäng", "GO_HOME": "Ta mig hem", "PLUGINS": "Insticksprogram", - "BETA": "Vi betatestar!", "ONE_ITEM_LINE": "En post per rad ...", "NEW_BULK": "Lägg till flera nya", "RELATED_TASKS": "Besläktade uppgifter", @@ -148,7 +144,6 @@ "PRIORITY": "Prioritet", "ASSIGNED_TO": "Tilldelad till", "POINTS": "Poäng", - "BLOCKED_NOTE": "blockerad notering", "IS_BLOCKED": "är blockerad", "REF": "Ref. ", "VOTES": "Röster", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{one watcher} other{# watchers}}" }, "VOTE_BUTTON": { - "UPVOTE": "Rösta för", - "UPVOTED": "Rösta för", - "DOWNVOTE": "Rösta emot", - "VOTERS": "Röstande", "BUTTON_TITLE": "Rösta för / Rösta emot den här posten", "COUNTER_TITLE": "{total, plural, one{one vote} other{# votes}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Titel eller referens", "TITLE_ACTION_FILTER_BUTTON": "sök", "TITLE": "Filter", - "INPUT_SEARCH_PLACEHOLDER": "Titel eller referens", "TITLE_ACTION_SEARCH": "Sök", "ACTION_SAVE_CUSTOM_FILTER": "spara som anpassad filter", "PLACEHOLDER_FILTER_NAME": "Skriv filternamnet och tryck på ", @@ -220,16 +210,10 @@ "CREATED_BY": "Skapad av", "CUSTOM_FILTERS": "Anpassad filter", "EPIC": "Epost" - }, - "CONFIRM_DELETE": { - "TITLE": "Ta bort anpassad filter.", - "MESSAGE": "anpassad filter '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Hjälp för markeringssyntax" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Lägg till wiki-länkar", "DELETE_WIKI_LINKS": "Ta bort wiki-länkar" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga är ett projekthanteringsverktyg för nystartade företag och agila utvecklings- och designteam som behöver enkla, vackra verktyg som det är trevligt att jobba med. " } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Byt ditt lösenord - Taiga", - "PAGE_DESCRIPTION": "Skapa ett nytt lösenord för din Taiga-konto och hej! du kanske behöver äta något järnrik kost. Det är bra för hjärnan. :P", "SECTION_NAME": "Byt lösenord", "FIELD_CURRENT_PASSWORD": "Befintligt lösenord", "PLACEHOLDER_CURRENT_PASSWORD": "Ditt nuvarande lösenord (eller tomt om du inte har något lösenord än)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Våra Oompa Loompier kan inte hitta din invitation.", - "SUCCESS": "Du har nu blitt medlem i det här projektet. Välkommen till {{project_name}}", - "ERROR": "Enligt våra Oompa Loompier är du inte registrerad än eller ditt lösenord är fel. " + "SUCCESS": "Du har nu blitt medlem i det här projektet. Välkommen till {{project_name}}" }, "HOME": { "PAGE_TITLE": "Hem - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Ta bort bilagan ...", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "bifogad '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Vi klarade inte att ta bort: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "undviks" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Förra", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Vi vill skicka dig ett e-postmeddelande när vi är klara.", "SYNC_MESSAGE": "Om hämtningen inte startar automatiskt, klick här.", "ERROR": "Våra Oompa Loompier har vissa problemer med att skapa din hämtningsfil. Vänligen försök på nytt!", - "ERROR_BUSY": "Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. ", - "ERROR_MESSAGE": "Våra Oompa Loompier har vissa problem med att skapa din hämtfil: {{message}}" + "ERROR_BUSY": "Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. " }, "MODULES": { "TITLE": "Moduler", - "ENABLE": "Aktivera", - "DISABLE": "Avvaktivera", "EPICS": "Epos", "EPICS_DESCRIPTION": "Visualisera och hantera den mest strategiska delen av ditt projekt", "BACKLOG": "Inkorg", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Projektprofil - {{projectName}}", "PROJECT_DETAILS": "Projektdetaljer", "PROJECT_NAME": "Projektnamn", - "PROJECT_SLUG": "Projektslugg", "TAGS": "Etiketter", "DESCRIPTION": "Beskrivning", "RECRUITING": "Letar detta projekt efter personer? ", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Privata projekt", "PRIVATE_OR_PUBLIC": "Vad är skillnaden mellan publika och privata projekt?", "DELETE": "Ta bort projekt", - "LOGO_HELP": "Bilden kommer skalas till 80x80px.", "CHANGE_LOGO": "Ändra logga", "ACTION_USE_DEFAULT_LOGO": "Use default image", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Gitlab-förfrågningar är inte signerade. Det bästa är att kontrollera ursprunglig IP-adress. Om fältet är tomt vill det inte bli någon IP-kontroll." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webbkrok - {{projectName}}", "SECTION_NAME": "Webbkrokar", - "SUBTITLE": "Webbkrokar notifierar externa tjänster om händelser i Taiga, till exempel kommentarer, användarhistorier ...", "ADD_NEW": "Lägg till en ny Webbkrok", "TYPE_NAME": "Skriv in tjänstens namn", "TYPE_PAYLOAD_URL": "Skriv in länken till tjänsten", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Ta bort medlem", "RESEND": "Skicka på nytt", "SUCCESS_SEND_INVITATION": "Vi har skickat på nytt invitationen till '{{email}}'.", - "ERROR_SEND_INVITATION": "Vi har inte skickat invitationen", "SUCCESS_DELETE": "Vi har tagit bort {{message}}.", "ERROR_DELETE": "Vi har inte lyckats att ta bort {{message}}.", "DEFAULT_DELETE_MESSAGE": "den här invitationen till {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Skriv ett namn för den nya statusen" }, "MENU": { - "TITLE": "Administrator", "PROJECT": "Projekt", "ATTRIBUTES": "Egenskaper", "MEMBERS": "Medlemmar", "PERMISSIONS": "Behörigheter", - "INTEGRATIONS": "Integrationer", - "PLUGINS": "Insticksprogram" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Egenskaper" + "INTEGRATIONS": "Integrationer" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Status", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Anpassade fält", "TAGS": "Etiketter" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Projektprofil" - }, "SUBMENU_ROLES": { "TITLE": "Roller", "ACTION_NEW_ROLE": "+ Ny roll", "TITLE_ACTION_NEW_ROLE": "Lägg till ny roll" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Tjänster" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Privat", @@ -783,15 +740,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Ändra min plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Ändra profil", - "FOLLOW": "Följ", "CLOSED_US": "Stängd US", "PROJECTS": "Projekt", "PROJECTS_EMPTY": "{{username}} har inga projekt än", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} har inte några kontakter än", "CURRENT_USER_CONTACTS_EMPTY": "Du har inga kontakter än", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "De du arbetar med på Taiga vill automatiskt bli dina kontakter. ", - "REPORT": "Rapportera misbruk", "TABS": { "ACTIVITY_TAB": "Tidslinje", "ACTIVITY_TAB_TITLE": "Visa alla aktiviteter för den här användaren", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Alla", "FILTER_TYPE_ALL_TITLE": "Visa alla", "FILTER_TYPE_PROJECTS": "Projekt", - "FILTER_TYPE_PROJECT_TITLES": "Visa bara projekt", + "FILTER_TYPE_PROJECTS_TITLE": "Visa bara projekt", "FILTER_TYPE_EPICS": "Epos", - "FILTER_TYPE_EPIC_TITLES": "Visa endast epos", + "FILTER_TYPE_EPICS_TITLE": "Visa endast epos", "FILTER_TYPE_USER_STORIES": "Berättelser", - "FILTER_TYPE_USER_STORIES_TITLES": "Visa endast användarhistorier", + "FILTER_TYPE_USER_STORIES_TITLE": "Visa endast användarhistorier", "FILTER_TYPE_TASKS": "Uppgift", - "FILTER_TYPE_TASK_TITLES": "Visar endast uppgifter", + "FILTER_TYPE_TASKS_TITLE": "Visar endast uppgifter", "FILTER_TYPE_ISSUES": "Ärenden", "FILTER_TYPE_ISSUES_TITLE": "Visa bara ärenden ", "EMPTY_TITLE": "Det verkar som om vi inte har något att visa just nu" @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Välkommen", - "SECTION_PROJECTS": "Projekt", "HELP": "Organisera dina projekt och sätt in de mest använda här.
    De första 10 toppprojekten vill visas i toppnavigeringens projektlista. ", "PRIVATE": "Privata projekt", "LOOKING_FOR_PEOPLE": "Detta projekt söker efter fler personer", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "Detta projekt är tillfälligt blockerat", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "Kontakta administratören för att avblockera dina projekt." }, - "STATS": { - "PROJECT": "projekt
    poäng", - "DEFINED": "definierad
    poäng", - "ASSIGNED": "tilldelad
    poäng", - "CLOSED": "stängd
    poäng" - }, "SECTION": { "SEARCH": "Sök", "TIMELINE": "Tidslinje", @@ -870,13 +816,9 @@ "ADMIN": "Administrator" }, "NAVIGATION": { - "SECTION_TITLE": "Dina projekt", - "PLACEHOLDER_SEARCH": "Sök i ...", "ACTION_CREATE_PROJECT": "Skapa projekt", "MANAGE_PROJECTS": "Hantera projekt", "TITLE_CREATE_PROJECT": "Skapa projekt", - "TITLE_PRVIOUS_PROJECT": "Visa tidigare projekt", - "TITLE_NEXT_PROJECT": "Visa nästa projekt", "HELP_TITLE": "Taiga hjälpsida", "HELP": "Hjälp", "HOMEPAGE": "Webbplats", @@ -884,10 +826,6 @@ "FEEDBACK": "Återkoppling", "NOTIFICATIONS_TITLE": "Ändra inställningar för dina notifieringar", "NOTIFICATIONS": "Notifieringar", - "ORGANIZATIONS_TITLE": "Ändra dina organisationer", - "ORGANIZATIONS": "Ändra organizationer", - "SETTINGS_TITLE": "Ändra inställningarna", - "SETTINGS": "Inställningar", "VIEW_PROFILE_TITLE": "Visa profil", "VIEW_PROFILE": "Visa profil", "EDIT_PROFILE_TITLE": "Ändra din profil", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Byt lösenord", "DASHBOARD_TITLE": "Instrumentpanel", "DISCOVER_TITLE": "Upptäck nya rörliga projekt", - "NEW_ITEM": "Ny", - "DISCOVER": "Upptäck", - "ACTION_REORDER": "Dra & släpp för att sortera" + "DISCOVER": "Upptäck" }, "LIKE_BUTTON": { "LIKE": "Gillar", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Skapa projekt", - "FRESH": "Fräscht och rent. Så trevligt!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Privat Projekt", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Privat Projekt" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Fräscht och rent. Så trevligt!", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Privat Projekt", - "CREATE_PROJECT": "Skapa projekt", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})", "SYNC_SUCCESS": "Ditt projekt är korrekt importerad", "IMPORT": "Import", - "ARCHIVED": "Arkiverad", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -998,8 +920,8 @@ "ASSIGN": "Tilldela", "PROJECT_SELECTOR": { "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "ACTION_SEARCH": "sök", + "ACTION_BACK": "Baksida" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Frågor", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Ta bort konto", "CONFIRM": "Är du säker på att du vill radera kontot?", - "NEWSLETTER_LABEL_TEXT": "Jag vill inte motta flera nyhetsbrev", "CANCEL": "Tillbaka till inställningar", "ACCEPT": "Ta bort konto", - "BLOCK_PROJECT": "Notera att alla projekt du äger kommer bli blockerade efter att du raderar ditt konto. Om du vill blockera ett projekt, överför ägandet till en annan medlem för respektive projekt innan du raderar ditt konto. ", - "SUBTITLE": "Vad tråkigt att du lämnar. Vi kommer finnas här om du någonsin skulle överväga oss igen! :(" + "BLOCK_PROJECT": "Notera att alla projekt du äger kommer bli blockerade efter att du raderar ditt konto. Om du vill blockera ett projekt, överför ägandet till en annan medlem för respektive projekt innan du raderar ditt konto. " }, "DELETE_PROJECT": { "TITLE": "Ta bort projekt", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Lägg till flera nya användarhistorier", "PROMOTED": "Denna US har blivit flyttat från ärende: ", "TITLE_LINK_GO_TO_ISSUE": "Gå till ärende", - "EXTERNAL_REFERENCE": "Denna användarhistorien är skapat från", - "GO_TO_EXTERNAL_REFERENCE": "Gå till början", - "BLOCKED": "Användarhistorien är blockerad", "TITLE_DELETE_ACTION": "Ta bort användarhistorien", "LIGHTBOX_TITLE_BLOKING_US": "Blockera oss", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} uppgifter kompletta", - "ASSIGN": "Lägg till användarhistorie", "NOT_ESTIMATED": "Ej beräknad", - "TOTAL_US_POINTS": "Total US-poäng", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "More info", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Teamets behov", - "CLIENT_REQUIREMENT": "Kräver beställare", - "FINISH_DATE": "Färdig datum" + "CLIENT_REQUIREMENT": "Kräver beställare" } }, "COMMENTS": { "DELETED_INFO": "Kommentar raderad av {{user}}", - "TITLE": "Kommentarer", "COMMENTS_COUNT": "{{comments}} Kommentarer", - "ORDER": "Sortera", "OLDER_FIRST": "Äldre först", "RECENT_FIRST": "Senast först", "COMMENT": "Kommentarer", - "EDIT_COMMENT": "Redigera kommentar", "EDITED_COMMENT": "Redigerad:", "SHOW_HISTORY": "Se historik", "TYPE_NEW_COMMENT": "Skriv en ny kommentar här", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Visa aktiviteter", - "DATETIME": "YYYY-MM-DD HH:mm", - "SHOW_MORE": "+ Visa tidigare poster ({{showMore}} more)", "TITLE": "Aktiviteter", "ACTIVITIES_COUNT": "{{activities}} Aktiviteter", - "REMOVED": "borttaget", - "ADDED": "lagt till", "TAGS_ADDED": "taggar tillagda", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "Gjorde {size, plural, one{one change} other{# changes}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Teamets behov", "CLIENT_REQUIREMENT": "Kräver beställare", "BLOCKED": "Blockerad", "VALUES": { - "YES": "ja", - "NO": "nej", - "EMPTY": "tom", "UNASSIGNED": "otilldelad" }, "FIELDS": { "SUBJECT": "titel", - "NAME": "namn", "DESCRIPTION": "beskrivning", - "CONTENT": "innehåll", "STATUS": "status", - "IS_CLOSED": "är stängd", - "FINISH_DATE": "färdig datum", "TYPE": "typ", - "PRIORITY": "prioritet", - "SEVERITY": "Allvarsgrad", "ASSIGNED_TO": "tilldelad till", - "WATCHERS": "bevakare", "MILESTONE": "sprint", - "USER_STORY": "Användarhistorie", - "PROJECT": "projekt", - "IS_BLOCKED": "är blockerad", - "BLOCKED_NOTE": "blockerad notering", - "POINTS": "poäng", - "CLIENT_REQUIREMENT": "kräver beställare", - "TEAM_REQUIREMENT": "krav arbetsgrupp", - "IS_IOCAINE": "är Iocaine", - "TAGS": "etiketter", - "ATTACHMENTS": "bilagor", - "IS_DEPRECATED": "undviks", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "sortera", - "BACKLOG_ORDER": "sortera inkorgen", - "SPRINT_ORDER": "sortera sprintar", - "KANBAN_ORDER": "kanban-sortering", - "TASKBOARD_ORDER": "Sortera uppgiftstavlan", - "US_ORDER": "sortera US", "COLOR": "färg" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Lägg till poäng och sprintar via Administratorn", "MOVE_US_TO_CURRENT_SPRINT": "Flytta till nuvarande sprint", "MOVE_US_TO_LATEST_SPRINT": "Move to latest Sprint", - "SHOW_FILTERS": "Visa filter", - "SHOW_TAGS": "Visa etiketter", "EMPTY": "Inkorgen är tom!", "CREATE_NEW_US": "Skapa en ny US", "CREATE_NEW_US_EMPTY_HELP": "Du kanske vill skapa en ny användarhistorie", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Växla filtrens synlighet", - "TITLE": "Filter", - "REMOVE": "Ta bort filter", "HIDE": "Dölj filter", "SHOW": "Visa filter" }, @@ -1402,7 +1266,6 @@ "DATE": "YYYY-MM-DD", "LINK_TASKBOARD": "Sprint uppgiftspanel", "TITLE_LINK_TASKBOARD": "Gå till uppgiftspanelen för \"{{name}}\"", - "NUMBER_SPRINTS": "
    sprintar\n", "EMPTY": "Det är inga sprintar än", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Den här sprinten har inga användarhistorier", "WARNING_EMPTY_SPRINT": "Här kan du föra in användarhistorier från inkorgen för att starta en ny sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Lägg till en ny uppgift", "TITLE_ACTION_ADD_BULK": "Lägg till några flera nya uppgifter", "TITLE_ACTION_ASSIGN": "Tilldela uppgift", - "TITLE_ACTION_EDIT": "Ändra uppgiften", "PLACEHOLDER_CARD_TITLE": "Det har kan vara en uppgift", "PLACEHOLDER_CARD_TEXT": "Dela användarhistorier upp i uppgifter och spåra dem separat", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Status namn", "OWNER_US": "Den här uppgiften tillhör", "TITLE_LINK_GO_OWNER": "Gå till användarhistorie", - "ORIGIN_US": "Den här uppgiften är skapad från", - "TITLE_LINK_GO_ORIGIN": "Gå till användarhistorie", - "BLOCKED": "Uppgiften är blockerad", "TITLE_DELETE_ACTION": "Ta bort uppgift", "LIGHTBOX_TITLE_BLOKING_TASK": "Blockerad uppgift", "FIELDS": { - "MILESTONE": "Sprint", - "USER_STORY": "Användarhistorie", "IS_IOCAINE": "Är iocaine" }, - "ACTION_IOCAINE": "Iocaine", "TITLE_ACTION_IOCAINE": "Känner du dig lite bortkommen med en uppgift? Försäkra dig om att andra känner till uppgiften när du klickar på Iocaine-knappen när du ändrar uppgiften. Det är möjligt att bli immun till det här (påhittade) dödliga giftet om du tar små mängder över tid - och du kan även så småningom om bli bättre på vad du gör när du då och då tar på dig större utmaningar!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Ärenden - {{projectName}}", "PAGE_DESCRIPTION": "Ärenden som listas för projektet {{projectName}}: {{projectDescription}}", - "LIST_SECTION_NAME": "Ärenden", "SECTION_NAME": "ärende", "ACTION_NEW_ISSUE": "+ NYTT ÄRENDE", "ACTION_PROMOTE_TO_US": "Flytta till användarhistorie", "PROMOTED": "Ärendet har flyttats till US:", "EXTERNAL_REFERENCE": "Den här uppgiften är skapat från", "GO_TO_EXTERNAL_REFERENCE": "Gå till början", - "BLOCKED": "Det här ärendet är blockerad", "ACTION_DELETE": "Ta bort ärende", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Blockerad ärende", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Vika i hop kolumnen", "TITLE_ACTION_UNFOLD": "Veckla ut kolumnen", - "TITLE_ACTION_FOLD_CARDS": "Vika ut kortet", - "TITLE_ACTION_UNFOLD_CARDS": "Vika ut korten", "TITLE_ACTION_ADD_US": "Lägg till ny användarhistorie", "TITLE_ACTION_ADD_BULK": "Lägg till flera nya", "ACTION_SHOW_ARCHIVED": "Visa arkiverad", "ACTION_HIDE_ARCHIVED": "Dölj arkiverad", "HIDDEN_USER_STORIES": "Användarhistorien för den här statusen är dolt som standard", - "ARCHIVED": "Du har arkiverad", - "UNDO_ARCHIVED": "Dra & släpp på nytt för att göra om", "PLACEHOLDER_CARD_TITLE": "Detta är dina användarhistorier", "PLACEHOLDER_CARD_TEXT": "Användarhistorier behöver även underuppgifter för att separera kraven." }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Team - {{projectName}}", "PAGE_DESCRIPTION": "Panelen för arbetsgrupper visar alla medlemmar i projektet {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Arbetsgrupp", - "APP_TITLE": "Arbetsgrupp - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Sök på hela namnet ...", "COLUMN_MR_WOLF": "Herr Hansson", "EXPLANATION_COLUMN_MR_WOLF": "Stängda ärenden", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Alla", "OPTION_INVOLVED": "Involverad", "OPTION_NONE": "Ingen" - }, - "POPOVER": { - "USER_PROFILE": "Användarprofil", - "CHANGE_PASSWORD": "Ändra lösenord", - "NOTIFICATIONS": "Notifieringar", - "FEEDBACK": "Återkoppling", - "TITLE_AVATAR": "Inställningar för användare" } }, "USER_PROFILE": { - "IMAGE_HELP": "Bilden kommer skalas till 80x80px.", - "ACTION_CHANGE_IMAGE": "Ändra", "ACTION_USE_GRAVATAR": "Use default image", "ACTION_DELETE_ACCOUNT": "Ta bort Taiga-kontot", "CHANGE_EMAIL_SUCCESS": "Kontrollera din inbox!
    Vi har skickad dig ett e-postmeddelande
    med instruktioner för hur du sätter upp din nya adress", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Senaste ändringar utförd {{lastModifiedDate}} ({{totalEditions}} editions in total) Innehållt: {{ wikiPageContent }}", "DATETIME": "YYYY-MM-DD HH:mm", - "PLACEHOLDER_PAGE": "Skriv din wiki-sida", "REMOVE": "Ta bort den här wiki-sidan", "DELETE_LIGHTBOX_TITLE": "Ta bort Wiki-sida", "DELETE_LINK_TITLE": "Ta bort wiki-länk", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "Most liked", "MOST_LIKED_EMPTY": "There are no LIKED projects yet", "VIEW_MORE": "View more", - "RECRUITING": "Detta projekt söker efter personer", "FEATURED": "Featured Projects", "EMPTY": "There are no projects to show with this search criteria.
    Try again!", "FILTERS": { diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 42ed6918..6a95c963 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -4,7 +4,6 @@ "NO": "Hayır", "OR": "veya", "LOADING": "Yükleniyor...", - "LOADING_PROJECT": "Proje yükleniyor...", "DATE": "DD MM YYYY", "DATETIME": "DD MM YYYY HH:mm", "SAVE": "Kaydet", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "Bu niye engelli?", "BLOCKED_REASON": "Lütfen sebebini açıklayın", "CREATED_BY": "{{fullDisplayName}} tarafından oluşturuldu", - "FROM": "den", - "TO": "kime", "CLOSE": "kapat", "GO_HOME": "Ana sayfaya götür beni", "PLUGINS": "Eklentiler", - "BETA": "Betadayız!", "ONE_ITEM_LINE": "Her satıra bir kalem...", "NEW_BULK": "Yeni toplu ekleme", "RELATED_TASKS": "İlişkili görevler", @@ -148,7 +144,6 @@ "PRIORITY": "Öncelik", "ASSIGNED_TO": "Atanmış", "POINTS": "Puanlar", - "BLOCKED_NOTE": "engel notu", "IS_BLOCKED": "engellendi ", "REF": "Ref", "VOTES": "Oylar", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{bir takipçi} other{# takipçi}}" }, "VOTE_BUTTON": { - "UPVOTE": "Oy ver", - "UPVOTED": "Oy verildi", - "DOWNVOTE": "Karşı oy ver", - "VOTERS": "Oylayıcılar", "BUTTON_TITLE": "Bu konuya oy/karşı oy ver", "COUNTER_TITLE": "{total, plural, one{bir oy} other{# oy}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "Konu yada referans", "TITLE_ACTION_FILTER_BUTTON": "ara", "TITLE": "Filtreler", - "INPUT_SEARCH_PLACEHOLDER": "Konu ya da ref", "TITLE_ACTION_SEARCH": "Ara", "ACTION_SAVE_CUSTOM_FILTER": "özel filtre olarak kaydet", "PLACEHOLDER_FILTER_NAME": "Filtre adı yazın ve enter a basın", @@ -220,16 +210,10 @@ "CREATED_BY": "Oluşturan", "CUSTOM_FILTERS": "Özel filtreler", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "Özel filtre sil", - "MESSAGE": "'{{customFilterName}}' özel filtresi" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown yazım kılavuzu" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "Wiki bağlantıları ekle", "DELETE_WIKI_LINKS": "Wiki bağlantılarını sil" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga; yeni girişimciler, çevik geliştiriciler ve tasarımcılar için çalışmaları gerçekten eğlenceli hale getiren basit, güzel bir proje yönetim platformudur." } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "Parolayı değiştirin - Taiga", - "PAGE_DESCRIPTION": "Taiga hesabınız için yeni bir parola belirleyin, ha bir de, bol demirli besinlere yönelmek isteyebilirisiniz belki, beyine iyi gelir :P", "SECTION_NAME": "Parolayı değiştir", "FIELD_CURRENT_PASSWORD": "Şimdiki parola", "PLACEHOLDER_CURRENT_PASSWORD": "Şimdiki parolanız (boş da olabilir eger parola belirlemediyseniz)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "Umpa Lumpalarımız davetiyenize ulaşamıyor.", - "SUCCESS": "Projeye katılımınız başarıyla gerçekleşti. {{project_name}} 'ye hoş geldiniz.", - "ERROR": "Honki ponkilerimize göre, ya henüz kayıtlı değilsiniz ya da gerçersiz bir parola girdiniz" + "SUCCESS": "Projeye katılımınız başarıyla gerçekleşti. {{project_name}} 'ye hoş geldiniz." }, "HOME": { "PAGE_TITLE": "AnaSayfa - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "Ek sil", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "ek '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "Silemiyoruz: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin", - "FIELDS": { - "IS_DEPRECATED": "kaldırıldı" - } + "ERROR_MAX_SIZE_EXCEEDED": "({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin" }, "PAGINATION": { "PREVIOUS": "Önceki", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "Hazır olduğunda size bir e-posta göndereceğiz.", "SYNC_MESSAGE": "Eğer indirme otomatik olarak başlamıyor ise buraya tıklayın.", "ERROR": "Bizim Honki ponkiler döküm dosyasını oluştururken birkaç hata ile karşılaştı. Lütfen yeniden deneyin.", - "ERROR_BUSY": "Üzgünüz, bizim honki ponkiler şu anda çok meşgul. Lütfen bir kaç dakika içinde yeniden deneyin.", - "ERROR_MESSAGE": "Honki ponkiler döküm dosyanızı oluştururken birkaç problem yaşadı: {{message}}" + "ERROR_BUSY": "Üzgünüz, bizim honki ponkiler şu anda çok meşgul. Lütfen bir kaç dakika içinde yeniden deneyin." }, "MODULES": { "TITLE": "Modüller", - "ENABLE": "Etkinleştir", - "DISABLE": "Pasifleştir", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "Havuz", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - Proje profili- {{projectName}}", "PROJECT_DETAILS": "Proje detayları", "PROJECT_NAME": "Proje adı", - "PROJECT_SLUG": "Proje satırı", "TAGS": "Etiketler", "DESCRIPTION": "Tanım", "RECRUITING": "Bu proje insan arıyor mu?", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "Gizli proje", "PRIVATE_OR_PUBLIC": "Açık ve özel projeler arasındaki fark nedir?", "DELETE": "Bu projeyi sil", - "LOGO_HELP": "Resim 80×80 piksel boyutuna ölçeklenecek. ", "CHANGE_LOGO": "Logoyu değiştir", "ACTION_USE_DEFAULT_LOGO": "Varsayılan resmi kullan", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "Gitlab istekleri imzalı değiller bu yüzden IP kaynağını doğrulamak en iyi yol. Eğer alan boş bırakılırsa IP doğrulaması yapılmayacak." }, "GITHUB": { - "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks - {{projectName}}", "SECTION_NAME": "Webhooks", - "SUBTITLE": "Webhook, Taiga da meydana gelen yorum, kullanıcı hikayeleri gibi olaylar hakkında dış servisleri bilgilendirir...", "ADD_NEW": "Yeni bir Webhook Ekle", "TYPE_NAME": "Servis adını girin", "TYPE_PAYLOAD_URL": "Servis paket URL'sini yazın", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "Üye sil", "RESEND": "Yeniden gönder", "SUCCESS_SEND_INVITATION": "Davetiyeyi '{{email}}' adresine yeniden gönderdik.", - "ERROR_SEND_INVITATION": "Henüz bir davetiye göndermedik", "SUCCESS_DELETE": "{{message}} 'i sildik", "ERROR_DELETE": "Silemiyoruz {{message}}.", "DEFAULT_DELETE_MESSAGE": "davetiye {{email}} " @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "Yeni durum için bir isim yaz" }, "MENU": { - "TITLE": "Yönetim", "PROJECT": "Proje", "ATTRIBUTES": "Öznitelikler", "MEMBERS": "Üyeler", "PERMISSIONS": "İzinler", - "INTEGRATIONS": "Bütünleştirmeler", - "PLUGINS": "Eklentiler" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "Öznitelikler" + "INTEGRATIONS": "Bütünleştirmeler" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "Durum", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "Özel alanlar", "TAGS": "Etiketler " }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "Proje Profili" - }, "SUBMENU_ROLES": { "TITLE": "Roller", "ACTION_NEW_ROLE": "+ Yeni rol", "TITLE_ACTION_NEW_ROLE": "Yeni rol ekle" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "Servisler" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Private", @@ -783,15 +740,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "Profili Düzenle", - "FOLLOW": "Takip et", "CLOSED_US": "Kapatılmış KH", "PROJECTS": "Projeler", "PROJECTS_EMPTY": "{{username}} kullanıcısının henüz bir projesi yok", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} kullanıcısının henüz irtibat kişileri yok", "CURRENT_USER_CONTACTS_EMPTY": "Henüz irtibat kişileriniz yok", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "Taiga ile çalışan kişiler otomatik olarak irtibat kişileriniz olacaktır", - "REPORT": "Kötüye Kullanımı Raporla", "TABS": { "ACTIVITY_TAB": "Zaman Çizelgesi", "ACTIVITY_TAB_TITLE": "Bu kullanıcı için tüm eylemleri göster", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "Hepsi", "FILTER_TYPE_ALL_TITLE": "Hepsini göster", "FILTER_TYPE_PROJECTS": "Projeler", - "FILTER_TYPE_PROJECT_TITLES": "Sadece projeleri görüntüle", + "FILTER_TYPE_PROJECTS_TITLE": "Sadece projeleri görüntüle", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS_TITLE": "Show only epics", "FILTER_TYPE_USER_STORIES": "Hikayeler", - "FILTER_TYPE_USER_STORIES_TITLES": "Sadece kullanıcı hikayelerini göster", + "FILTER_TYPE_USER_STORIES_TITLE": "Sadece kullanıcı hikayelerini göster", "FILTER_TYPE_TASKS": "Görevler", - "FILTER_TYPE_TASK_TITLES": "Sadece görevleri göster", + "FILTER_TYPE_TASKS_TITLE": "Sadece görevleri göster", "FILTER_TYPE_ISSUES": "Sorunlar ", "FILTER_TYPE_ISSUES_TITLE": "Sadece sorunları göster", "EMPTY_TITLE": "Görünüşe göre burada gösterilecek bir şey yok." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "Hoşgeldiniz", - "SECTION_PROJECTS": "Projeler", "HELP": "En çok kullanılan projelerinizi en üste koymak için yeniden sıralayın.
    Top 10 projeler gezinti çubuğunun proje listesinin başında gösterilecektir.", "PRIVATE": "Gizli proje", "LOOKING_FOR_PEOPLE": "Bu proje ahalisini arıyor", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." }, - "STATS": { - "PROJECT": "proje
    puanlar", - "DEFINED": "tanımlı
    puanlar", - "ASSIGNED": "atanmış
    puanlar", - "CLOSED": "kapatılmış
    puanlar" - }, "SECTION": { "SEARCH": "Ara", "TIMELINE": "Zaman Çizelgesi", @@ -870,13 +816,9 @@ "ADMIN": "Yönetim" }, "NAVIGATION": { - "SECTION_TITLE": "Projeleriniz", - "PLACEHOLDER_SEARCH": "Aranan konum...", "ACTION_CREATE_PROJECT": "Proje Oluştur", "MANAGE_PROJECTS": "Projeleri yönet", "TITLE_CREATE_PROJECT": "Proje oluştur", - "TITLE_PRVIOUS_PROJECT": "Önceki projeleri göster", - "TITLE_NEXT_PROJECT": "Sonraki projeleri göster", "HELP_TITLE": "Taiga Destek Sayfası", "HELP": "Yardım", "HOMEPAGE": "Ana sayfa", @@ -884,10 +826,6 @@ "FEEDBACK": "Geribildirim", "NOTIFICATIONS_TITLE": "Bildirim ayarlarını düzenle", "NOTIFICATIONS": "Bildirimler", - "ORGANIZATIONS_TITLE": "Organizasyonunuzu düzenleyin", - "ORGANIZATIONS": "Organizasyonları düzenle", - "SETTINGS_TITLE": "Ayarlarınızı düzenleyin", - "SETTINGS": "Ayarlar", "VIEW_PROFILE_TITLE": "Profili Görüntüle", "VIEW_PROFILE": "Profili Görüntüle", "EDIT_PROFILE_TITLE": "Profilini düzenle", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "Parolayı değiştir", "DASHBOARD_TITLE": "Pano", "DISCOVER_TITLE": "Trend projeleri keşfet", - "NEW_ITEM": "Yeni", - "DISCOVER": "Keşfet", - "ACTION_REORDER": "Yeniden sıralamak için sürükleyin ve bırakın" + "DISCOVER": "Keşfet" }, "LIKE_BUTTON": { "LIKE": "Beğen", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "Proje Oluştur", - "FRESH": "Taze ve temiz. Heycan verici!", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Private Project" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "Taze ve temiz. Heycan verici!", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "Proje oluştur", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin", "SYNC_SUCCESS": "Projeniz başarıyla içe aktarıldı", "IMPORT": "Import", - "ARCHIVED": "Arşivlenmiş", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -998,8 +920,8 @@ "ASSIGN": "Ata", "PROJECT_SELECTOR": { "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "ACTION_SEARCH": "ara", + "ACTION_BACK": "Arka" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "Sorunlar", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "Taiga Hesabını Sil", "CONFIRM": "Taiga hesabınızı silmek istediğinizden emin misiniz?", - "NEWSLETTER_LABEL_TEXT": "Bundan böyle bülteninizi almak istemiyorum.", "CANCEL": "Back to settings", "ACCEPT": "Delete account", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account." }, "DELETE_PROJECT": { "TITLE": "Proje Sil", @@ -1217,15 +1129,9 @@ "ADD_BULK": "Toplu halde yeni Kullanıcı Hikayeleri ekle", "PROMOTED": "Bu hikayenin temelindeki sorun:", "TITLE_LINK_GO_TO_ISSUE": "Talebe git", - "EXTERNAL_REFERENCE": "Bu KH 'ni oluşturulduğu", - "GO_TO_EXTERNAL_REFERENCE": "Kökenine git ", - "BLOCKED": "Bu kullanıcı hikayesi engelli", "TITLE_DELETE_ACTION": "Kullanıcı Hikayesi Sil", "LIGHTBOX_TITLE_BLOKING_US": "Bizi engelleyen", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} tamamlanan görevler", - "ASSIGN": "Kullanıcı Hikayesini Ata", "NOT_ESTIMATED": "Kestirim yapılmamış", - "TOTAL_US_POINTS": "Toplam KH puanları", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "More info", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "Takım Gereksinimi", - "CLIENT_REQUIREMENT": "İstemci Gereksinimi", - "FINISH_DATE": "Bitiş tarihi" + "CLIENT_REQUIREMENT": "İstemci Gereksinimi" } }, "COMMENTS": { "DELETED_INFO": "Comment deleted by {{user}}", - "TITLE": "Yorumlar", "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", "OLDER_FIRST": "Older first", "RECENT_FIRST": "Recent first", "COMMENT": "Yorum Yap", - "EDIT_COMMENT": "Edit comment", "EDITED_COMMENT": "Edited:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "Buraya yeni bir yorum yazın", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "Eylemleri göster", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ Önceki girdileri göster ({{showMore}} daha fazla)", "TITLE": "Aktivite", "ACTIVITIES_COUNT": "{{activities}} Activities", - "REMOVED": "silindi", - "ADDED": "eklendi", "TAGS_ADDED": "tags added:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "Yapılan {size, plural, one{tek değişiklik} other{# değişiklikler}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "Takım Gereksinimi", "CLIENT_REQUIREMENT": "İstemci Gereksinimi", "BLOCKED": "Engelli", "VALUES": { - "YES": "evet", - "NO": "hayır", - "EMPTY": "boş", "UNASSIGNED": "atama yok" }, "FIELDS": { "SUBJECT": "konu", - "NAME": "isim", "DESCRIPTION": "tanım", - "CONTENT": "içerik", "STATUS": "durum", - "IS_CLOSED": "kapatıldı", - "FINISH_DATE": "bitiş tarihi", "TYPE": "tip", - "PRIORITY": "öncelik", - "SEVERITY": "önem derecesi", "ASSIGNED_TO": "atanmış", - "WATCHERS": "izleyiciler", "MILESTONE": "koşu", - "USER_STORY": "kullanıcı hikayesi", - "PROJECT": "proje", - "IS_BLOCKED": "engellendi", - "BLOCKED_NOTE": "engel notu", - "POINTS": "puanlar", - "CLIENT_REQUIREMENT": "istemci gereksinimi", - "TEAM_REQUIREMENT": "takım gereksinimi", - "IS_IOCAINE": "baldıran zehri", - "TAGS": "etiketler", - "ATTACHMENTS": "ekler", - "IS_DEPRECATED": "kaldırıldı", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "sıra", - "BACKLOG_ORDER": "havuz sıralaması", - "SPRINT_ORDER": "koşu sırası", - "KANBAN_ORDER": "kanban sırası", - "TASKBOARD_ORDER": "Görev panosu sırası", - "US_ORDER": "kh sırası", "COLOR": "renk" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "Yönetimden puan ve koşuları ayarlayın", "MOVE_US_TO_CURRENT_SPRINT": "Şimdiki Koşuya Taşı", "MOVE_US_TO_LATEST_SPRINT": "Son koşuya taşı", - "SHOW_FILTERS": "Filtreleri göster", - "SHOW_TAGS": "Etiketleri göster", "EMPTY": "Havuz bomboş!", "CREATE_NEW_US": "Yeni bir KH oluştur", "CREATE_NEW_US_EMPTY_HELP": "Yeni bir kullanıcı hikayesi oluşturmak isteyebilirsiniz", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "Filtrelerin görünürlüğünü değiştir", - "TITLE": "Filtreler", - "REMOVE": "Filtreleri Sil", "HIDE": "Filtreleri Gizle", "SHOW": "Filtreleri Göster" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MM YYYY", "LINK_TASKBOARD": "Koşu İş Panosu", "TITLE_LINK_TASKBOARD": "\"{{name}}\" görev panosuna git", - "NUMBER_SPRINTS": "
    koşular", "EMPTY": "Henüz hiç koşu yok", "WARNING_EMPTY_SPRINT_ANONYMOUS": "Bu koşuda hiç kullanıcı hikayesi yok.", "WARNING_EMPTY_SPRINT": "Yeni bir koşu başlatmak icin havuzdan buraya hikaye taşıyın", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "Yeni bir Görev ekle", "TITLE_ACTION_ADD_BULK": "Toplu halde yeni bir kaç görev ekle", "TITLE_ACTION_ASSIGN": "Görev ata", - "TITLE_ACTION_EDIT": "Görevi düzenle", "PLACEHOLDER_CARD_TITLE": "Bu bir görev olabilir", "PLACEHOLDER_CARD_TEXT": "Hikayeleri ve görevleri birbirinden ayırın ve öyle izleyin", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "Durum Adı", "OWNER_US": "Bu görevin ait olduğu", "TITLE_LINK_GO_OWNER": "Kullanıcı hikayesine git", - "ORIGIN_US": "Bu görevin oluşturulduğu", - "TITLE_LINK_GO_ORIGIN": "Kullanıcı hikayesine git", - "BLOCKED": "Bu iş engelli", "TITLE_DELETE_ACTION": "Görev Sil", "LIGHTBOX_TITLE_BLOKING_TASK": "Engelleyen iş", "FIELDS": { - "MILESTONE": "Koşu", - "USER_STORY": "Kullanıcı hikayesi", "IS_IOCAINE": "baldıran zehri" }, - "ACTION_IOCAINE": "baldıran zehri", "TITLE_ACTION_IOCAINE": "Bir görev size ağır geldi ve bunaldınız mı? Diğerlerinin bu durumdan haberi olması için bir görevi düzenlerken baldıran zehrinin(temsili) üzerine tıklayın. Nasıl ki zaman zaman ekstra meydan okumalarla bir işte gittikçe iyi olmanız mümkünse, zaman içerisinde küçük dozlar alarak bu ölümcül zehre de bağışıklık kazanabilmek mümkün!" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "Sorunlar - {{projectName}}", "PAGE_DESCRIPTION": "{{projectName}} projesinin sorun listesi paneli: {{projectDescription}}", - "LIST_SECTION_NAME": "Sorunlar", "SECTION_NAME": "Sorun", "ACTION_NEW_ISSUE": "+ YENİ SORUN", "ACTION_PROMOTE_TO_US": "Kullanıcı Hikayesine Terfi Ettir", "PROMOTED": "Bu sorun, kullanıcı hikayesine yükseltildi:", "EXTERNAL_REFERENCE": "Bu talebin oluşturulduğu ", "GO_TO_EXTERNAL_REFERENCE": "Kökenine git", - "BLOCKED": "Bu sorun engelli", "ACTION_DELETE": "Sorun sil", "LIGHTBOX_TITLE_BLOKING_ISSUE": "Engelleyen sorun", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "Kanban", "TITLE_ACTION_FOLD": "Sütun Katla", "TITLE_ACTION_UNFOLD": "Sütun katını aç", - "TITLE_ACTION_FOLD_CARDS": "Kartları katla", - "TITLE_ACTION_UNFOLD_CARDS": "Kartların katlarını aç", "TITLE_ACTION_ADD_US": "Yeni Kullanıcı Hikayesi Ekle", "TITLE_ACTION_ADD_BULK": "Yeni toplu ekle", "ACTION_SHOW_ARCHIVED": "Arşivlenmişleri Göster", "ACTION_HIDE_ARCHIVED": "Arşivlenmişleri gizle", "HIDDEN_USER_STORIES": "Bu durumdaki kullanıcı hikayeleri otomatik olarak gizlenir", - "ARCHIVED": "Arşivlendiniz", - "UNDO_ARCHIVED": "Geri almak için tutun ve sürükleyin", "PLACEHOLDER_CARD_TITLE": "Bunlar Kullanıcı Hikayeleriniz", "PLACEHOLDER_CARD_TEXT": "Gereksinimleri ayrıştırmak için hikayeler alt görevlere sahip olabilirler" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "Takım - {{projectName}}", "PAGE_DESCRIPTION": "Projedeki üyelerin tümünü göstermek için takım paneli {{projectName}}: {{projectDescription}}", "SECTION_NAME": "Takım", - "APP_TITLE": "TAKIM - {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "Tam ad ile ara", "COLUMN_MR_WOLF": "Reyiz", "EXPLANATION_COLUMN_MR_WOLF": "Kapatılmış sorunlar", @@ -1610,18 +1459,9 @@ "OPTION_ALL": "Hepsi", "OPTION_INVOLVED": "İlgili", "OPTION_NONE": "Hiçbiri" - }, - "POPOVER": { - "USER_PROFILE": "Kullanıcı Profili", - "CHANGE_PASSWORD": "Parolayı Değiştir", - "NOTIFICATIONS": "Bildirimler", - "FEEDBACK": "Geribildirim", - "TITLE_AVATAR": "Kullanıcı tercihleri" } }, "USER_PROFILE": { - "IMAGE_HELP": "Resim 80×80 piksel boyutuna ölçeklenecek.", - "ACTION_CHANGE_IMAGE": "Değiştir", "ACTION_USE_GRAVATAR": "Varsayılan resmi kullan", "ACTION_DELETE_ACCOUNT": "Taiga hesabını sil", "CHANGE_EMAIL_SUCCESS": "Gelen kutunuzu kontrol edin!
    Yeni adresinizi belirlemek için gerekli
    yönergeleri içeren postayı gönderdik", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - Wiki - {{projectName}}", "PAGE_DESCRIPTION": "Son sürüm {{lastModifiedDate}} ({{totalEditions}} toplamda sürüm sayısı) İçerik: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "Wiki sayfanı yaz ", "REMOVE": "Bu wiki sayfasını sil", "DELETE_LIGHTBOX_TITLE": "Wiki Sayfası Sil", "DELETE_LINK_TITLE": "Delete Wiki link", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "En beğenilen", "MOST_LIKED_EMPTY": "Henüz BEĞENİLEN proje yok", "VIEW_MORE": "Daha fazlası", - "RECRUITING": "Bu proje ahalisini arıyor", "FEATURED": "Önemli projeler", "EMPTY": "Bu arama ölçütlerine göre gösterilebilecek bir proje çıkmadı.
    Tekrar deneyin!", "FILTERS": { diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index 5f1e6e9e..b22107c2 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -4,7 +4,6 @@ "NO": "否", "OR": "或", "LOADING": "载入中...", - "LOADING_PROJECT": "正在载入项目...", "DATE": "YYYY MMM DD", "DATETIME": "YYYY MMM DD HH:mm", "SAVE": "保存", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "为什么它被关闭了呢?", "BLOCKED_REASON": "请解释此原因", "CREATED_BY": "由 {{fullDisplayName}} 创建", - "FROM": "来自", - "TO": "发送给", "CLOSE": "关闭", "GO_HOME": "返回首页", "PLUGINS": "插件", - "BETA": "我们正在测试", "ONE_ITEM_LINE": "一行一项", "NEW_BULK": "批量插入", "RELATED_TASKS": "相关任务", @@ -148,7 +144,6 @@ "PRIORITY": "优先级", "ASSIGNED_TO": "指派给", "POINTS": "点数", - "BLOCKED_NOTE": "冻结的笔记", "IS_BLOCKED": "冻结", "REF": "Ref", "VOTES": "投票数", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{一个关注者} other{# 个关注者}}" }, "VOTE_BUTTON": { - "UPVOTE": "赞", - "UPVOTED": "已赞", - "DOWNVOTE": "踩", - "VOTERS": "投票者", "BUTTON_TITLE": "赞/踩该项", "COUNTER_TITLE": "{total, plural, one{一票} other{# 票}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "标题或参考", "TITLE_ACTION_FILTER_BUTTON": "搜索", "TITLE": "过滤器", - "INPUT_SEARCH_PLACEHOLDER": "主旨或参考", "TITLE_ACTION_SEARCH": "搜索", "ACTION_SAVE_CUSTOM_FILTER": "储存为定制过滤器", "PLACEHOLDER_FILTER_NAME": "写入过滤器名称后按下enter", @@ -220,16 +210,10 @@ "CREATED_BY": "由创建", "CUSTOM_FILTERS": "定制过滤器", "EPIC": "史诗" - }, - "CONFIRM_DELETE": { - "TITLE": "删除定制过滤器", - "MESSAGE": "预设过滤器 '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "在你编辑期间其他人做过变更,保存前请先检查新版本", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown 语法帮助" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "新增维基链接", "DELETE_WIKI_LINKS": "删除维基链接" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。" } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "修改密码 - Taiga", - "PAGE_DESCRIPTION": "设定Taiga账户密码!你也许该吃点含铁丰富的食物,它对你的大脑有益处:p", "SECTION_NAME": "更新密码", "FIELD_CURRENT_PASSWORD": "当前密码", "PLACEHOLDER_CURRENT_PASSWORD": "你当前的密码(如果你未有密码,此处请空白)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "我们的Oompa Loompas无法找到你邀请", - "SUCCESS": "你成功地加入此项目,欢迎来到 {{project_name}}", - "ERROR": "按我们的记录,你尚未注册或是未输入有效的密码" + "SUCCESS": "你成功地加入此项目,欢迎来到 {{project_name}}" }, "HOME": { "PAGE_TITLE": "首页 - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "删除附件....", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "附件 '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "无法删除: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "已废弃" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "上一个", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "准备好后,我们会发送一封电子邮件", "SYNC_MESSAGE": "如果未能自动下载,请点击此处.", "ERROR": "我们的系统无法导出你的资料,请再试一次", - "ERROR_BUSY": "抱歉系统繁忙中,请稍后再试试", - "ERROR_MESSAGE": "我们的系统在导出你的资料时遇到一些问题: {{message}}" + "ERROR_BUSY": "抱歉系统繁忙中,请稍后再试试" }, "MODULES": { "TITLE": "模块", - "ENABLE": "启用", - "DISABLE": "停用", "EPICS": "史诗", "EPICS_DESCRIPTION": "可视化和管理你项目的最为要害的部分", "BACKLOG": "待办事项", @@ -512,18 +484,16 @@ "PAGE_TITLE": "{{sectionName}} - 项目档案 - {{projectName}}", "PROJECT_DETAILS": "项目细节", "PROJECT_NAME": "项目名称", - "PROJECT_SLUG": "项目代称", "TAGS": "标签", "DESCRIPTION": "描述", "RECRUITING": "这个项目是否在招人?", "RECRUITING_MESSAGE": "你在寻找什么人?", "RECRUITING_PLACEHOLDER": "定义简介", - "FEEDBACK": "Receive feedback from Taiga users?", + "FEEDBACK": "是否接收来自Taiga用户的反馈?", "PUBLIC_PROJECT": "公开项目", "PRIVATE_PROJECT": "私有项目", "PRIVATE_OR_PUBLIC": "公开项目与私有项目有什么区别?", "DELETE": "删除此项目", - "LOGO_HELP": "这张图片将被缩放为80x80px", "CHANGE_LOGO": "更换图标", "ACTION_USE_DEFAULT_LOGO": "使用默认图片", "MAX_PRIVATE_PROJECTS": "根据你当前计划,你已经达到了私有项目允许的最大成员限制", @@ -571,7 +541,7 @@ "ISSUE_DESCRIPTION": "问题自定义字段", "ISSUE_ADD": "在问题中加入自定义字段", "FIELD_TYPE_TEXT": "单行文字", - "FIELD_TYPE_RICHTEXT": "Rich text", + "FIELD_TYPE_RICHTEXT": "富文本", "FIELD_TYPE_MULTI": "多行文字", "FIELD_TYPE_DATE": "日期", "FIELD_TYPE_URL": "链接" @@ -654,7 +624,7 @@ }, "GITHUB": { "SECTION_NAME": "Github", - "PAGE_TITLE": "Github - {{projectName}}" + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "网页钩子- {{projectName}}", "SECTION_NAME": "网页触发", - "SUBTITLE": "网页触发通知关于Taiga事件的外部服务,例如评论,用户故事等。", "ADD_NEW": "新增一个网页触发", "TYPE_NAME": "键入服务名称", "TYPE_PAYLOAD_URL": "键入服务有效负荷网址", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "删除成员", "RESEND": "Resend", "SUCCESS_SEND_INVITATION": "我们已再次发出邀请信给'{{email}}'.", - "ERROR_SEND_INVITATION": "我们未送出邀请", "SUCCESS_DELETE": "已删除 {{message}}.", "ERROR_DELETE": "我们无法删除 {{message}}.", "DEFAULT_DELETE_MESSAGE": "邀请 {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "为此新状态命名" }, "MENU": { - "TITLE": "管理者", "PROJECT": "项目", "ATTRIBUTES": "属性", "MEMBERS": "成员", "PERMISSIONS": "权限", - "INTEGRATIONS": "整合", - "PLUGINS": "插件" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "属性" + "INTEGRATIONS": "整合" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "状态", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "自定义字段", "TAGS": "标签" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "项目档案" - }, "SUBMENU_ROLES": { "TITLE": "角色", "ACTION_NEW_ROLE": "+ 新角色", "TITLE_ACTION_NEW_ROLE": "新增角色" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "服务" - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "你希望成为新的项目所有者吗?", "PRIVATE": "私有的", @@ -783,15 +740,13 @@ "PRIVATE": "请记住你可以拥有最多 {{maxProjects}} 个私有项目。你当前拥有 {{currentProjects}} 个私有项目", "PUBLIC": "请记住你最多可以拥有 {{maxProjects}} 个公开项目。你当前拥有 {{currentProjects}} 个公开项目" }, - "CANT_BE_OWNED": "目前你不能成为这类项目的所有者。如果你希望成为这个项目的所有者,请联系管理员,请其在你的账户设置中启用项目所有权。", - "CHANGE_MY_PLAN": "改变我的计划" + "CANT_BE_OWNED": "目前你不能成为这类项目的所有者。如果你希望成为这个项目的所有者,请联系管理员,请其在你的账户设置中启用项目所有权。" } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "编辑个人资料", - "FOLLOW": "关注", "CLOSED_US": "关闭用户故事", "PROJECTS": "项目", "PROJECTS_EMPTY": "{{username}} 尚无项目", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} 尚无联络人", "CURRENT_USER_CONTACTS_EMPTY": "您尚无任何联络人", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "你在Taiga一同工作的伙伴将自动成为你的联络人", - "REPORT": "回报滥用", "TABS": { "ACTIVITY_TAB": "时间表", "ACTIVITY_TAB_TITLE": "显示该用户的所有活动", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "所有", "FILTER_TYPE_ALL_TITLE": "显示所有", "FILTER_TYPE_PROJECTS": "项目", - "FILTER_TYPE_PROJECT_TITLES": "只显示项目", + "FILTER_TYPE_PROJECTS_TITLE": "只显示项目", "FILTER_TYPE_EPICS": "史诗", - "FILTER_TYPE_EPIC_TITLES": "仅显示史诗", + "FILTER_TYPE_EPICS_TITLE": "仅显示史诗", "FILTER_TYPE_USER_STORIES": "故事", - "FILTER_TYPE_USER_STORIES_TITLES": "只显示用户故事", + "FILTER_TYPE_USER_STORIES_TITLE": "只显示用户故事", "FILTER_TYPE_TASKS": "任务", - "FILTER_TYPE_TASK_TITLES": "只显示任务", + "FILTER_TYPE_TASKS_TITLE": "只显示任务", "FILTER_TYPE_ISSUES": "问题", "FILTER_TYPE_ISSUES_TITLE": "只显示问题", "EMPTY_TITLE": "看来没有什么可以显示的." @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "欢迎", - "SECTION_PROJECTS": "项目", "HELP": "记录你的项目在上方常用栏位
    前十个项目将会显示在上方导览处。", "PRIVATE": "私有项目", "LOOKING_FOR_PEOPLE": "这个项目在寻找队友", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "这个项目暂时被关闭了", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "要解冻你的项目,请联系管理员。" }, - "STATS": { - "PROJECT": "项目
    点数", - "DEFINED": "已定义
    点数", - "ASSIGNED": "已指派
    点数", - "CLOSED": "已关闭
    点数" - }, "SECTION": { "SEARCH": "搜索", "TIMELINE": "时间表", @@ -870,13 +816,9 @@ "ADMIN": "管理者" }, "NAVIGATION": { - "SECTION_TITLE": "你的项目", - "PLACEHOLDER_SEARCH": "搜索", "ACTION_CREATE_PROJECT": "创建项目", "MANAGE_PROJECTS": "管理项目", "TITLE_CREATE_PROJECT": "创建项目", - "TITLE_PRVIOUS_PROJECT": "显示过去项目", - "TITLE_NEXT_PROJECT": "显示下一个任务", "HELP_TITLE": "Taiga支持页", "HELP": "帮助", "HOMEPAGE": "主页", @@ -884,10 +826,6 @@ "FEEDBACK": "反馈", "NOTIFICATIONS_TITLE": "编辑个人通知设定", "NOTIFICATIONS": "通知", - "ORGANIZATIONS_TITLE": "编辑您的组织资料", - "ORGANIZATIONS": "编辑组织资料", - "SETTINGS_TITLE": "编辑个人设定", - "SETTINGS": "设定", "VIEW_PROFILE_TITLE": "查看个人资料", "VIEW_PROFILE": "查看个人资料", "EDIT_PROFILE_TITLE": "编辑你的个人资料", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "更换密码", "DASHBOARD_TITLE": "控制台", "DISCOVER_TITLE": "发现流行项目", - "NEW_ITEM": "新建", - "DISCOVER": "发现", - "ACTION_REORDER": "通过拖动来改变显示顺序" + "DISCOVER": "发现" }, "LIKE_BUTTON": { "LIKE": "点赞", @@ -922,55 +858,44 @@ } }, "CONTACT_BUTTON": { - "CONTACT_TITLE": "Contact the project team", - "CONTACT_BUTTON": "Contact the project" + "CONTACT_TITLE": "联系项目组", + "CONTACT_BUTTON": "联系项目组" }, "CREATE": { "TITLE": "创建项目", - "FRESH": "清新与整洁,让人兴奋的项目", - "CHOOSE_TEMPLATE": "Which template fits your project better?", + "CHOOSE_TEMPLATE": "哪个模板更适合你的项目?", "TEMPLATE_SCRUM": "冲刺", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", "TEMPLATE_SCRUM_LONGDESC": "Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.", "TEMPLATE_KANBAN": "看板", "TEMPLATE_KANBAN_DESC": "Keep a constant workflow on independent tasks", "TEMPLATE_KANBAN_LONGDESC": "The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.", - "DUPLICATE": "Duplicate project", + "DUPLICATE": "复制项目", "DUPLICATE_DESC": "Start clean and keep your configuration", "IMPORT": "导入项目", - "IMPORT_DESC": "Import your project from multiple platforms into Taiga", - "INVITE": "Invite to the project", - "SOLO_PROJECT": "You'll be alone in this project", - "INVITE_LATER": "(You'll be able to invite more members later)", + "IMPORT_DESC": "从多平台导入你的项目到Taiga", + "INVITE": "邀请加入项目", + "SOLO_PROJECT": "你会单独加入这个项目", + "INVITE_LATER": "(你可以在之后邀请更多成员)", "BACK": "后退", - "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", + "MAX_PRIVATE_PROJECTS": "很抱歉,你创建的私有项目数量已到达限制。如果想创建更多私有项目,请联系管理员", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "公开项目", - "PRIVATE_PROJECT": "私有项目", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "私有项目" }, "COMMON": { - "DETAILS": "New project details", - "PROJECT_TITLE": "Project Name", - "PROJECT_DESCRIPTION": "Project Description" + "DETAILS": "新的项目详情", + "PROJECT_TITLE": "项目名称", + "PROJECT_DESCRIPTION": "项目描述" }, "DUPLICATE": { - "TITLE": "Duplicate Project", + "TITLE": "复制项目", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "清新与整洁,让人兴奋的项目", - "CHOOSE_TEMPLATE_TITLE": "了解关于项目模板的更多知识", - "CHOOSE_TEMPLATE_INFO": "更多信息", - "PROJECT_DETAILS": "项目细节", - "PUBLIC_PROJECT": "公开项目", - "PRIVATE_PROJECT": "私有项目", - "CREATE_PROJECT": "创建项目", - "CHANGE_PLANS": "改变计划" + "SELECT_PLACEHOLDER": "选择一个已存在的项目来复制" }, "IMPORT": { - "TITLE": "Import Project", - "DESCRIPTION": "Import your project from multiple platforms into Taiga", + "TITLE": "导入项目", + "DESCRIPTION": "从多平台导入你的项目到Taiga", "ASYNC_IN_PROGRESS_TITLE": "我们正在导入你的项目", "ASYNC_IN_PROGRESS_MESSAGE": "这个过程要花上一点时间
    当弄好时我们会发给你一封邮件", "UPLOAD_IN_PROGRESS_MESSAGE": "已上传 {{totalSize}}中的{{uploadedSize}}", @@ -979,27 +904,24 @@ "ERROR_MESSAGE": "我们的系统无法导入你的资料", "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})", "SYNC_SUCCESS": "你的项目已成功导入", - "IMPORT": "Import", - "ARCHIVED": "归档", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", + "IMPORT": "导入", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "项目成员", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", - "MATCH": "Is {{user_external}} the same person as {{user_internal}}?", - "CHOOSE": "Select user", + "MATCH": "{{user_external}}{{user_internal}}是同一个人吗?", + "CHOOSE": "选择用户", "LINKS": "Links with {{platform}}", "LINKS_DESCRIPTION": "Do you want to keep the link of each item with the original {{platform}} card?", "WARNING_MAIL_USER": "Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.", "ASSIGN": "指派", "PROJECT_SELECTOR": { - "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "NO_RESULTS": "看起来没有符合你的搜索条件的结果", + "ACTION_SEARCH": "搜索", + "ACTION_BACK": "后退" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Github", - "SELECTOR": "Import your Github project issues", - "CHOOSE_PROJECT": "Find the project you want to import", + "SELECTOR": "Import your GitHub project issues", + "CHOOSE_PROJECT": "查找你想要导入的项目", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "项目成员", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", - "CHOOSE_PROJECT": "Choose project that you want to import", + "CHOOSE_PROJECT": "选择你想导入的项目", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "看板", "SCRUM_PROJECT": "冲刺", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "项目成员" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "项目成员", "KANBAN_PROJECT": "看板", "SCRUM_PROJECT": "冲刺", "ISSUES_PROJECT": "问题", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "删除Taiga账户", "CONFIRM": "你确定要删除Taiga账户吗?", - "NEWSLETTER_LABEL_TEXT": "不愿再收到任何信息", "CANCEL": "返回设置", "ACCEPT": "删除账号", - "BLOCK_PROJECT": "请注意,在你删除你的账户之后,所有属于你的项目都会被冻结。如果你确实希望一个项目被冻结,在你删除你的账户之前,请将所有权转移至该项目的其他成员名下。", - "SUBTITLE": "很抱歉看到你离开。如果你再次考虑我们的话,我们会在这儿! :(" + "BLOCK_PROJECT": "请注意,在你删除你的账户之后,所有属于你的项目都会被冻结。如果你确实希望一个项目被冻结,在你删除你的账户之前,请将所有权转移至该项目的其他成员名下。" }, "DELETE_PROJECT": { "TITLE": "删除项目", @@ -1111,11 +1023,11 @@ }, "ADD_MEMBER": { "TITLE": "新成员", - "PLACEHOLDER": "Filter users or write an email to invite", - "ADD_EMAIL": "Add email", - "REMOVE": "Remove", - "INVITE": "Invite", - "CHOOSE_ROLE": "Choose a role", + "PLACEHOLDER": "筛选用户或者编写邮件来进行邀请", + "ADD_EMAIL": "添加收件人邮箱", + "REMOVE": "移除", + "INVITE": "邀请", + "CHOOSE_ROLE": "选择一个角色", "PLACEHOLDER_INVITATION_TEXT": "(非必要) 加上一段私人文字在邀请信,告诉你的新成员一些好事 ;-)", "HELP_TEXT": "如果用户已注册Taiga账户,他们会自动被加入。否则他们会收到一封加入的邀请信" }, @@ -1180,10 +1092,10 @@ "BUTTON": "要求这位项目成员作为新的项目所有者" }, "CONTACT_PROJECT": { - "TITLE": "Send an email to", - "WARNING": "The email will be received by the project admins", - "PLACEHOLDER": "Write your message", - "SEND": "Send" + "TITLE": "发送邮件到", + "WARNING": "项目管理员会收到邮件", + "PLACEHOLDER": "输入你的消息", + "SEND": "发送" } }, "EPIC": { @@ -1217,15 +1129,9 @@ "ADD_BULK": "批次加入新用户故事", "PROMOTED": "此用户故事已提升成问题:", "TITLE_LINK_GO_TO_ISSUE": "到问题", - "EXTERNAL_REFERENCE": "此用户故事创造者是", - "GO_TO_EXTERNAL_REFERENCE": "回到一开始", - "BLOCKED": "这个用户故事已被封锁", "TITLE_DELETE_ACTION": "删除用户故事", "LIGHTBOX_TITLE_BLOKING_US": "封锁中的用户故事", - "TASK_COMPLETED": "已完成任务的 {{totalClosedTasks}}/{{totalTasks}}", - "ASSIGN": "指派用户故事", "NOT_ESTIMATED": "无预估", - "TOTAL_US_POINTS": "全部用户故事点数", "TRIBE": { "PUBLISH": "以Gig的形式在Taiga Tribe中发布", "PUBLISH_INFO": "更多信息", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "团队要求", - "CLIENT_REQUIREMENT": "客户要求", - "FINISH_DATE": "完成日期" + "CLIENT_REQUIREMENT": "客户要求" } }, "COMMENTS": { "DELETED_INFO": "评论被用户{{user}}删除", - "TITLE": "评论", "COMMENTS_COUNT": "{{comments}}评论", - "ORDER": "排序", "OLDER_FIRST": "上次第一名", "RECENT_FIRST": "最近第一名", "COMMENT": "评论", - "EDIT_COMMENT": "编辑评论", "EDITED_COMMENT": "已编辑", "SHOW_HISTORY": "查看历史", "TYPE_NEW_COMMENT": "在此输入一个新的评论", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "显示动态", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ 显示过去条目 ({{showMore}} 更多)", "TITLE": "动态", "ACTIVITIES_COUNT": "{{activities}} 活动", - "REMOVED": "已移除", - "ADDED": "已加入", "TAGS_ADDED": "已添加的标签", "TAGS_REMOVED": "已移除的标签", "US_POINTS": "{{role}} 得分", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "更新附件 ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "创建自定义属性", "UPDATED_CUSTOM_ATTRIBUTE": "更新自定义属性", - "SIZE_CHANGE": "使 {size, plural, one{更改} other{变化}}", "BECAME_DEPRECATED": "已置为废弃", "BECAME_UNDEPRECATED": "已置为废弃", "TEAM_REQUIREMENT": "团队要求", "CLIENT_REQUIREMENT": "客户要求", "BLOCKED": "已封锁", "VALUES": { - "YES": "yes", - "NO": "no", - "EMPTY": "空白", "UNASSIGNED": "未指派" }, "FIELDS": { "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": "已废弃", - "IS_NOT_DEPRECATED": "未废弃", - "ORDER": "次序", - "BACKLOG_ORDER": "待办任务先后次序", - "SPRINT_ORDER": "冲刺任务次序", - "KANBAN_ORDER": "看板次序", - "TASKBOARD_ORDER": "任务板次序", - "US_ORDER": "用户故事次序", "COLOR": "颜色" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "通过管理员来设置点数和冲刺", "MOVE_US_TO_CURRENT_SPRINT": "移到目前的冲刺", "MOVE_US_TO_LATEST_SPRINT": "切换到最近的冲刺", - "SHOW_FILTERS": "显示过滤器", - "SHOW_TAGS": "显示标签", "EMPTY": "没有待办任务!", "CREATE_NEW_US": "创建一个新的用户故事", "CREATE_NEW_US_EMPTY_HELP": "你可以创建一个新用户故事", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "切换过滤器可见度", - "TITLE": "过滤器", - "REMOVE": "移除过滤器", "HIDE": "隐藏过滤器", "SHOW": "显示过滤器" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "冲刺任务板", "TITLE_LINK_TASKBOARD": "到任务板 {{spring.name}}", - "NUMBER_SPRINTS": "
    冲刺任务", "EMPTY": "还没有冲刺", "WARNING_EMPTY_SPRINT_ANONYMOUS": "这个冲刺没有用户故事", "WARNING_EMPTY_SPRINT": "从你的待办事项中拖拽一个用户故事到这里来开启一个新的冲刺", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "增加新任务", "TITLE_ACTION_ADD_BULK": "批次加入新任务", "TITLE_ACTION_ASSIGN": "指派任务", - "TITLE_ACTION_EDIT": "结束任务", "PLACEHOLDER_CARD_TITLE": "这可能是一个任务", "PLACEHOLDER_CARD_TEXT": "将用户故事拆分为多个任务以便单独跟踪", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "状态名称", "OWNER_US": "这任务属于", "TITLE_LINK_GO_OWNER": "到用户故事", - "ORIGIN_US": "此任务创造者是", - "TITLE_LINK_GO_ORIGIN": "到用户故事", - "BLOCKED": "这任务已被封锁", "TITLE_DELETE_ACTION": "删除任务", "LIGHTBOX_TITLE_BLOKING_TASK": "封锁中的任务", "FIELDS": { - "MILESTONE": "冲刺任务", - "USER_STORY": "用户故事", "IS_IOCAINE": "负予全新任务" }, - "ACTION_IOCAINE": "挑战全新任务", "TITLE_ACTION_IOCAINE": "感到任务的不勘负荷?确定其它人知道此状况在编辑任务时点选此「毒药键」。这种致命毒物如果长期吸食微量,最后可能免疫。因此你最好偶而做点出奇的挑战。" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "问题 - {{projectName}}", "PAGE_DESCRIPTION": "{{projectName}}的问题清单看版:{{projectDescription}}", - "LIST_SECTION_NAME": "问题", "SECTION_NAME": "问题", "ACTION_NEW_ISSUE": "+ 新问题", "ACTION_PROMOTE_TO_US": "提升到用户故事", "PROMOTED": "此问题已提升为用户故事", "EXTERNAL_REFERENCE": "此问题的提出者是", "GO_TO_EXTERNAL_REFERENCE": "回到开头", - "BLOCKED": "这个议题已被冻结", "ACTION_DELETE": "删除议题", "LIGHTBOX_TITLE_BLOKING_ISSUE": "冻结中的问题", "FIELDS": { @@ -1545,15 +1399,11 @@ "SECTION_NAME": "看板", "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": "撤销归档", "PLACEHOLDER_CARD_TITLE": "这是您的用户故事", "PLACEHOLDER_CARD_TEXT": "用户故事可有子任务以便分离需求" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "团队- {{projectName}}", "PAGE_DESCRIPTION": "团队面版可显示项目中所有成员{{projectName}}:{{projectDescription}}", "SECTION_NAME": "团队", - "APP_TITLE": "团队- {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "以全名搜索", "COLUMN_MR_WOLF": "问题解决高手", "EXPLANATION_COLUMN_MR_WOLF": "已关闭议题", @@ -1610,18 +1459,9 @@ "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": "检查你的收信箱
    我们送出了一封信
    里面有设定你新电子邮件的相关指示", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - 维基 - {{projectName}}", "PAGE_DESCRIPTION": "最近编辑{{lastModifiedDate}} (总共编辑了{{totalEditions}}次),内容:{{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "编写你的维基页", "REMOVE": "移除此维基页", "DELETE_LIGHTBOX_TITLE": "删除维基页", "DELETE_LINK_TITLE": "删除维基链接", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "最受欢迎的", "MOST_LIKED_EMPTY": "还没有喜欢的项目", "VIEW_MORE": "查看更多", - "RECRUITING": "这个项目在寻找队友", "FEATURED": "特色项目", "EMPTY": "没有满足当前搜索条件的项目。
    再试一次!", "FILTERS": { diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index f048f163..19d38b72 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -4,7 +4,6 @@ "NO": "No", "OR": "or", "LOADING": "載入中...", - "LOADING_PROJECT": "載入專案中...", "DATE": "DD MMM YYYY", "DATETIME": "DD MMM YYYY HH:mm", "SAVE": "儲存", @@ -27,12 +26,9 @@ "BLOCKED_NOTE": "為何遭到封鎖?", "BLOCKED_REASON": "請解釋此原因", "CREATED_BY": "由 {{fullDisplayName}}創建", - "FROM": "from", - "TO": "to", "CLOSE": "關閉", "GO_HOME": "帶我回到首頁", "PLUGINS": "外掛", - "BETA": "我們在測試中", "ONE_ITEM_LINE": "一行一物 ", "NEW_BULK": "新批次插入", "RELATED_TASKS": "相關任務 ", @@ -148,7 +144,6 @@ "PRIORITY": "優先性", "ASSIGNED_TO": "指派給 ", "POINTS": "點數", - "BLOCKED_NOTE": "已封鎖之筆記", "IS_BLOCKED": "封鎖", "REF": "Ref", "VOTES": "投票數", @@ -187,10 +182,6 @@ "COUNTER_TITLE": "{total, plural, one{一個觀注者} other{# 觀注者}}" }, "VOTE_BUTTON": { - "UPVOTE": "Upvote", - "UPVOTED": "Upvoted", - "DOWNVOTE": "Downvote", - "VOTERS": "投票者", "BUTTON_TITLE": "Upvote/Downvote this item", "COUNTER_TITLE": "{total, plural, one{one vote} other{# votes}}" }, @@ -205,7 +196,6 @@ "INPUT_PLACEHOLDER": "主旨或參考", "TITLE_ACTION_FILTER_BUTTON": "搜尋", "TITLE": "過濾器", - "INPUT_SEARCH_PLACEHOLDER": "主旨或參考", "TITLE_ACTION_SEARCH": "搜尋", "ACTION_SAVE_CUSTOM_FILTER": "儲存為客製過濾器 ", "PLACEHOLDER_FILTER_NAME": "寫入過濾器名稱後按下enter ", @@ -220,16 +210,10 @@ "CREATED_BY": "由創建", "CUSTOM_FILTERS": "客製過濾器 ", "EPIC": "Epic" - }, - "CONFIRM_DELETE": { - "TITLE": "刪除客製過濾器 ", - "MESSAGE": "預設過濾器 '{{customFilterName}}'" } }, "WYSIWYG": { "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", - "ATTACH_FILE_HELP": "Attach files by dragging & dropping on the text area above.", - "ATTACH_FILE_HELP_SAVE_FIRST": "Save first before if you want to attach files by dragging & dropping on the text area above.", "MARKDOWN_HELP": "Markdown 語法協助" }, "PERMISIONS_CATEGORIES": { @@ -282,10 +266,6 @@ "ADD_WIKI_LINKS": "新增維基連結", "DELETE_WIKI_LINKS": "刪除維基連結" } - }, - "META": { - "PAGE_TITLE": "Taiga", - "PAGE_DESCRIPTION": "Taiga是一個給新創團隊與敏捷開發者設計師使用的專案管理平台。Taiga是一個簡易輕鬆美觀的工具,讓工作變成樂趣。" } }, "LOGIN": { @@ -341,7 +321,6 @@ }, "CHANGE_PASSWORD": { "PAGE_TITLE": "變更密碼 - Taiga", - "PAGE_DESCRIPTION": "設定Taiga 帳戶密碼! 你也許該吃點鐵質豐富的食物,它對你的大腦有益處:p", "SECTION_NAME": "改變密碼 ", "FIELD_CURRENT_PASSWORD": "現用密碼 ", "PLACEHOLDER_CURRENT_PASSWORD": "你目前的密碼(如果你未有密碼,此處請空白)", @@ -366,8 +345,7 @@ }, "INVITATION_LOGIN_FORM": { "NOT_FOUND": "我們找不到你的邀請碼", - "SUCCESS": "你成功地加入此專案,歡迎來到 {{project_name}}", - "ERROR": "按我們的記錄,你尚未註冊或是未輸入有效的密碼 " + "SUCCESS": "你成功地加入此專案,歡迎來到 {{project_name}}" }, "HOME": { "PAGE_TITLE": "首頁 - Taiga", @@ -438,10 +416,7 @@ "TITLE_LIGHTBOX_DELETE_ATTACHMENT": "刪除附件....", "MSG_LIGHTBOX_DELETE_ATTACHMENT": "附件 '{{fileName}}'", "ERROR_DELETE_ATTACHMENT": "無法刪除: {{errorMessage}}", - "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})", - "FIELDS": { - "IS_DEPRECATED": "被棄用" - } + "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})" }, "PAGINATION": { "PREVIOUS": "Prev", @@ -477,13 +452,10 @@ "ASYNC_MESSAGE": "準備好後,我們會送給 你一封電子郵件", "SYNC_MESSAGE": "如果未能自動下載,請點選此處 . ", "ERROR": "我們的系統無法製作你的滙出資料,請再試一次 ", - "ERROR_BUSY": "抱歉系統繁忙中,請稍後再試試 ", - "ERROR_MESSAGE": "我們的系統在生成你的傾倒時遇到一些問題: {{message}}" + "ERROR_BUSY": "抱歉系統繁忙中,請稍後再試試 " }, "MODULES": { "TITLE": "模組", - "ENABLE": "啟用", - "DISABLE": "停用", "EPICS": "Epics", "EPICS_DESCRIPTION": "Visualize and manage the most strategic part of your project", "BACKLOG": "待辦任務優先表", @@ -512,7 +484,6 @@ "PAGE_TITLE": "{{sectionName}} - 專案檔案 - {{projectName}}", "PROJECT_DETAILS": "專案細節", "PROJECT_NAME": "專案名稱", - "PROJECT_SLUG": "專案代稱", "TAGS": "標籤", "DESCRIPTION": "描述", "RECRUITING": "這個專案是否在徵人", @@ -523,7 +494,6 @@ "PRIVATE_PROJECT": "不公開專案", "PRIVATE_OR_PUBLIC": "公開專案和私密專案有何差異?", "DELETE": "刪除此專案", - "LOGO_HELP": "此圖片將被裁成80x80px.
    ", "CHANGE_LOGO": "更改圖標", "ACTION_USE_DEFAULT_LOGO": "使用設預圖片", "MAX_PRIVATE_PROJECTS": "You've reached the maximum number of private projects allowed by your current plan", @@ -653,8 +623,8 @@ "INFO_VERIFYING_IP": "GitHub要求不指派因此最佳確認方式為IP位置來源。如果此處空白,表示IP未有效確核。" }, "GITHUB": { - "SECTION_NAME": "Githun", - "PAGE_TITLE": "Gitlab - {{projectName}}" + "SECTION_NAME": "GitHub", + "PAGE_TITLE": "GitHub - {{projectName}}" }, "GOGS": { "SECTION_NAME": "Gogs", @@ -663,7 +633,6 @@ "WEBHOOKS": { "PAGE_TITLE": "Webhooks- {{projectName}}", "SECTION_NAME": "網頁觸發 ", - "SUBTITLE": "網頁觸發通知關於Taiga事件的外部服務,例如評論,使用者故事等。 ", "ADD_NEW": "新增一個網頁觸發 ", "TYPE_NAME": "鍵入服務名稱 ", "TYPE_PAYLOAD_URL": "鍵入服務有效載荷網址", @@ -709,7 +678,6 @@ "DELETE_MEMBER": "刪除成員", "RESEND": "重新送出", "SUCCESS_SEND_INVITATION": "我們已再次發出邀請信給'{{email}}'. ", - "ERROR_SEND_INVITATION": "我們未送出邀請 ", "SUCCESS_DELETE": "已刪除 {{message}}.", "ERROR_DELETE": "我們無法刪除 {{message}}.", "DEFAULT_DELETE_MESSAGE": "邀請 {{email}}" @@ -738,16 +706,11 @@ "PLACEHOLDER_WRITE_NAME": "為此新狀態命名" }, "MENU": { - "TITLE": "管理者", "PROJECT": "專案", "ATTRIBUTES": "屬性", "MEMBERS": "成員", "PERMISSIONS": "權限", - "INTEGRATIONS": "整合", - "PLUGINS": "外掛" - }, - "SUBMENU_PROJECT_ATTRIBUTES": { - "TITLE": "屬性" + "INTEGRATIONS": "整合" }, "SUBMENU_PROJECT_VALUES": { "STATUS": "狀態", @@ -758,17 +721,11 @@ "CUSTOM_FIELDS": "客製化欄位", "TAGS": "標籤" }, - "SUBMENU_PROJECT_PROFILE": { - "TITLE": "專案檔案" - }, "SUBMENU_ROLES": { "TITLE": "角色", "ACTION_NEW_ROLE": "+ 新角色", "TITLE_ACTION_NEW_ROLE": "新增角色" }, - "SUBMENU_THIDPARTIES": { - "TITLE": "服務 " - }, "PROJECT_TRANSFER": { "DO_YOU_ACCEPT_PROJECT_OWNERNSHIP": "Would you like to become the new project owner?", "PRIVATE": "Private", @@ -783,15 +740,13 @@ "PRIVATE": "Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects", "PUBLIC": "Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects" }, - "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership.", - "CHANGE_MY_PLAN": "Change my plan" + "CANT_BE_OWNED": "At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership." } }, "USER": { "PROFILE": { "PAGE_TITLE": "{{userFullName}} (@{{userUsername}})", "EDIT": "編輯個人資料", - "FOLLOW": "追踪", "CLOSED_US": "閞閉使用者故事", "PROJECTS": "專案", "PROJECTS_EMPTY": "{{username}} 尚無專案", @@ -799,7 +754,6 @@ "CONTACTS_EMPTY": "{{username}} 尚無聯絡人", "CURRENT_USER_CONTACTS_EMPTY": "您尚無任何聯絡人", "CURRENT_USER_CONTACTS_EMPTY_EXPLAIN": "你在Taiga一同工作的伙伴將自動成為你的聯絡人", - "REPORT": "回報濫用", "TABS": { "ACTIVITY_TAB": "時間表", "ACTIVITY_TAB_TITLE": "顯示該用戶的所有活動", @@ -825,13 +779,13 @@ "FILTER_TYPE_ALL": "所有", "FILTER_TYPE_ALL_TITLE": "顯示全部", "FILTER_TYPE_PROJECTS": "專案", - "FILTER_TYPE_PROJECT_TITLES": "只顯示專案", + "FILTER_TYPE_PROJECTS_TITLE": "只顯示專案", "FILTER_TYPE_EPICS": "Epics", - "FILTER_TYPE_EPIC_TITLES": "Show only epics", + "FILTER_TYPE_EPICS_TITLE": "Show only epics", "FILTER_TYPE_USER_STORIES": "故事", - "FILTER_TYPE_USER_STORIES_TITLES": "只顯視使用者故事", + "FILTER_TYPE_USER_STORIES_TITLE": "只顯視使用者故事", "FILTER_TYPE_TASKS": "任務 ", - "FILTER_TYPE_TASK_TITLES": "只顯示任務 ", + "FILTER_TYPE_TASKS_TITLE": "只顯示任務 ", "FILTER_TYPE_ISSUES": "問題 ", "FILTER_TYPE_ISSUES_TITLE": "只顯示問題 ", "EMPTY_TITLE": "似乎沒有東西可顯示" @@ -839,8 +793,6 @@ }, "PROJECT": { "PAGE_TITLE": "{{projectName}}", - "WELCOME": "歡迎", - "SECTION_PROJECTS": "專案", "HELP": "記錄你的專案在上方常用欄位
    前十個專案將會顯示在上方導覽處。", "PRIVATE": "不公開專案", "LOOKING_FOR_PEOPLE": "這個專案正在徵人", @@ -852,12 +804,6 @@ "THIS_PROJECT_IS_BLOCKED": "This project is temporarily blocked", "TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF": "In order to unblock your projects, contact the administrator." }, - "STATS": { - "PROJECT": "專案
    點數", - "DEFINED": "已定義
    點數", - "ASSIGNED": "已指派
    點數", - "CLOSED": "已關閉
    點數" - }, "SECTION": { "SEARCH": "搜尋", "TIMELINE": "時間表", @@ -870,13 +816,9 @@ "ADMIN": "管理者" }, "NAVIGATION": { - "SECTION_TITLE": "你的專案", - "PLACEHOLDER_SEARCH": "搜尋", "ACTION_CREATE_PROJECT": "創建專案", "MANAGE_PROJECTS": "管理專案", "TITLE_CREATE_PROJECT": "創建專案", - "TITLE_PRVIOUS_PROJECT": "顯示過去專案", - "TITLE_NEXT_PROJECT": "顯示下一個任務", "HELP_TITLE": "Taiga支援頁", "HELP": "幫助", "HOMEPAGE": "首頁", @@ -884,10 +826,6 @@ "FEEDBACK": "回饋 ", "NOTIFICATIONS_TITLE": "編輯個人通知設定", "NOTIFICATIONS": "通知", - "ORGANIZATIONS_TITLE": "編輯您的組織資料", - "ORGANIZATIONS": "編輯組織資料", - "SETTINGS_TITLE": "編輯個人設定", - "SETTINGS": "設定", "VIEW_PROFILE_TITLE": "檢視個人資料", "VIEW_PROFILE": "檢視個人資料", "EDIT_PROFILE_TITLE": "編輯你的個人資料", @@ -896,9 +834,7 @@ "CHANGE_PASSWORD": "更換密碼 ", "DASHBOARD_TITLE": "控制台", "DISCOVER_TITLE": "發現流行專案", - "NEW_ITEM": "新 ", - "DISCOVER": "發現", - "ACTION_REORDER": "拖移 & 丟到來記錄" + "DISCOVER": "發現" }, "LIKE_BUTTON": { "LIKE": "喜歡", @@ -927,7 +863,6 @@ }, "CREATE": { "TITLE": "創建專案", - "FRESH": "新鮮與乾淨,太好了", "CHOOSE_TEMPLATE": "Which template fits your project better?", "TEMPLATE_SCRUM": "Scrum", "TEMPLATE_SCRUM_DESC": "Prioritize and solve your tasks in short time cycles.", @@ -946,8 +881,7 @@ "MAX_PRIVATE_PROJECTS": "Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.", "MAX_PUBLIC_PROJECTS": "Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.", "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "MAX_MEMBERS": "Unfortunately, your current plan allows for a maximum of {{max_memberships}} members per project.\n Unselect some members or contact the administrator." + "PRIVATE_PROJECT": "Private Project" }, "COMMON": { "DETAILS": "New project details", @@ -957,16 +891,7 @@ "DUPLICATE": { "TITLE": "Duplicate Project", "DESCRIPTION": "Start clean and keep your configuration", - "SELECT_PLACEHOLDER": "Choose an existing project to duplicate", - "DETAILS": "New project details", - "CREATE_PROJECT_TEXT": "新鮮與乾淨,太好了", - "CHOOSE_TEMPLATE_TITLE": "More info about project templates", - "CHOOSE_TEMPLATE_INFO": "More info", - "PROJECT_DETAILS": "Project Details", - "PUBLIC_PROJECT": "Public Project", - "PRIVATE_PROJECT": "Private Project", - "CREATE_PROJECT": "創建專案", - "CHANGE_PLANS": "change plans" + "SELECT_PLACEHOLDER": "Choose an existing project to duplicate" }, "IMPORT": { "TITLE": "Import Project", @@ -980,13 +905,10 @@ "ERROR_MAX_SIZE_EXCEEDED": "'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})", "SYNC_SUCCESS": "你的專案已成功滙入", "IMPORT": "Import", - "ARCHIVED": "歸檔", - "ARCHIVED_DESCRIPTION": "You have archived projects, Do you want to import your archived projects?", "WHO_IS": "Their tasks will be assigned to ...", - "WRITE_EMAIL": "Or if you want, write the email that their use in Taiga", + "WRITE_EMAIL": "Or if you want, write the email that this user uses in Taiga", "SEARCH_CONTACT": "Or if you want, search in your contacts", - "WRITE_EMAIL_LABEL": "Write the email that their use in Taiga", - "EMAIL_NOT_FOUND": "We did not find any users with that email", + "WRITE_EMAIL_LABEL": "Write the email that this user uses in Taiga", "ACCEEDE": "Acceede", "PROJECT_MEMBERS": "Project Members", "PROCESS_DESCRIPTION": "Tell us who from Taiga you want to assign the tasks of {{platform}}", @@ -998,8 +920,8 @@ "ASSIGN": "指派", "PROJECT_SELECTOR": { "NO_RESULTS": "It looks like nothing was found with your search criteria", - "ACTION_SEARCH": "search", - "ACTION_BACK": "Back" + "ACTION_SEARCH": "搜尋", + "ACTION_BACK": "後台" }, "PROJECT_RESTRICTIONS": { "PROJECT_MEMBERS_DESC_PRIVATE": "The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.", @@ -1041,43 +963,36 @@ "SELECTOR": "Import your Taiga project" }, "TRELLO": { - "TITLE": "Trello", "SELECTOR": "Import your Trello boards into Taiga", "CHOOSE_PROJECT": "Choose board that you want to import", "NO_PROJECTS": "It seems you have no boards in Trello" }, "GITHUB": { - "TITLE": "Githun", - "SELECTOR": "Import your Github project issues", + "SELECTOR": "Import your GitHub project issues", "CHOOSE_PROJECT": "Find the project you want to import", "NO_PROJECTS": "It seems you have no porjects in GitHub", - "PROJECT_MEMBERS": "Project Members", "HOW_DO_YOU_WANT_TO_IMPORT": "How do you want to import your issues into Taiga?", "KANBAN_PROJECT": "As user stories in a kanban project", "KANBAN_PROJECT_DESCRIPTION": "After that you can enable scrum with backlog.", "SCRUM_PROJECT": "As user stories in a scrum project", "SCRUM_PROJECT_DESCRIPTION": "After that you can enable kanban mode.", "ISSUES_PROJECT": "As issues", - "ISSUES_PROJECT_DESCRIPTION": "You will not able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" + "ISSUES_PROJECT_DESCRIPTION": "You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories" }, "ASANA": { - "TITLE": "Asana", "SELECTOR": "Import your Asana project and choose how to manage it", "CHOOSE_PROJECT": "Choose project that you want to import", "NO_PROJECTS": "It seems you have no porjects in Asana", "KANBAN_PROJECT": "Kanban(看板)", "SCRUM_PROJECT": "Scrum", "CREATE_AS_SCRUM_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.", - "PROJECT_MEMBERS": "Project Members" + "CREATE_AS_KANBAN_DESCRIPTION": "The tasks and sub-tasks of your project will be created as Taiga user stories and tasks." }, "JIRA": { - "TITLE": "Jira", "SELECTOR": "Import your Jira project and choose how to manage it", "CHOOSE_PROJECT": "Choose project or board that you want to import", "NO_PROJECTS": "It seems you have no porjects or boards in Jira", "URL": "Your Jira URL", - "PROJECT_MEMBERS": "Project Members", "KANBAN_PROJECT": "Kanban(看板)", "SCRUM_PROJECT": "Scrum", "ISSUES_PROJECT": "問題 ", @@ -1091,13 +1006,10 @@ }, "LIGHTBOX": { "DELETE_ACCOUNT": { - "SECTION_NAME": "刪除Taiga帳戶", "CONFIRM": "你確定要刪除Taiga帳戶嗎?", - "NEWSLETTER_LABEL_TEXT": "不願再收到電子月報", "CANCEL": "Back to settings", "ACCEPT": "Delete account", - "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account.", - "SUBTITLE": "Sorry to see you go. We'll be here if you should ever consider us again! :(" + "BLOCK_PROJECT": "Note that all the projects you own projects will be blocked after you delete your account. If you do want a project blocked, transfer ownership to another member of each project prior to deleting your account." }, "DELETE_PROJECT": { "TITLE": "刪除專案", @@ -1217,15 +1129,9 @@ "ADD_BULK": "批次加入新使用者故事", "PROMOTED": "此使用者故事已提昇成問題:", "TITLE_LINK_GO_TO_ISSUE": "到問題 ", - "EXTERNAL_REFERENCE": "此使用者故事創造者是", - "GO_TO_EXTERNAL_REFERENCE": "回到一開始", - "BLOCKED": "這個使用者故事已被封鎖", "TITLE_DELETE_ACTION": "刪除使用者故事", "LIGHTBOX_TITLE_BLOKING_US": "封鎖中的使用者故事", - "TASK_COMPLETED": "{{totalClosedTasks}}/{{totalTasks}} 任務完成", - "ASSIGN": "指派使用者故事", "NOT_ESTIMATED": "無預估", - "TOTAL_US_POINTS": "全部使用者故事點數", "TRIBE": { "PUBLISH": "Publish as Gig in Taiga Tribe", "PUBLISH_INFO": "More info", @@ -1239,19 +1145,15 @@ }, "FIELDS": { "TEAM_REQUIREMENT": "團隊要求", - "CLIENT_REQUIREMENT": "客戶要求", - "FINISH_DATE": "完成日期" + "CLIENT_REQUIREMENT": "客戶要求" } }, "COMMENTS": { "DELETED_INFO": "Comment deleted by {{user}}", - "TITLE": "評論", "COMMENTS_COUNT": "{{comments}} Comments", - "ORDER": "Order", "OLDER_FIRST": "Older first", "RECENT_FIRST": "Recent first", "COMMENT": "評論", - "EDIT_COMMENT": "Edit comment", "EDITED_COMMENT": "Edited:", "SHOW_HISTORY": "View historic", "TYPE_NEW_COMMENT": "在此輸入一個新的評論", @@ -1264,13 +1166,8 @@ } }, "ACTIVITY": { - "SHOW_ACTIVITY": "顯示動態", - "DATETIME": "DD MMM YYYY HH:mm", - "SHOW_MORE": "+ 顯示過去條目 ({{showMore}} more)", "TITLE": "動態", "ACTIVITIES_COUNT": "{{activities}} Activities", - "REMOVED": "已移除", - "ADDED": "已加入", "TAGS_ADDED": "tags added:", "TAGS_REMOVED": "tags removed:", "US_POINTS": "{{role}} points", @@ -1279,50 +1176,21 @@ "UPDATED_ATTACHMENT": "updated attachment ({{filename}}):", "CREATED_CUSTOM_ATTRIBUTE": "created custom attribute", "UPDATED_CUSTOM_ATTRIBUTE": "updated custom attribute", - "SIZE_CHANGE": "使 {size, plural, one{更改} other{變化}}", "BECAME_DEPRECATED": "became deprecated", "BECAME_UNDEPRECATED": "became undeprecated", "TEAM_REQUIREMENT": "團隊要求", "CLIENT_REQUIREMENT": "客戶要求", "BLOCKED": "已封鎖", "VALUES": { - "YES": "yes", - "NO": "no", - "EMPTY": "空白", "UNASSIGNED": "未指派" }, "FIELDS": { "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": "被棄用", - "IS_NOT_DEPRECATED": "is not deprecated", - "ORDER": "次序", - "BACKLOG_ORDER": "待辦任務先後次序", - "SPRINT_ORDER": "衝刺任務次序", - "KANBAN_ORDER": "kanban看板次序", - "TASKBOARD_ORDER": "任務板次序", - "US_ORDER": "使用者故事次序", "COLOR": "顏色" } }, @@ -1336,8 +1204,6 @@ "CUSTOMIZE_GRAPH_TITLE": "透由管理頁面設置點數與衝刺任務 \n ", "MOVE_US_TO_CURRENT_SPRINT": "移到目前的 Sprint", "MOVE_US_TO_LATEST_SPRINT": "移到最近的一個衝刺任務 ", - "SHOW_FILTERS": "顯示過濾器", - "SHOW_TAGS": "顯示標籤 (Tag)", "EMPTY": "The backlog is empty!", "CREATE_NEW_US": "創建一個新的使用者故事", "CREATE_NEW_US_EMPTY_HELP": "你可以創建一個新使用者故事", @@ -1392,8 +1258,6 @@ }, "FILTERS": { "TOGGLE": "切換過濾器可見度", - "TITLE": "過濾器", - "REMOVE": "移除過濾器", "HIDE": "隱藏過濾器", "SHOW": "顯示過濾器" }, @@ -1402,7 +1266,6 @@ "DATE": "DD MMM YYYY", "LINK_TASKBOARD": "衝刺任務板", "TITLE_LINK_TASKBOARD": "到任務板 {{spring.name}}", - "NUMBER_SPRINTS": "
    衝刺任務 ", "EMPTY": "尚無衝刺任務", "WARNING_EMPTY_SPRINT_ANONYMOUS": "此衝刺任務無使用者故事", "WARNING_EMPTY_SPRINT": "Drop here Stories from your backlog to start a new sprint", @@ -1427,7 +1290,6 @@ "TITLE_ACTION_ADD": "增加新任務 ", "TITLE_ACTION_ADD_BULK": "批次加入新任務 ", "TITLE_ACTION_ASSIGN": "指派任務 ", - "TITLE_ACTION_EDIT": "結束任務 ", "PLACEHOLDER_CARD_TITLE": "這可能是一項任務", "PLACEHOLDER_CARD_TEXT": "Split Stories into tasks to track them separately", "TABLE": { @@ -1457,17 +1319,11 @@ "TITLE_SELECT_STATUS": "狀態名稱 ", "OWNER_US": "這任務屬於", "TITLE_LINK_GO_OWNER": "到使用者故事", - "ORIGIN_US": "此任務創造者是", - "TITLE_LINK_GO_ORIGIN": "到使用者故事", - "BLOCKED": "這任務已被封鎖", "TITLE_DELETE_ACTION": "刪除任務", "LIGHTBOX_TITLE_BLOKING_TASK": "封鎖中的任務 ", "FIELDS": { - "MILESTONE": "衝刺任務", - "USER_STORY": "使用者故事", "IS_IOCAINE": "負予全新任務" }, - "ACTION_IOCAINE": "挑戰全新任務", "TITLE_ACTION_IOCAINE": "感到任務的不勘負荷?確定其它人知道此狀況在編輯任務時點選此「毒藥鍵」。這種致命毒物如果長期吸食微量,最後可能免疫。因此你最好偶而做點出奇的挑戰。" }, "NOTIFICATION": { @@ -1496,14 +1352,12 @@ "ISSUES": { "PAGE_TITLE": "問題 - {{projectName}}", "PAGE_DESCRIPTION": " {{projectName}}的問題清單看版: {{projectDescription}}", - "LIST_SECTION_NAME": "問題 ", "SECTION_NAME": "問題", "ACTION_NEW_ISSUE": "+ 新問題 ", "ACTION_PROMOTE_TO_US": "提昇到使用者故事", "PROMOTED": "此問題已提昇成使用者故事 ", "EXTERNAL_REFERENCE": "此問題的提供者是", "GO_TO_EXTERNAL_REFERENCE": "回到一開始", - "BLOCKED": "這個議題已被封鎖", "ACTION_DELETE": "删除議題 ", "LIGHTBOX_TITLE_BLOKING_ISSUE": "封鎖中的問題", "FIELDS": { @@ -1545,15 +1399,11 @@ "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": "拖移 & 丟到未做", "PLACEHOLDER_CARD_TITLE": "這裏是你的使用者故事", "PLACEHOLDER_CARD_TEXT": "在此可以找到你想了解的專案" }, @@ -1574,7 +1424,6 @@ "PAGE_TITLE": "團隊- {{projectName}}", "PAGE_DESCRIPTION": "團隊面版可顯示專案中所有成員{{projectName}}: {{projectDescription}}", "SECTION_NAME": "團隊", - "APP_TITLE": "團隊- {{projectName}}", "PLACEHOLDER_INPUT_SEARCH": "以全名搜尋", "COLUMN_MR_WOLF": "問題解決高手", "EXPLANATION_COLUMN_MR_WOLF": "已關閉議題 ", @@ -1610,18 +1459,9 @@ "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": "檢查你的收信箱
    我們送出了一封信
    裏面有設定你新電子郵件的相關指示", @@ -1643,7 +1483,6 @@ "PAGE_TITLE": "{{wikiPageName}} - 維基 - {{projectName}}", "PAGE_DESCRIPTION": "上回編輯{{lastModifiedDate}} ({{totalEditions}} editions in total) 內容: {{ wikiPageContent }}", "DATETIME": "DD MMM YYYY HH:mm", - "PLACEHOLDER_PAGE": "編寫你的維基頁", "REMOVE": "移除此維基頁 ", "DELETE_LIGHTBOX_TITLE": "刪除維基頁", "DELETE_LINK_TITLE": "Delete Wiki link", @@ -1801,7 +1640,6 @@ "MOST_LIKED": "最受喜愛的", "MOST_LIKED_EMPTY": "尚未有喜愛的專案", "VIEW_MORE": "顯示更多", - "RECRUITING": "這個專案正在徵人", "FEATURED": "受矚目專案", "EMPTY": "沒有專案符合你尋找的條件.
    再試一次", "FILTERS": { From 9ec8c4fba2567217dd861d65b85b977aaeca4001 Mon Sep 17 00:00:00 2001 From: xaviju Date: Wed, 8 Mar 2017 09:04:41 +0100 Subject: [PATCH 165/175] Import project style fixes --- .../create-project-form.jade | 10 ++-- .../create/import-taiga/import-taiga.jade | 5 +- .../import/import-project.controller.coffee | 3 ++ .../create/import/import-project.jade | 47 ++++++++++--------- app/styles/dependencies/mixins/create.scss | 23 +++++---- 5 files changed, 46 insertions(+), 42 deletions(-) diff --git a/app/modules/projects/create/create-project-form/create-project-form.jade b/app/modules/projects/create/create-project-form/create-project-form.jade index c5a29054..31c0c01c 100644 --- a/app/modules/projects/create/create-project-form/create-project-form.jade +++ b/app/modules/projects/create/create-project-form/create-project-form.jade @@ -1,15 +1,15 @@ .create-project - h1.create-project-title(ng-if="vm.type == 'scrum'") + .create-project-title-wrapper(ng-if="vm.type == 'scrum'") tg-svg(svg-icon="icon-scrum") - span(translate="PROJECT.CREATE.TEMPLATE_SCRUM") + h1.create-project-title(translate="PROJECT.CREATE.TEMPLATE_SCRUM") h3.create-project-description( ng-if="vm.type == 'scrum'" translate="PROJECT.CREATE.TEMPLATE_SCRUM_DESC" ) - h1.create-project-title(ng-if="vm.type == 'kanban'") + .create-project-title-wrapper(ng-if="vm.type == 'kanban'") tg-svg(svg-icon="icon-kanban") - span(translate="PROJECT.CREATE.TEMPLATE_KANBAN") + h1.create-project-title(translate="PROJECT.CREATE.TEMPLATE_KANBAN") h3.create-project-description( ng-if="vm.type == 'kanban'" translate="PROJECT.CREATE.TEMPLATE_KANBAN_DESC" @@ -29,4 +29,4 @@ can-create-private-projects="vm.canCreatePrivateProjects" ) - div(ng-include="'projects/create/import-project-form-common/actions.html'") \ No newline at end of file + div(ng-include="'projects/create/import-project-form-common/actions.html'") diff --git a/app/modules/projects/create/import-taiga/import-taiga.jade b/app/modules/projects/create/import-taiga/import-taiga.jade index 08c0fd20..da97034b 100644 --- a/app/modules/projects/create/import-taiga/import-taiga.jade +++ b/app/modules/projects/create/import-taiga/import-taiga.jade @@ -8,8 +8,5 @@ input.hidden( alt="Taiga Logo" ) .import-project-name-wrapper - p.import-project-name( - href="#" - title="Taiga" - ) Taiga + span.import-project-name Taiga p.import-project-description(translate="PROJECT.IMPORT.TAIGA.SELECTOR") diff --git a/app/modules/projects/create/import/import-project.controller.coffee b/app/modules/projects/create/import/import-project.controller.coffee index 1eb492b2..d2967f64 100644 --- a/app/modules/projects/create/import/import-project.controller.coffee +++ b/app/modules/projects/create/import/import-project.controller.coffee @@ -110,4 +110,7 @@ class ImportProjectController cancelCurrentImport: () -> @location.url(@tgNavUrls.resolve('create-project-import')) + backToCreate: () -> + @location.url(@tgNavUrls.resolve('create-project')) + angular.module("taigaProjects").controller("ImportProjectCtrl", ImportProjectController) diff --git a/app/modules/projects/create/import/import-project.jade b/app/modules/projects/create/import/import-project.jade index a2014d45..aae83c75 100644 --- a/app/modules/projects/create/import/import-project.jade +++ b/app/modules/projects/create/import/import-project.jade @@ -3,20 +3,20 @@ ul.import-project-from li.import-project-from-site( - tg-click-input-file, + tg-click-input-file tg-import-taiga ) - li.import-project-from-site(ng-click="vm.unfoldOptions('jira')", ng-if="vm.isActiveImporter('jira')") + li.import-project-from-site( + ng-click="vm.unfoldOptions('jira')" + ng-if="vm.isActiveImporter('jira')" + ) .import-project-logo img( src="/#{v}/images/import-logos/jira.png" alt="Jira Logo" ) .import-project-name-wrapper - a.import-project-name( - href="#" - title="Jira" - ) Jira + span.import-project-name Jira p.import-project-description(translate="PROJECT.IMPORT.JIRA.SELECTOR") fieldset.import-project-url(ng-if="vm.unfoldedOptions == 'jira'") label( @@ -33,46 +33,47 @@ title="{{'PROJECT.IMPORT.ACCEEDE' | translate}}" translate="PROJECT.IMPORT.ACCEEDE" ) - li.import-project-from-site(ng-click="vm.select('github')", ng-if="vm.isActiveImporter('github')") + li.import-project-from-site( + ng-click="vm.select('github')" + ng-if="vm.isActiveImporter('github')" + ) .import-project-logo img( src="/#{v}/images/import-logos/github.png" alt="Github Logo" ) .import-project-name-wrapper - a.import-project-name( - href="#" - title="Github" - ) Github + span.import-project-name Github p.import-project-description(translate="PROJECT.IMPORT.GITHUB.SELECTOR") - li.import-project-from-site(ng-click="vm.select('trello')", ng-if="vm.isActiveImporter('trello')") + li.import-project-from-site( + ng-click="vm.select('trello')" + ng-if="vm.isActiveImporter('trello')" + ) .import-project-logo img( src="/#{v}/images/import-logos/trello.png" alt="Trello Logo" ) .import-project-name-wrapper - a.import-project-name( - href="#" - title="Trello" - ) Trello + span.import-project-name Trello p.import-project-description(translate="PROJECT.IMPORT.TRELLO.SELECTOR") - li.import-project-from-site(ng-click="vm.select('asana')", ng-if="vm.isActiveImporter('asana')") + li.import-project-from-site( + ng-click="vm.select('asana')" + ng-if="vm.isActiveImporter('asana')" + ) .import-project-logo img( src="/#{v}/images/import-logos/asana.png" alt="Asana Logo" ) .import-project-name-wrapper - a.import-project-name( - href="#" - title="Asana" - ) Asana + span.import-project-name Asana p.import-project-description(translate="PROJECT.IMPORT.ASANA.SELECTOR") .create-project-action - a.trans-button.create-project-action-back( - tg-nav="create-project", + button.trans-button.create-project-action-cancel( + type="button" + ng-click="vm.backToCreate()" title="{{'PROJECT.CREATE.BACK' | translate}}" translate="PROJECT.CREATE.BACK" ) diff --git a/app/styles/dependencies/mixins/create.scss b/app/styles/dependencies/mixins/create.scss index fe59f338..f396854c 100644 --- a/app/styles/dependencies/mixins/create.scss +++ b/app/styles/dependencies/mixins/create.scss @@ -36,28 +36,28 @@ } } - &-description, - &-title { - text-align: center; - } - - &-title { + &-title-wrapper { align-items: center; display: flex; justify-content: center; margin-bottom: 0; - tg-svg { - display: flex; + .create-project-title { + display: inline-block; } - .icon { - @include svg-size(1.5rem); + @include svg-size(1.75rem); margin-right: .5rem; vertical-align: middle; } } + &-title, + &-description { + margin: 0; + text-align: center; + } + &-description { color: $gray-light; margin-bottom: 2rem; @@ -115,6 +115,9 @@ display: flex; justify-content: center; position: relative; + &:hover { + color: currentColor; + } } li { &:hover { From 91e648bea108c68dd5fa691325ea0c52ca2b9397 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Wed, 8 Mar 2017 09:09:15 +0100 Subject: [PATCH 166/175] fix epics drag & drop --- .../epics-table/epics-table.controller.coffee | 3 +++ app/modules/epics/epics.service.coffee | 22 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee b/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee index ea993e71..e2cd5cec 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee +++ b/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee @@ -51,6 +51,9 @@ class EpicsTableController @.displayOptions = !@.displayOptions reorderEpic: (epic, newIndex) -> + if epic.get('epics_order') == newIndex + return null + @epicsService.reorderEpic(epic, newIndex) .then null, () => # on error @confirm.notify("error") diff --git a/app/modules/epics/epics.service.coffee b/app/modules/epics/epics.service.coffee index 59c6541b..6c8c521c 100644 --- a/app/modules/epics/epics.service.coffee +++ b/app/modules/epics/epics.service.coffee @@ -75,24 +75,42 @@ class EpicsService Promise.all(promises).then(@.fetchEpics.bind(this, true)) reorderEpic: (epic, newIndex) -> + orderList = {} + @._epics.forEach (it) -> + orderList[it.get('id')] = it.get('epics_order') + withoutMoved = @.epics.filter (it) => it.get('id') != epic.get('id') beforeDestination = withoutMoved.slice(0, newIndex) + afterDestination = withoutMoved.slice(newIndex) previous = beforeDestination.last() newOrder = if !previous then 0 else previous.get('epics_order') + 1 + orderList[epic.get('id')] = newOrder + previousWithTheSameOrder = beforeDestination.filter (it) => it.get('epics_order') == previous.get('epics_order') + setOrders = _.fromPairs previousWithTheSameOrder.map((it) => [it.get('id'), it.get('epics_order')] ).toJS() + afterDestination.forEach (it) -> orderList[it.get('id')] = it.get('epics_order') + 1 + + @._epics = @._epics.map (it) -> it.set('epics_order', orderList[it.get('id')]) + @._epics = @._epics.sortBy (it) -> it.get('epics_order') + data = { epics_order: newOrder, version: epic.get('version') } - return @resources.epics.reorder(epic.get('id'), data, setOrders) + return @resources.epics.reorder(epic.get('id'), data, setOrders).then (newEpic) => + @._epics = @._epics.map (it) -> + if it.get('id') == newEpic.get('id') + return newEpic + + return it reorderRelatedUserstory: (epic, epicUserstories, userstory, newIndex) -> withoutMoved = epicUserstories.filter (it) => it.get('id') != userstory.get('id') @@ -120,7 +138,7 @@ class EpicsService @._epics = @._epics.map (it) -> if it.get('id') == epic.get('id') return epic - + return it updateEpicStatus: (epic, statusId) -> From c7f615caa9a6c143ff5dec759776730624beff96 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 8 Mar 2017 12:00:16 +0100 Subject: [PATCH 167/175] Issue 4989: Edit tags in lightbox mode --- app/coffee/modules/common/lightboxes.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index e4768fdd..a10d735d 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -339,7 +339,7 @@ CreateEditUserstoryDirective = ($repo, $model, $rs, $rootScope, lightboxService, inserted = _.find itemtags, (it) -> it[0] == value if !inserted - itemtags.push([tag , color]) + itemtags.push([value , color]) $scope.us.tags = itemtags $scope.deleteTag = (tag) -> From 1f47a4b9b1104815ba1d1ed5b54679854b6f3e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 8 Mar 2017 14:50:46 +0100 Subject: [PATCH 168/175] Fix a typo --- app/locales/taiga/locale-ca.json | 2 +- app/locales/taiga/locale-de.json | 2 +- app/locales/taiga/locale-en.json | 2 +- app/locales/taiga/locale-es.json | 2 +- app/locales/taiga/locale-fi.json | 2 +- app/locales/taiga/locale-fr.json | 2 +- app/locales/taiga/locale-it.json | 2 +- app/locales/taiga/locale-ja.json | 2 +- app/locales/taiga/locale-ko.json | 2 +- app/locales/taiga/locale-nb.json | 2 +- app/locales/taiga/locale-nl.json | 2 +- app/locales/taiga/locale-pl.json | 2 +- app/locales/taiga/locale-pt-br.json | 2 +- app/locales/taiga/locale-ru.json | 2 +- app/locales/taiga/locale-sv.json | 2 +- app/locales/taiga/locale-tr.json | 2 +- app/locales/taiga/locale-zh-hans.json | 2 +- app/locales/taiga/locale-zh-hant.json | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/locales/taiga/locale-ca.json b/app/locales/taiga/locale-ca.json index ff4a4724..5bf8f9f7 100644 --- a/app/locales/taiga/locale-ca.json +++ b/app/locales/taiga/locale-ca.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Afegir nova severitat" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Estat", + "TITLE": "Statuses", "SUBTITLE": "Especifica els estats de les vostres històries d'usuari, tasques i incidències", "EPIC_TITLE": "Epic Statuses", "US_TITLE": "User Story Statuses", diff --git a/app/locales/taiga/locale-de.json b/app/locales/taiga/locale-de.json index 5774eba5..b709615c 100644 --- a/app/locales/taiga/locale-de.json +++ b/app/locales/taiga/locale-de.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Neue Gewichtung hinzufügen" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Status", + "TITLE": "Statuses", "SUBTITLE": "Spezifizieren Sie die Status, die Ihre User-Stories, Aufgaben und Tickets durchlaufen werden.", "EPIC_TITLE": "Epic Status", "US_TITLE": "User-Story Status", diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index da2ba566..7fd43392 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -571,7 +571,7 @@ "ACTION_ADD": "Add new severity" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Status", + "TITLE": "Statuses", "SUBTITLE": "Specify the statuses your user stories, tasks and issues will go through", "EPIC_TITLE": "Epic Statuses", "US_TITLE": "User Story Statuses", diff --git a/app/locales/taiga/locale-es.json b/app/locales/taiga/locale-es.json index c743bb1a..1c9f684e 100644 --- a/app/locales/taiga/locale-es.json +++ b/app/locales/taiga/locale-es.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Añadir nueva gravedad" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Estado", + "TITLE": "Statuses", "SUBTITLE": "Especifica los estado que atravesarán tus historias de usuario, tareas y peticiones", "EPIC_TITLE": "Estados de Epicas", "US_TITLE": "Estados de historias de usuario", diff --git a/app/locales/taiga/locale-fi.json b/app/locales/taiga/locale-fi.json index 198a3704..3ed4ff5d 100644 --- a/app/locales/taiga/locale-fi.json +++ b/app/locales/taiga/locale-fi.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Lisää uusi vakavuus" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Tila", + "TITLE": "Statuses", "SUBTITLE": "Määrittele tilat joiden kautta käyttäjätarinasi, tehtäväsi ja pyyntösi kulkevat", "EPIC_TITLE": "Epic Statuses", "US_TITLE": "User Story Statuses", diff --git a/app/locales/taiga/locale-fr.json b/app/locales/taiga/locale-fr.json index 680abfc4..7323e9c8 100644 --- a/app/locales/taiga/locale-fr.json +++ b/app/locales/taiga/locale-fr.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Ajouter un niveau de gravité" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Statut", + "TITLE": "Statuses", "SUBTITLE": "Spécifiez les statuts que vont prendre vos récits utilisateur, tâches et tickets", "EPIC_TITLE": "Statuts d'épopée", "US_TITLE": "Statuts de récit utilisateur", diff --git a/app/locales/taiga/locale-it.json b/app/locales/taiga/locale-it.json index 29bf5f68..4d76c6c4 100644 --- a/app/locales/taiga/locale-it.json +++ b/app/locales/taiga/locale-it.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Aggiungi una nuova criticità." }, "PROJECT_VALUES_STATUS": { - "TITLE": "Stato", + "TITLE": "Statuses", "SUBTITLE": "Specifica lo stato delle storie utente, i compiti e i problemi saranno affrontati", "EPIC_TITLE": "Stati dell'epic", "US_TITLE": "Stati della storia utente", diff --git a/app/locales/taiga/locale-ja.json b/app/locales/taiga/locale-ja.json index d185bb8f..78e40617 100644 --- a/app/locales/taiga/locale-ja.json +++ b/app/locales/taiga/locale-ja.json @@ -570,7 +570,7 @@ "ACTION_ADD": "新しい深刻度を追加" }, "PROJECT_VALUES_STATUS": { - "TITLE": "ステータス", + "TITLE": "Statuses", "SUBTITLE": "ユーザーストーリー、タスク、課題のステータスを定義することができます。", "EPIC_TITLE": "エピックステータス", "US_TITLE": "ユーザーストーリーステータス", diff --git a/app/locales/taiga/locale-ko.json b/app/locales/taiga/locale-ko.json index c058e808..3f8e1e0b 100644 --- a/app/locales/taiga/locale-ko.json +++ b/app/locales/taiga/locale-ko.json @@ -570,7 +570,7 @@ "ACTION_ADD": "심각도 추가하기" }, "PROJECT_VALUES_STATUS": { - "TITLE": "상태", + "TITLE": "Statuses", "SUBTITLE": "유저 스토리, 태스크 그리고 이슈의 상태를 지정하세요.", "EPIC_TITLE": "에픽 상태", "US_TITLE": "유저 스토리 상태", diff --git a/app/locales/taiga/locale-nb.json b/app/locales/taiga/locale-nb.json index e64df132..60301b69 100644 --- a/app/locales/taiga/locale-nb.json +++ b/app/locales/taiga/locale-nb.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Legg til ny alvorlighetsgrad" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Status", + "TITLE": "Statuses", "SUBTITLE": "Angi statusene som dine brukerhistorier, oppgaver og hendelser vil følge", "EPIC_TITLE": "Epic Statuses", "US_TITLE": "User Story Statuses", diff --git a/app/locales/taiga/locale-nl.json b/app/locales/taiga/locale-nl.json index 564aa1b1..03a3c223 100644 --- a/app/locales/taiga/locale-nl.json +++ b/app/locales/taiga/locale-nl.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Nieuwe ernst toevoegen" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Status", + "TITLE": "Statuses", "SUBTITLE": "Specifieer de statussen waar je user stories, taken en issues door zullen gaan", "EPIC_TITLE": "Epic Statuses", "US_TITLE": "User Story Statuses", diff --git a/app/locales/taiga/locale-pl.json b/app/locales/taiga/locale-pl.json index c400dbb7..5b76d6ca 100644 --- a/app/locales/taiga/locale-pl.json +++ b/app/locales/taiga/locale-pl.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Dodaj nową ważność" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Status", + "TITLE": "Statuses", "SUBTITLE": "Zdefiniuj statusy dla historyjek użytkownika, zadań i zgłoszeń.", "EPIC_TITLE": "Epic Statuses", "US_TITLE": "User Story Statuses", diff --git a/app/locales/taiga/locale-pt-br.json b/app/locales/taiga/locale-pt-br.json index a21bbba1..8ca127a1 100644 --- a/app/locales/taiga/locale-pt-br.json +++ b/app/locales/taiga/locale-pt-br.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Adicionar nova gravidade" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Status", + "TITLE": "Statuses", "SUBTITLE": "Especifique os status pelos quais suas histórias de usuários, tarefas e problemas passarão", "EPIC_TITLE": "Estados do Épico", "US_TITLE": "Status de história de usuário", diff --git a/app/locales/taiga/locale-ru.json b/app/locales/taiga/locale-ru.json index c07cb4e7..3d6e5e62 100644 --- a/app/locales/taiga/locale-ru.json +++ b/app/locales/taiga/locale-ru.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Добавить новую степень важности" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Статус", + "TITLE": "Statuses", "SUBTITLE": "Укажите, какие статусы будут принимать ваши пользовательские истории, задачи и запросы", "EPIC_TITLE": "Статусы Эпоса", "US_TITLE": "Статусы пользовательских историй", diff --git a/app/locales/taiga/locale-sv.json b/app/locales/taiga/locale-sv.json index d5dd6836..d38f9e0f 100644 --- a/app/locales/taiga/locale-sv.json +++ b/app/locales/taiga/locale-sv.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Lägg till ny allvarlighetsgrad" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Status", + "TITLE": "Statuses", "SUBTITLE": "Specificera status för dina användarhistorier, uppgifter och ärenden ska ha i olika faser. ", "EPIC_TITLE": "Status för Epics", "US_TITLE": "User Story Statuses", diff --git a/app/locales/taiga/locale-tr.json b/app/locales/taiga/locale-tr.json index 6a95c963..012e6255 100644 --- a/app/locales/taiga/locale-tr.json +++ b/app/locales/taiga/locale-tr.json @@ -570,7 +570,7 @@ "ACTION_ADD": "Yeni önem derecesi ekle" }, "PROJECT_VALUES_STATUS": { - "TITLE": "Durum", + "TITLE": "Statuses", "SUBTITLE": "Hikayeleriniz, işleriniz ve sorunlarınızın alabileceği durumları tanımlayın", "EPIC_TITLE": "Epic Statuses", "US_TITLE": "User Story Statuses", diff --git a/app/locales/taiga/locale-zh-hans.json b/app/locales/taiga/locale-zh-hans.json index b22107c2..b62f18d2 100644 --- a/app/locales/taiga/locale-zh-hans.json +++ b/app/locales/taiga/locale-zh-hans.json @@ -570,7 +570,7 @@ "ACTION_ADD": "新增严重程度" }, "PROJECT_VALUES_STATUS": { - "TITLE": "状态", + "TITLE": "Statuses", "SUBTITLE": "指明你的用户故事,任务以及问题经历的状态", "EPIC_TITLE": "史诗状态", "US_TITLE": "用户故事状态", diff --git a/app/locales/taiga/locale-zh-hant.json b/app/locales/taiga/locale-zh-hant.json index 19d38b72..d0b217af 100644 --- a/app/locales/taiga/locale-zh-hant.json +++ b/app/locales/taiga/locale-zh-hant.json @@ -570,7 +570,7 @@ "ACTION_ADD": "新增急迫性" }, "PROJECT_VALUES_STATUS": { - "TITLE": "狀態", + "TITLE": "Statuses", "SUBTITLE": "指明你的使用者故事狀態,任務以及經歷問題 ", "EPIC_TITLE": "Epic Statuses", "US_TITLE": "User Story Statuses", From 1a15ab955e7f025074bc559e34cceb35207b493c Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 23 Feb 2017 15:21:13 +0100 Subject: [PATCH 169/175] code snippets --- app/js/medium-mention.js | 4 +- app/locales/taiga/locale-en.json | 3 + .../detail/header/detail-header.jade | 5 +- .../wysiwyg-code-hightlighter.service.coffee | 169 ++--------- .../wysiwyg-code-lightbox.directive.coffee | 55 ++++ .../wysiwyg-code-lightbox.jade | 25 ++ .../wysiwyg-code-lightbox.scss | 3 + .../wysiwyg/wysiwyg.directive.coffee | 164 +++++++---- app/modules/components/wysiwyg/wysiwyg.scss | 11 +- .../common/components/wysiwyg-toolbar.jade | 9 + app/styles/layout/ticket-detail.scss | 2 +- app/themes/high-contrast/variables.scss | 1 + app/themes/material-design/variables.scss | 1 + app/themes/taiga/variables.scss | 1 + e2e/helpers/detail-helper.js | 7 +- e2e/shared/wysiwyg.js | 262 +++++++++++------- e2e/suites/backlog.e2e.js | 2 +- e2e/suites/wiki.e2e.js | 48 +--- e2e/utils/common.js | 14 + 19 files changed, 423 insertions(+), 363 deletions(-) create mode 100644 app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.directive.coffee create mode 100644 app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.jade create mode 100644 app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.scss diff --git a/app/js/medium-mention.js b/app/js/medium-mention.js index 240f6722..936874be 100644 --- a/app/js/medium-mention.js +++ b/app/js/medium-mention.js @@ -6,7 +6,7 @@ var MentionExtension = MediumEditor.Extension.extend({ this.subscribe('blur', this.cancel.bind(this)); }, isEditMode: function() { - return !this.base.origElements.parentNode.classList.contains('read-mode') + return !this.base.origElements.parentNode.classList.contains('read-mode'); }, cancel: function() { if (this.isEditMode()) { @@ -248,7 +248,7 @@ var MentionExtension = MediumEditor.Extension.extend({ li.innerText = '@' + it.username; } - li.addEventListener('click', this.selectMention.bind(this, it)); + li.addEventListener('mousedown', this.selectMention.bind(this, it)); ul.appendChild(li); }.bind(this)); diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 7fd43392..1cd43791 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -214,6 +214,9 @@ } }, "WYSIWYG": { + "CODE_SNIPPET": "Code Snippet", + "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", + "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", "MARKDOWN_HELP": "Markdown syntax help" }, diff --git a/app/modules/components/detail/header/detail-header.jade b/app/modules/components/detail/header/detail-header.jade index 842a09d7..a678babd 100644 --- a/app/modules/components/detail/header/detail-header.jade +++ b/app/modules/components/detail/header/detail-header.jade @@ -11,11 +11,12 @@ span.detail-subject.e2e-title-subject( ng-if="!vm.permissions.canEdit" ) {{vm.item.subject}} - tg-svg.detail-edit.e2e-detail-edit( + a( + href="" ng-if="vm.permissions.canEdit" - svg-icon="icon-edit" ng-click="vm.editSubject(true)" ) + tg-svg.detail-edit.e2e-detail-edit(svg-icon="icon-edit") .edit-title-wrapper(ng-if="vm.editMode") input.edit-title-input.e2e-title-input( diff --git a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee index 2eeee29e..7a07e17f 100644 --- a/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee +++ b/app/modules/components/wysiwyg/wysiwyg-code-hightlighter.service.coffee @@ -23,16 +23,21 @@ ### class WysiwygCodeHightlighterService - constructor: () -> - if !@.languages - @.loadLanguages() + getLanguages: () -> + return new Promise (resolve, reject) => + if @.languages + resolve(@.languages) + else if @.loadPromise + @.loadPromise.then () => resolve(@.languages) + else + @.loadPromise = $.getJSON("/#{window._version}/prism/prism-languages.json").then (_languages_) => + @.loadPromise = null + @.languages = _.map _languages_, (it) -> + it.url = "/#{window._version}/prism/" + it.file - loadLanguages: () -> - $.getJSON("/#{window._version}/prism/prism-languages.json").then (_languages_) => - @.languages = _.map _languages_, (it) -> - it.url = "/#{window._version}/prism/" + it.file + return it - return it + resolve(@.languages) getLanguageInClassList: (classes) -> lan = _.find @.languages, (it) -> @@ -41,123 +46,6 @@ class WysiwygCodeHightlighterService return if lan then lan.name else null - addCodeLanguageSelectors: (mediumInstance) -> - $(mediumInstance.elements[0]).find('code').each (index, code) => - if !code.classList.contains('has-code-lan-selector') - code.classList.add('has-code-lan-selector') # prevent multi instanciate - - currentLan = @.getLanguageInClassList(code.classList) - code.parentNode.classList.add('language-' + currentLan) - - id = new Date().getTime() - - text = document.createTextNode(currentLan || 'text') - - tab = document.createElement('div') - tab.appendChild(text) - tab.addEventListener 'click', () => - @.searchLanguage tab, (lan) => - if lan - tab.innerText = lan - @.updatePositionCodeTab(code.parentElement, tab) - - languageClass = _.find code.classList, (className) -> - return className && className.indexOf('language-') != -1 - - if languageClass - code.classList.remove(languageClass.replace('language-', '')) - code.classList.remove(languageClass) - - code.classList.add('language-' + lan) - code.classList.add(lan) - - document.body.appendChild(tab) - - code.dataset.tab = tab - - if !code.dataset.tabId - code.dataset.tabId = id - code.classList.add(id) - - tab.dataset.tabId = code.dataset.tabId - - tab.classList.add('code-language-selector') # styles - tab.classList.add('medium-' + mediumInstance.id) # used to delete - - @.updatePositionCodeTab(code.parentElement, tab) - - removeCodeLanguageSelectors: (mediumInstance) -> - return if !mediumInstance || !mediumInstance.elements - - $(mediumInstance.elements[0]).find('code').each (index, code) -> - $(code).removeClass('has-code-lan-selector') - - $('.medium-' + mediumInstance.id).remove() - - updatePositionCodeTab: (node, tab) -> - preRects = node.getBoundingClientRect() - - tab.style.top = (preRects.top + $(window).scrollTop()) + 'px' - tab.style.left = (preRects.left + preRects.width - tab.offsetWidth) + 'px' - - getCodeLanHTML: (filter = '') -> - template = _.template(""" - <% _.forEach(lans, function(lan) { %> -
  • <%- lan %>
  • <% }); - %> - """); - - filteresLans = _.map @.languages, (it) -> it.name - - if filter.length - filteresLans = _.filter filteresLans, (it) -> - return it.indexOf(filter) != -1 - - return template({ 'lans': filteresLans }); - - searchLanguage: (tab, cb) -> - search = document.createElement('div') - - search.className = 'code-language-search' - - preRects = tab.getBoundingClientRect() - search.style.top = (preRects.top + $(window).scrollTop() + preRects.height) + 'px' - search.style.left = preRects.left + 'px' - - input = document.createElement('input') - input.setAttribute('type', 'text') - - ul = document.createElement('ul') - - ul.innerHTML = @.getCodeLanHTML() - - search.appendChild(input) - search.appendChild(ul) - - document.body.appendChild(search) - - input.focus() - - close = () -> - search.remove() - $(document.body).off('.leave-search-codelan') - - clickedInSearchBox = (target) -> - return $(search).is(target) || !!$(search).has(target).length - - $(document.body).on 'mouseup.leave-search-codelan', (e) -> - if !clickedInSearchBox(e.target) - cb(null) - close() - - $(input).on 'keyup', (e) => - filter = e.currentTarget.value - ul.innerHTML = @.getCodeLanHTML(filter) - - $(ul).on 'click', 'li', (e) -> - cb(e.currentTarget.innerText) - close() - loadLanguage: (lan) -> return new Promise (resolve) -> if !Prism.languages[lan] @@ -165,35 +53,22 @@ class WysiwygCodeHightlighterService else resolve() - removeHightlighter: (element) -> - codes = $(element).find('code') - - codes.each (index, code) -> - code.innerHTML = code.innerText - # firefox adds br instead of new lines inside replaceCodeBrToNl: (code) -> $(code).find('br').replaceWith('\n') + hightlightCode: (code) -> + @.replaceCodeBrToNl(code) + + lan = @.getLanguageInClassList(code.classList) + + if lan + @.loadLanguage(lan).then () -> Prism.highlightElement(code) + addHightlighter: (element) -> codes = $(element).find('code') - codes.each (index, code) => - @.replaceCodeBrToNl(code) - - lan = @.getLanguageInClassList(code.classList) - - if lan - @.loadLanguage(lan).then () -> Prism.highlightElement(code) - - updateCodeLanguageSelector: (mediumInstance) -> - $('.medium-' + mediumInstance.id).each (index, tab) => - node = $('.' + tab.dataset.tabId) - - if !node.length - tab.remove() - else - @.updatePositionCodeTab(node.parent()[0], tab) + codes.each (index, code) => @.hightlightCode(code) angular.module("taigaComponents") .service("tgWysiwygCodeHightlighterService", WysiwygCodeHightlighterService) diff --git a/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.directive.coffee b/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.directive.coffee new file mode 100644 index 00000000..60ab593b --- /dev/null +++ b/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.directive.coffee @@ -0,0 +1,55 @@ +### +# Copyright (C) 2014-2017 Andrey Antukh +# Copyright (C) 2014-2017 Jesús Espino Garcia +# Copyright (C) 2014-2017 David Barragán Merino +# Copyright (C) 2014-2017 Alejandro Alonso +# Copyright (C) 2014-2017 Juan Francisco Alcántara +# Copyright (C) 2014-2017 Xavi Julian +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +# File: modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.directive.coffee +### + +WysiwygCodeLightbox = (lightboxService) -> + link = (scope, el, attrs, ctrl) -> + scope.$watch 'visible', (visible) -> + if visible && !el.hasClass('open') + scope.open = true + lightboxService.open(el, null, scope.onClose) + + scope.$applyAsync () -> + textarea = el[0].querySelector('textarea') + if textarea + textarea.select() + + else if !visible && el.hasClass('open') + scope.open = false + lightboxService.close(el) + + return { + scope: { + languages: '<', + codeLanguage: '<', + code: '<', + visible: '<', + onClose: '&', + onSave: '&' + }, + link: link, + templateUrl: "components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.html" + } + +angular.module("taigaComponents") + .directive("tgWysiwygCodeLightbox", ["lightboxService", WysiwygCodeLightbox]) diff --git a/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.jade b/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.jade new file mode 100644 index 00000000..7126b3bb --- /dev/null +++ b/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.jade @@ -0,0 +1,25 @@ +tg-lightbox-close(on-close="onClose()") + +form( + ng-if="open" + ng-submit="onSave({lan: codeLanguage, code: code})" +) + h2.title(translate="COMMON.WYSIWYG.CODE_SNIPPET") + + fieldset + select(ng-model="codeLanguage") + option(value="") {{'COMMON.WYSIWYG.SELECT_LANGUAGE_PLACEHOLDER' | translate}} + option(value="remove-formating") {{'COMMON.WYSIWYG.SELECT_LANGUAGE_REMOVE_FORMATING' | translate}} + option( + ng-repeat="option in languages" + ng-value="option.name" + ) {{option.name}} + + fieldset + textarea(ng-model="code") + + fieldset + button.button-green.submit-button( + type="submit" + translate="COMMON.SAVE" + ) diff --git a/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.scss b/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.scss new file mode 100644 index 00000000..5ff6ea2f --- /dev/null +++ b/app/modules/components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.scss @@ -0,0 +1,3 @@ +tg-wysiwyg-code-lightbox textarea { + height: 350px; +} diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 927a767f..43008899 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -26,36 +26,78 @@ taiga = @.taiga bindOnce = @.taiga.bindOnce Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoader, wysiwygCodeHightlighterService, wysiwygMentionService, analytics) -> + removeSelections = () -> + if window.getSelection + if window.getSelection().empty + window.getSelection().empty(); + else if window.getSelection().removeAllRanges + window.getSelection().removeAllRanges() - isCodeBlockSelected = (range, elm) -> - return !!$(range.endContainer).parentsUntil('.editor', 'code').length + else if document.selection + document.selection.empty() - refreshCodeBlockHightlight = (elm) -> - wysiwygCodeHightlighterService.refreshCodeLanguageSelectors(elm) + getRangeCodeBlock = (range) -> + return $(range.endContainer).parentsUntil('.editor', 'code') + + isCodeBlockSelected = (range) -> + return !!getRangeCodeBlock(range).length + + removeCodeBlockAndHightlight = (selection, mediumInstance) -> + if $(selection).is('code') + code = selection + else + code = $(selection).closest('code')[0] - removeCodeBlockAndHightlight = (range, elm) -> - code = $(range.endContainer).closest('code')[0] pre = code.parentNode p = document.createElement('p') p.innerText = code.innerText pre.parentNode.replaceChild(p, pre) - - wysiwygCodeHightlighterService.removeCodeLanguageSelectors(elm) + mediumInstance.checkContentChanged(mediumInstance.elements[0]) addCodeBlockAndHightlight = (range, elm) -> pre = document.createElement('pre') code = document.createElement('code') - pre.appendChild(code) + console.log range.startContainer.parentNode.nextSibling + + if !range.startContainer.parentNode.nextSibling + $('
    ').insertAfter(range.startContainer.parentNode) + + start = range.startContainer.parentNode.nextSibling + code.appendChild(range.extractContents()) - range.insertNode(pre) - elm.checkContentChanged() + pre.appendChild(code) - wysiwygCodeHightlighterService.addCodeLanguageSelectors(elm) + start.parentNode.insertBefore(pre, start) + refreshCodeBlocks(elm) + + refreshCodeBlocks = (mediumInstance) -> + # clean empty

    content editable adds it when range.extractContents has been execute it + for mainChildren in mediumInstance.elements[0].children + if mainChildren && mainChildren.tagName.toLowerCase() == 'p' && !mainChildren.innerText.length + mainChildren.parentNode.removeChild(mainChildren) + + preList = mediumInstance.elements[0].querySelectorAll('pre') + + for pre in preList + # prevent edit a pre + pre.setAttribute('contenteditable', false) + + if pre.nextElementSibling && pre.nextElementSibling.nodeName.toLowerCase() == 'p' && !pre.nextElementSibling.children.length + pre.nextElementSibling.appendChild(document.createElement('br')) + + # add p after every pre + else if !pre.nextElementSibling || pre.nextElementSibling.nodeName.toLowerCase() != 'p' + p = document.createElement('p') + p.appendChild(document.createElement('br')) + + pre.parentNode.insertBefore(p, pre.nextSibling) + + mediumInstance.checkContentChanged(mediumInstance.elements[0]) AlignRightButton = MediumEditor.extensions.button.extend({ name: 'rtl', @@ -107,9 +149,16 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad range = MediumEditor.selection.getSelectionRange(self.document) if isCodeBlockSelected(range, this.base) - removeCodeBlockAndHightlight(range, this.base) + removeCodeBlockAndHightlight(range.endContainer, this.base) else addCodeBlockAndHightlight(range, this.base) + removeSelections() + + toolbar = this.base.getExtensionByName('toolbar') + + if toolbar + toolbar.hideToolbar() + }) CustomPasteHandler = MediumEditor.extensions.paste.extend({ @@ -141,6 +190,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad mediumInstance = null editorMedium = $el.find('.medium') editorMarkdown = $el.find('.markdown') + codeBlockSelected = null isEditOnly = !!$attrs.$attr.editonly notPersist = !!$attrs.$attr.notPersist @@ -149,12 +199,47 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.editMode = isEditOnly || false $scope.mode = $storage.get('editor-mode', 'html') $scope.markdown = '' + $scope.codeEditorVisible = false + $scope.codeLans = [] wysiwygService.loadEmojis() + wysiwygCodeHightlighterService.getLanguages().then (codeLans) -> + $scope.codeLans = codeLans + setHtmlMedium = (markdown) -> html = wysiwygService.getHTML(markdown) editorMedium.html(html) + wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]) + refreshCodeBlocks(mediumInstance) + + $scope.saveSnippet = (lan, code) -> + $scope.codeEditorVisible = false + codeBlockSelected.innerText = code + codePre = codeBlockSelected.parentNode + + if lan == 'remove-formating' + codeBlockSelected.className = '' + codePre.className = '' + + removeCodeBlockAndHightlight(codeBlockSelected, mediumInstance) + else if _.trim(code).length + if lan + codeBlockSelected.className = 'language-' + lan + codePre.className = 'language-' + lan + else + codeBlockSelected.className = '' + codePre.className = '' + + wysiwygCodeHightlighterService.hightlightCode(codeBlockSelected) + mediumInstance.checkContentChanged(mediumInstance.elements[0]) + else + codeBlockSelected.parentNode.parentNode.removeChild(codeBlockSelected.parentNode) + mediumInstance.checkContentChanged(mediumInstance.elements[0]) + + throttleChange() + + return null $scope.setMode = (mode) -> $storage.set('editor-mode', mode) @@ -191,7 +276,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad if notPersist clean() else if $scope.mode == 'html' - setHtmlMedium($scope.content) + setHtmlMedium($scope.content || null) $scope.markdown = $scope.content @@ -207,19 +292,6 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.markdown = '' editorMedium.html('') - refreshExtras = () -> - animationFrame.add () -> - if $scope.mode == 'html' - if $scope.editMode - wysiwygCodeHightlighterService.addCodeLanguageSelectors(mediumInstance) - wysiwygCodeHightlighterService.removeHightlighter(mediumInstance.elements[0]) - else - wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]) - wysiwygCodeHightlighterService.removeCodeLanguageSelectors(mediumInstance) - else - wysiwygCodeHightlighterService.removeHightlighter(mediumInstance.elements[0]) - wysiwygCodeHightlighterService.removeCodeLanguageSelectors(mediumInstance) - saveEnd = () -> $scope.saving = false @@ -305,7 +377,6 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad change = () -> if $scope.mode == 'html' updateMarkdownWithCurrentHtml() - wysiwygCodeHightlighterService.updateCodeLanguageSelector(mediumInstance) localSave($scope.markdown) @@ -415,24 +486,6 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad mediumInstance.subscribe 'editableDrop', (event) -> $scope.onUploadFile({files: event.dataTransfer.files, cb: uploadEnd}) - editorMedium.on 'keydown', (e) -> - code = if e.keyCode then e.keyCode else e.which - range = MediumEditor.selection.getSelectionRange(document) - codeBlock = isCodeBlockSelected(range, document) - selection = window.getSelection() - - if code == 13 && !e.shiftKey && selection.focusOffset == _.trimEnd(selection.focusNode.textContent).length - e.preventDefault() - document.execCommand('insertHTML', false, '


    ') - - lastP = $('#last-p').attr('id', '') - - range = document.createRange() - range.selectNodeContents(lastP[0]) - range.collapse(true); - - MediumEditor.selection.selectRange(document, range) - mediumInstance.subscribe 'editableKeydown', (e) -> code = if e.keyCode then e.keyCode else e.which @@ -452,12 +505,18 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.editMode = editMode - $scope.$applyAsync(refreshExtras) + $scope.$applyAsync () -> + wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]) + refreshCodeBlocks(mediumInstance) - $scope.$watch () -> - return $scope.mode + ":" + $scope.editMode - , () -> - $scope.$applyAsync(refreshExtras) + $(editorMedium[0]).on 'dblclick', 'pre', (e) -> + $scope.$applyAsync () -> + $scope.codeEditorVisible = true + + codeBlockSelected = e.currentTarget.querySelector('code') + + $scope.currentCodeLanguage = wysiwygCodeHightlighterService.getLanguageInClassList(codeBlockSelected.classList) + $scope.code = codeBlockSelected.innerText unwatch = $scope.$watch 'content', (content) -> if !_.isUndefined(content) @@ -466,7 +525,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad if !mediumInstance && isDraft() $scope.editMode = true - if $scope.markdown == content + if ($scope.markdown.length || content.length) && $scope.markdown == content return content = getCurrentContent() @@ -487,7 +546,6 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.$on "$destroy", () -> if mediumInstance - wysiwygCodeHightlighterService.removeCodeLanguageSelectors(mediumInstance) mediumInstance.destroy() return { diff --git a/app/modules/components/wysiwyg/wysiwyg.scss b/app/modules/components/wysiwyg/wysiwyg.scss index 4bfce409..ef9d90ea 100644 --- a/app/modules/components/wysiwyg/wysiwyg.scss +++ b/app/modules/components/wysiwyg/wysiwyg.scss @@ -90,12 +90,12 @@ } pre:not([class*="language-"]) { @include font-size(small); - background: lighten($grayer, 10%); + background: $code-bg; color: $whitish; direction: ltr; font-family: 'courier new', 'monospace'; line-height: 1.4rem; - margin-bottom: 1rem; + margin-bottom: .5rem; overflow: auto; padding: 1rem; unicode-bidi: embed; @@ -165,6 +165,12 @@ tg-wysiwyg { display: flex; margin-bottom: 2rem; + div[contenteditable="true"] *:last-child { + margin-bottom: 0; + } + pre { + cursor: pointer; + } .outdated { color: $red; } @@ -191,6 +197,7 @@ tg-wysiwyg { .medium-editor-placeholder, .markdown-editor-placeholder { color: $gray-light; + overflow: visible; padding-left: 1rem; &::after { // overwrite medium css color: $gray-light; diff --git a/app/partials/common/components/wysiwyg-toolbar.jade b/app/partials/common/components/wysiwyg-toolbar.jade index 67ca9673..502839d5 100644 --- a/app/partials/common/components/wysiwyg-toolbar.jade +++ b/app/partials/common/components/wysiwyg-toolbar.jade @@ -56,3 +56,12 @@ title="{{ 'COMMON.CANCEL' | translate }}" ) tg-svg(svg-icon="icon-close") + +tg-wysiwyg-code-lightbox.lightbox.lightbox-generic-form( + languages="codeLans" + code-language="currentCodeLanguage" + code="code" + visible="codeEditorVisible" + on-close="codeEditorVisible = false" + on-save="saveSnippet(lan, code)" +) \ No newline at end of file diff --git a/app/styles/layout/ticket-detail.scss b/app/styles/layout/ticket-detail.scss index 30af3d0a..8e0efc4f 100644 --- a/app/styles/layout/ticket-detail.scss +++ b/app/styles/layout/ticket-detail.scss @@ -59,7 +59,7 @@ .no-description { color: $gray-light; } - textarea { + .markdown { background: $white; height: 10rem; } diff --git a/app/themes/high-contrast/variables.scss b/app/themes/high-contrast/variables.scss index 1ecd40e2..e3a7a7e3 100755 --- a/app/themes/high-contrast/variables.scss +++ b/app/themes/high-contrast/variables.scss @@ -39,6 +39,7 @@ $tribe-secondary: darken($tribe-primary, 10%); $top-icon-color: $white; $dropdown-color: rgba(darken($primary-dark, 20%), 1); +$code-bg: #272822; /* Overwrite mixins */ diff --git a/app/themes/material-design/variables.scss b/app/themes/material-design/variables.scss index f975e2c3..b59deb2b 100755 --- a/app/themes/material-design/variables.scss +++ b/app/themes/material-design/variables.scss @@ -39,6 +39,7 @@ $tribe-secondary: darken($tribe-primary, 10%); $top-icon-color: $white; $dropdown-color: rgba(darken($primary-dark, 20%), 1); +$code-bg: #272822; /* Overwrite mixins */ diff --git a/app/themes/taiga/variables.scss b/app/themes/taiga/variables.scss index ebc23064..9f692c77 100755 --- a/app/themes/taiga/variables.scss +++ b/app/themes/taiga/variables.scss @@ -39,3 +39,4 @@ $tribe-secondary: darken($tribe-primary, 10%); $top-icon-color: #11241f; $dropdown-color: rgba(darken($grayer, 20%), 1); +$code-bg: #272822; \ No newline at end of file diff --git a/e2e/helpers/detail-helper.js b/e2e/helpers/detail-helper.js index 74834f39..1c180724 100644 --- a/e2e/helpers/detail-helper.js +++ b/e2e/helpers/detail-helper.js @@ -12,7 +12,12 @@ helper.title = function() { }, setTitle: function(title) { - el.$('.e2e-detail-edit').click(); + browser + .actions() + .mouseMove(el.$('.e2e-detail-edit')) + .click() + .perform(); + el.$('.e2e-title-input').clear().sendKeys(title); }, diff --git a/e2e/shared/wysiwyg.js b/e2e/shared/wysiwyg.js index 4dc3097a..1d1b8e2d 100644 --- a/e2e/shared/wysiwyg.js +++ b/e2e/shared/wysiwyg.js @@ -14,16 +14,17 @@ var shared = module.exports; function selectEditorFirstChild(elm) { browser.executeScript(function () { - // select the first paragraph var range = document.createRange(); - range.selectNode(arguments[0].firstChild); + + range.setStart(arguments[0].firstChild.firstChild, 0); + range.setEnd(arguments[0].firstChild.firstChild, arguments[0].firstChild.innerText.length); var sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); }, elm.getWebElement()); - browser.actions().mouseUp().perform(); // trigger medium events + browser.actions().mouseUp().perform(); //trigger medium events } function resetSelection() { @@ -32,7 +33,7 @@ function resetSelection() { sel.removeAllRanges(); }); - browser.actions().mouseUp().perform(); // trigger medium events + browser.actions().mouseUp().perform(); //trigger medium events } function getMarkdownText(elm) { @@ -45,34 +46,76 @@ function getMarkdownTextarea(elm) { return elm.$('.e2e-markdown-textarea');} -function htmlMode() { - $('.e2e-html-mode').click(); +function htmlMode(elm) { + elm.$('.e2e-html-mode').click(); + + return utils.common.waitElementPresent($('.e2e-markdown-mode')); } -function markdownMode() { - $('.e2e-markdown-mode').click(); +function markdownMode(elm) { + elm.$('.e2e-markdown-mode').click(); + + return utils.common.waitElementPresent($('.e2e-html-mode')); } -function saveEdition() { - $('.e2e-save-editor').click(); +function saveEdition(elm) { + return elm.$('.e2e-save-editor').click(); } function cancelEdition(elm) { - $('.e2e-cancel-editor').click(); + elm.$('.e2e-cancel-editor').click(); return browser.wait(async () => { return !!await elm.$$('.read-mode').count(); }, 3000); } +function closeMention() { + return utils.common.waitElementNotPresent($('.medium-mention')); +} + +function preventThrottle() { + return browser.sleep(250); +} + +function getSnippeLightbox(parent) { + let el = parent.$('tg-wysiwyg-code-lightbox'); + + let obj = { + el: el, + waitOpen: function() { + return utils.lightbox.open(el); + }, + waitClose: function() { + return utils.lightbox.close(el); + }, + select: function(lan) { + return el.$('select').sendKeys('javascript'); + }, + save: function() { + return el.$('button').click(); + } + }; + + return obj; +}; + async function edit(elm, elmWrapper, text = null) { await browser.wait(EC.elementToBeClickable(elm), 10000); elm.click(); - browser.sleep(200); + await browser.sleep(2000); - browser.executeScript(function () { + if (text !== null) { + await cleanWysiwyg(elm, elmWrapper); + + return elm.sendKeys(text); + } +}; + +async function cleanWysiwyg(elm, elmWrapper) { + await browser.executeScript(function () { if(arguments[0].firstChild) { var range = document.createRange(); range.setStart(arguments[0].firstChild, 0); @@ -84,26 +127,7 @@ async function edit(elm, elmWrapper, text = null) { } }, elm.getWebElement()); - if (text !== null) { - await cleanWysiwyg(elm, elmWrapper); - - return elm.sendKeys(text); - } -} - -async function cleanWysiwyg(elm, elmWrapper) { - let isHtmlMode = await elm.isDisplayed(); - - if (isHtmlMode) { - let isPresent = await $('.e2e-markdown-mode').isPresent(); - - markdownMode(); - } - var markdownTextarea = getMarkdownTextarea(elmWrapper); - - await utils.common.clear(markdownTextarea); - - return htmlMode(); + return elm.sendKeys(protractor.Key.BACK_SPACE); } shared.wysiwygTestingComments = function(parentSelector, section) { @@ -126,15 +150,15 @@ shared.wysiwygTestingComments = function(parentSelector, section) { resetSelection(); - markdownMode(); + markdownMode(editorWrapper); let markdown = await getMarkdownText(editorWrapper); expect(markdown).to.be.equal('**test**'); - htmlMode(); + await htmlMode(editorWrapper); - saveEdition(); + await saveEdition(editorWrapper); let newCommentsCounter = await historyHelper.countComments(); expect(newCommentsCounter).to.be.equal(commentsCounter+1); @@ -145,50 +169,29 @@ shared.wysiwygTestingComments = function(parentSelector, section) { await edit(editor, editorWrapper, ''); - markdownMode(); + markdownMode(editorWrapper); let markdownTextarea = getMarkdownTextarea(editorWrapper); await markdownTextarea.sendKeys('_test2_'); - htmlMode(); + await htmlMode(editorWrapper); let html = await editor.getAttribute("innerHTML"); expect(html).to.be.eql('

    test2

    \n'); - saveEdition(); + await saveEdition(editorWrapper); let newCommentsCounter = await historyHelper.countComments(); expect(newCommentsCounter).to.be.equal(commentsCounter+1); }); - it('code block', async () => { - await edit(editor, editorWrapper, ''); - - editor.sendKeys("var test = 2;"); - - selectEditorFirstChild(editor); - - $('.medium-editor-toolbar-active .medium-editor-button-last').click(); - - $('.code-language-selector').click(); - $('.code-language-search input').sendKeys('javascript'); - $('.code-language-search li').click(); - - saveEdition(); - - let lastComment = historyHelper.getComments().last(); - - let hasHightlighter = !!await lastComment.$$('.token').count(); - - expect(hasHightlighter).to.be.true; - }); - it('confirm exit when there is changes', async () => { await edit(editor, editorWrapper, ''); editor.sendKeys('text text text'); + await preventThrottle(); editor.sendKeys(protractor.Key.ESCAPE); await utils.lightbox.confirm.ok(); @@ -206,6 +209,7 @@ shared.wysiwygTestingComments = function(parentSelector, section) { await edit(editor, editorWrapper, ''); editor.sendKeys('text text text'); + await preventThrottle(); editor.sendKeys(protractor.Key.ESCAPE); browser.sleep(400); @@ -225,21 +229,21 @@ shared.wysiwygTestingComments = function(parentSelector, section) { it('mention user', async () => { await edit(editor, editorWrapper, ''); - editor.sendKeys('@use'); + editor.sendKeys('@user8'); - $$('.medium-mention li').get(2).click(); + $$('.medium-mention li').get(0).click(); let html = await editor.getAttribute("innerHTML"); expect(html).to.be.eql('

    @user8 

    '); - markdownMode(); + markdownMode(editorWrapper); let markdown = await getMarkdownText(editorWrapper); expect(markdown).to.be.equal('[@user8](/profile/user8)'); - htmlMode(); + await htmlMode(editorWrapper); await cancelEdition(editorWrapper); }); @@ -255,13 +259,13 @@ shared.wysiwygTestingComments = function(parentSelector, section) { expect(html).to.include('1f604.png'); - markdownMode(); + markdownMode(editorWrapper); let markdown = await getMarkdownText(editorWrapper); expect(markdown).to.be.equal(':smile:'); - htmlMode(); + await htmlMode(editorWrapper); await cancelEdition(editorWrapper); }); @@ -287,7 +291,7 @@ shared.wysiwygTestingComments = function(parentSelector, section) { await edit(editLast, editWrapperLast, "This is the new and updated text"); await utils.common.takeScreenshot(section, "edit comment"); - saveEdition(); + await saveEdition(editWrapperLast); //Show versions from last comment edited historyHelper.showVersionsLastComment(); @@ -318,6 +322,32 @@ shared.wysiwygTestingComments = function(parentSelector, section) { await utils.common.takeScreenshot(section, 'restored comment'); }); + + it('code block', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys("var test = 2;"); + + selectEditorFirstChild(editor); + + $('.medium-editor-toolbar-active .medium-editor-button-last').click(); + + browser.actions().doubleClick(editor.$('code')).perform(); + + let lb = getSnippeLightbox(editorWrapper); + + await lb.waitOpen(); + + await lb.select('javascript'); + await lb.save(); + await lb.waitClose(); + + let hasHightlighter = !!await editor.$$('.token').count(); + + expect(hasHightlighter).to.be.true; + + await saveEdition(editorWrapper); + }); }; shared.wysiwygTesting = function(parentSelector) { @@ -331,9 +361,14 @@ shared.wysiwygTesting = function(parentSelector) { editor.click(); } + let isHtmlMode = await editor.isDisplayed(); + if (!isHtmlMode) { + await htmlMode(editorWrapper); + } + await cleanWysiwyg(editor, editorWrapper); - markdownMode(); + markdownMode(editorWrapper); var markdownTextarea = getMarkdownTextarea(editorWrapper); @@ -341,9 +376,9 @@ shared.wysiwygTesting = function(parentSelector) { await markdownTextarea.sendKeys('test'); - htmlMode(); + await htmlMode(editorWrapper); - saveEdition(); + await saveEdition(editorWrapper); await browser.wait(EC.elementToBeClickable(editor), 10000); }); @@ -364,13 +399,13 @@ shared.wysiwygTesting = function(parentSelector) { let html = await editor.getAttribute("innerHTML"); - expect(html).to.be.eql('

    test

    '); + expect(html).to.be.eql('

    test

    \n'); - saveEdition(); + await saveEdition(editorWrapper); await edit(editor, editorWrapper); - markdownMode(); + markdownMode(editorWrapper); let markdown = await getMarkdownText(editorWrapper); @@ -380,43 +415,24 @@ shared.wysiwygTesting = function(parentSelector) { it('convert to html', async () => { await edit(editor, editorWrapper, ''); - markdownMode(); + markdownMode(editorWrapper); let markdownTextarea = getMarkdownTextarea(editorWrapper); await markdownTextarea.sendKeys('_test2_'); - htmlMode(); + htmlMode(editorWrapper); - let html = await editor.getAttribute("innerHTML"); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.eql('

    test2

    \n'); }); - it('code block', async () => { - await edit(editor, editorWrapper, ''); - - editor.sendKeys("var test = 2;"); - - selectEditorFirstChild(editor); - - $('.medium-editor-toolbar-active .medium-editor-button-last').click(); - - $('.code-language-selector').click(); - $('.code-language-search input').sendKeys('javascript'); - $('.code-language-search li').click(); - - saveEdition(); - - let hasHightlighter = !!await editor.$$('.token').count(); - - expect(hasHightlighter).to.be.true; - }); - it('save with confirmconfirm exit when there is changes', async () => { await edit(editor, editorWrapper, ''); editor.sendKeys('text text text'); + await preventThrottle(); editor.sendKeys(protractor.Key.ESCAPE); await utils.lightbox.confirm.ok(); @@ -434,6 +450,7 @@ shared.wysiwygTesting = function(parentSelector) { await edit(editor, editorWrapper, ''); editor.sendKeys('text text text'); + await preventThrottle(); editor.sendKeys(protractor.Key.ESCAPE); browser.sleep(400); @@ -451,21 +468,24 @@ shared.wysiwygTesting = function(parentSelector) { it('mention user', async () => { await edit(editor, editorWrapper, ''); - editor.sendKeys('@use'); + await editor.sendKeys('@user5'); - $$('.medium-mention li').get(2).click(); + $$('.medium-mention li').get(0).click(); + + await closeMention(); let html = await editor.getAttribute("innerHTML"); - expect(html).to.be.eql('

    @user8 

    '); - markdownMode(); + expect(html).to.be.eql('

    @user5 

    \n'); + + markdownMode(editorWrapper); let markdown = await getMarkdownText(editorWrapper); - expect(markdown).to.be.equal('[@user8](/profile/user8)'); + expect(markdown).to.be.equal('[@user5](/profile/user5)'); - htmlMode(); + htmlMode(editorWrapper); }); it('emojis', async () => { @@ -473,13 +493,15 @@ shared.wysiwygTesting = function(parentSelector) { editor.sendKeys(':smil'); - $$('.medium-mention li').get(2).click(); + await $$('.medium-mention li').get(2).click(); + + await closeMention(); let html = await editor.getAttribute("innerHTML"); expect(html).to.include('1f604.png'); - markdownMode(); + markdownMode(editorWrapper); let markdown = await getMarkdownText(editorWrapper); @@ -487,14 +509,40 @@ shared.wysiwygTesting = function(parentSelector) { }); it('cancel', async () => { - let prevHtml = await editor.getAttribute("innerHTML"); + let prevHtml = await editor.getAttribute("innerHTML"); await edit(editor, editorWrapper, 'xxx yyy zzz'); await cancelEdition(editorWrapper); - let html = await editor.getAttribute("innerHTML"); + let html = await editor.getAttribute("innerHTML"); expect(html).to.be.equal(prevHtml); }); + + it('code block', async () => { + await edit(editor, editorWrapper, ''); + + editor.sendKeys("var test = 2;"); + + selectEditorFirstChild(editor); + + $('.medium-editor-toolbar-active .medium-editor-button-last').click(); + + browser.actions().doubleClick(editor.$('code')).perform(); + + let lb = getSnippeLightbox(editorWrapper); + + await lb.waitOpen(); + + await lb.select('javascript'); + await lb.save(); + await lb.waitClose(); + + await saveEdition(editorWrapper); + + let hasHightlighter = !!await editor.$$('.token').count(); + + expect(hasHightlighter).to.be.true; + }); }; diff --git a/e2e/suites/backlog.e2e.js b/e2e/suites/backlog.e2e.js index 958ea18c..515911e0 100644 --- a/e2e/suites/backlog.e2e.js +++ b/e2e/suites/backlog.e2e.js @@ -476,7 +476,7 @@ describe('backlog', function() { expect(sprintCount).is.below(newSprintCount); }); - it.only('hide forecasting if no velocity', async function() { + it('hide forecasting if no velocity', async function() { browser.get(browser.params.glob.host + 'project/project-5/backlog'); await utils.common.waitLoader(); diff --git a/e2e/suites/wiki.e2e.js b/e2e/suites/wiki.e2e.js index 3206047c..255d8356 100644 --- a/e2e/suites/wiki.e2e.js +++ b/e2e/suites/wiki.e2e.js @@ -65,29 +65,7 @@ describe('wiki', function() { await utils.common.takeScreenshot("wiki", "deleting-the-created-link"); }); - describe('wiki editor', sharedWysiwyg.bind(this)); - - it('confirm close with ESC in lightbox', async function() { - wikiHelper.editor().enabledEditionMode(); - - browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - - await utils.lightbox.confirm.cancel(); - - let descriptionVisibility = await $('.view-wiki-content').isDisplayed(); - - expect(descriptionVisibility).to.be.false; - - wikiHelper.editor().focus(); - - browser.actions().sendKeys(protractor.Key.ESCAPE).perform(); - - await utils.lightbox.confirm.ok(); - - descriptionVisibility = await $('.view-wiki-content').isDisplayed(); - - expect(descriptionVisibility).to.be.true; - }); + describe('wiki editor', sharedWysiwyg.bind(this, '.wiki')); it('attachments', sharedDetail.attachmentTesting); @@ -96,28 +74,4 @@ describe('wiki', function() { expect(browser.getCurrentUrl()).to.be.eventually.equal(browser.params.glob.host + 'project/project-0/wiki/home'); }); - - it('Custom keyboard actions', async function(){ - wikiHelper.editor().enabledEditionMode(); - - wikiHelper.editor().setText("- aa"); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); - let text = await wikiHelper.editor().getText(); - expect(text).to.be.equal("- aa\n- "); - - wikiHelper.editor().setText("- "); - browser.actions().sendKeys(protractor.Key.ENTER).perform(); - text = await wikiHelper.editor().getText(); - expect(text).to.be.equal("\n"); - - wikiHelper.editor().setText("- bbcc"); - browser.actions().sendKeys(protractor.Key.ARROW_LEFT).sendKeys(protractor.Key.ARROW_LEFT).sendKeys(protractor.Key.ENTER).perform(); - text = await wikiHelper.editor().getText(); - expect(text).to.be.equal("- bb\n- cc"); - - wikiHelper.editor().setText("- aa"); - browser.actions().sendKeys(protractor.Key.HOME).sendKeys(protractor.Key.ENTER).perform(); - text = await wikiHelper.editor().getText(); - expect(text).to.be.equal("\n- aa"); - }); }); diff --git a/e2e/utils/common.js b/e2e/utils/common.js index d78feafe..6d59c6ec 100644 --- a/e2e/utils/common.js +++ b/e2e/utils/common.js @@ -20,6 +20,20 @@ common.getElm = function(el) { return deferred.promise; }; +common.waitElementNotPresent = function(el) { + return browser.wait(function() { + return el.isPresent().then(function(present) { + return !present; + }); + }); +}; + +common.waitElementPresent = function(el) { + return browser.wait(function() { + return el.isPresent(); + }); +}; + common.hasClass = async function (element, cls) { let classes = await element.getAttribute('class'); From 566ab02f5a06e136805c3a26e11eb6a03f1fcfc9 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 9 Mar 2017 08:56:34 +0100 Subject: [PATCH 170/175] fix import project members unit tests --- app/modules/epics/epics.service.spec.coffee | 6 +++++- .../import-project-members.controller.coffee | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/modules/epics/epics.service.spec.coffee b/app/modules/epics/epics.service.spec.coffee index 8959f1a8..0046aab8 100644 --- a/app/modules/epics/epics.service.spec.coffee +++ b/app/modules/epics/epics.service.spec.coffee @@ -251,7 +251,11 @@ describe "tgEpicsService", -> mocks.tgResources.epics.reorder .withArgs(3, {epics_order: 2, version: 1}, {1: 1}) .promise() - .resolve() + .resolve(Immutable.fromJS({ + id: 3 + epics_order: 3 + version: 2 + })) epicsService.reorderEpic(epicsService._epics.get(2), 1) diff --git a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee index f3b8f2a7..04120b8e 100644 --- a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee +++ b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee @@ -55,8 +55,6 @@ class ImportProjectMembersController user = user.set('user', externalUser) user = user.set('taigaUser', taigaUser) - console.log user - @.selectedUsers = @.selectedUsers.push(user) @.discardSuggestedUser(externalUser) From 9fd57f52addaa4a521696f25cc1602fd40e1ff2e Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 9 Mar 2017 12:50:39 +0100 Subject: [PATCH 171/175] add title in code block --- app/locales/taiga/locale-en.json | 1 + .../components/wysiwyg/wysiwyg.directive.coffee | 15 ++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 1cd43791..f29ba12f 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -215,6 +215,7 @@ }, "WYSIWYG": { "CODE_SNIPPET": "Code Snippet", + "DB_CLICK": "double click to edit", "SELECT_LANGUAGE_PLACEHOLDER": "Select Language", "SELECT_LANGUAGE_REMOVE_FORMATING": "Remove formatting", "OUTDATED": "Another person has made changes while you were editing. Check the new version on the activiy tab before you save your changes.", diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 43008899..37ee36a5 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -87,6 +87,8 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad # prevent edit a pre pre.setAttribute('contenteditable', false) + pre.setAttribute('title', $translate.instant("COMMON.WYSIWYG.DB_CLICK")) + if pre.nextElementSibling && pre.nextElementSibling.nodeName.toLowerCase() == 'p' && !pre.nextElementSibling.children.length pre.nextElementSibling.appendChild(document.createElement('br')) @@ -207,6 +209,9 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad wysiwygCodeHightlighterService.getLanguages().then (codeLans) -> $scope.codeLans = codeLans + setEditMode = (editMode) -> + $scope.editMode = editMode + setHtmlMedium = (markdown) -> html = wysiwygService.getHTML(markdown) editorMedium.html(html) @@ -271,7 +276,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad e.preventDefault() if e if !isEditOnly - $scope.editMode = false + setEditMode(false) if notPersist clean() @@ -296,7 +301,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.saving = false if !isEditOnly - $scope.editMode = false + setEditMode(false) if notPersist clean() @@ -481,7 +486,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad mediumInstance.subscribe 'focus', (event) -> $scope.$applyAsync () -> if !$scope.editMode - $scope.editMode = true + setEditMode(true) mediumInstance.subscribe 'editableDrop', (event) -> $scope.onUploadFile({files: event.dataTransfer.files, cb: uploadEnd}) @@ -503,7 +508,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad else if code == 27 editorMedium.blur() - $scope.editMode = editMode + setEditMode(editMode) $scope.$applyAsync () -> wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]) @@ -523,7 +528,7 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad $scope.outdated = isOutdated() if !mediumInstance && isDraft() - $scope.editMode = true + setEditMode(true) if ($scope.markdown.length || content.length) && $scope.markdown == content return From 2ae4bb95389068b3cf49b45c03db243fff6a93b6 Mon Sep 17 00:00:00 2001 From: xaviju Date: Wed, 8 Mar 2017 16:17:32 +0100 Subject: [PATCH 172/175] Multiple login --- app/locales/taiga/locale-en.json | 3 ++- .../includes/modules/invitation-login-form.jade | 11 ++++++++--- .../includes/modules/invitation-register-form.jade | 4 ++-- app/partials/includes/modules/login-form.jade | 11 +++++++---- app/partials/includes/modules/register-form.jade | 11 +++++++---- app/styles/components/buttons.scss | 2 +- app/styles/core/base.scss | 1 + app/styles/layout/auth.scss | 2 +- app/styles/layout/invitation.scss | 7 +++++++ app/styles/modules/auth/login-form.scss | 1 + app/styles/modules/common/contrib-plugins.scss | 8 ++++++++ 11 files changed, 45 insertions(+), 16 deletions(-) create mode 100644 app/styles/modules/common/contrib-plugins.scss diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index f29ba12f..bfb1cdcc 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -290,7 +290,8 @@ "TITLE_LINK_FORGOT_PASSWORD": "Did you forget your password?", "ACTION_ENTER": "Enter", "ACTION_SIGN_IN": "Login", - "PLACEHOLDER_AUTH_PASSWORD": "Password (case sensitive)" + "PLACEHOLDER_AUTH_PASSWORD": "Password (case sensitive)", + "ALT_LOGIN": "Or login with" }, "LOGIN_FORM": { "ERROR_AUTH_INCORRECT": "According to our Oompa Loompas, your username/email or password are incorrect.", diff --git a/app/partials/includes/modules/invitation-login-form.jade b/app/partials/includes/modules/invitation-login-form.jade index 816854c2..f9effc25 100644 --- a/app/partials/includes/modules/invitation-login-form.jade +++ b/app/partials/includes/modules/invitation-login-form.jade @@ -30,10 +30,15 @@ form.login-form ) fieldset - a.button-login.button-blackish.submit-button( + button.button-green.submit-button( type="submit" - title="{{'LOGIN_COMMON.ACTION_ENTER' | translate}}" translate="LOGIN_COMMON.ACTION_ENTER" ) + + .contrib-plugins-wrapper(ng-if="contribPlugins.length") + label(translate="LOGIN_COMMON.ALT_LOGIN") - fieldset(ng-repeat="plugin in contribPlugins|filter:{type: 'auth'}", ng-include="plugin.template") + fieldset( + ng-repeat="plugin in contribPlugins|filter:{type: 'auth'}" + ng-include="plugin.template" + ) diff --git a/app/partials/includes/modules/invitation-register-form.jade b/app/partials/includes/modules/invitation-register-form.jade index 227f9c28..00b7611e 100644 --- a/app/partials/includes/modules/invitation-register-form.jade +++ b/app/partials/includes/modules/invitation-register-form.jade @@ -44,11 +44,11 @@ form.register-form ) fieldset - a.button-register.button-blackish.submit-button( + button.button-register.button-green.submit-button( type="submit" title="{{'REGISTER_FORM.ACTION_SIGN_UP' | translate}}" translate="REGISTER_FORM.ACTION_SIGN_UP" ) - + //- Only displays terms notice when terms plugin is loaded. tg-terms-of-service-and-privacy-policy-notice diff --git a/app/partials/includes/modules/login-form.jade b/app/partials/includes/modules/login-form.jade index 96927f3b..a1582f24 100644 --- a/app/partials/includes/modules/login-form.jade +++ b/app/partials/includes/modules/login-form.jade @@ -38,9 +38,12 @@ translate="LOGIN_COMMON.ACTION_SIGN_IN" ) - fieldset( - ng-repeat="plugin in contribPlugins|filter:{type: 'auth'}" - ng-include="plugin.template" - ) + .contrib-plugins-wrapper(ng-if="contribPlugins.length") + label(translate="LOGIN_COMMON.ALT_LOGIN") + + fieldset( + ng-repeat="plugin in contribPlugins|filter:{type: 'auth'}" + ng-include="plugin.template" + ) tg-public-register-message diff --git a/app/partials/includes/modules/register-form.jade b/app/partials/includes/modules/register-form.jade index e5aa9b6b..2c58fdff 100644 --- a/app/partials/includes/modules/register-form.jade +++ b/app/partials/includes/modules/register-form.jade @@ -51,11 +51,14 @@ div.register-form-container(tg-register) title="{{'REGISTER_FORM.ACTION_SIGN_UP' | translate}}" translate="REGISTER_FORM.ACTION_SIGN_UP" ) + + .contrib-plugins-wrapper(ng-if="contribPlugins.length") + label(translate="LOGIN_COMMON.ALT_LOGIN") - fieldset( - ng-repeat="plugin in contribPlugins|filter:{type: 'auth'}" - ng-include="plugin.template" - ) + fieldset( + ng-repeat="plugin in contribPlugins|filter:{type: 'auth'}" + ng-include="plugin.template" + ) //- Only displays terms notice when terms plugin is loaded. tg-terms-of-service-and-privacy-policy-notice diff --git a/app/styles/components/buttons.scss b/app/styles/components/buttons.scss index 071feaf8..388bd258 100755 --- a/app/styles/components/buttons.scss +++ b/app/styles/components/buttons.scss @@ -8,7 +8,7 @@ color: $white; cursor: pointer; display: inline-block; - padding: .4rem 2rem; + padding: .6rem 2rem; text-align: center; text-transform: uppercase; transition: all .2s linear; diff --git a/app/styles/core/base.scss b/app/styles/core/base.scss index 7b4af1d2..e8761df4 100644 --- a/app/styles/core/base.scss +++ b/app/styles/core/base.scss @@ -47,6 +47,7 @@ body { .wrapper { display: flex; + height: 100%; min-height: $main-height; } diff --git a/app/styles/layout/auth.scss b/app/styles/layout/auth.scss index de95a0c5..aa2a972a 100644 --- a/app/styles/layout/auth.scss +++ b/app/styles/layout/auth.scss @@ -23,7 +23,7 @@ } .logo { @include font-size(xxlarge); - @include font-type(text); + @include font-type(light); color: $white; margin-bottom: 1rem; text-align: center; diff --git a/app/styles/layout/invitation.scss b/app/styles/layout/invitation.scss index cbdf801c..f2d23cdb 100644 --- a/app/styles/layout/invitation.scss +++ b/app/styles/layout/invitation.scss @@ -5,6 +5,7 @@ background-size: cover; display: flex; flex: 1; + height: 100vh; justify-content: center; z-index: 999; .invitation-container { @@ -107,4 +108,10 @@ border-right: 0; } } + + .contrib-plugins-wrapper { + label { + color: $whitish; + } + } } diff --git a/app/styles/modules/auth/login-form.scss b/app/styles/modules/auth/login-form.scss index 03e5e556..1fabdf05 100644 --- a/app/styles/modules/auth/login-form.scss +++ b/app/styles/modules/auth/login-form.scss @@ -10,6 +10,7 @@ } } } + .forgot-pass { @include font-size(small); color: $gray; diff --git a/app/styles/modules/common/contrib-plugins.scss b/app/styles/modules/common/contrib-plugins.scss new file mode 100644 index 00000000..26f0d09a --- /dev/null +++ b/app/styles/modules/common/contrib-plugins.scss @@ -0,0 +1,8 @@ +.contrib-plugins-wrapper { + margin: 1rem 0 2rem; + label { + @include font-size(small); + display: block; + margin-bottom: .5rem; + } +} From 423821f071ee4a7b0f95c31897e0f774b164bc47 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Thu, 9 Mar 2017 15:42:12 +0100 Subject: [PATCH 173/175] fix issue #4969 remove attachments from lightbox creation --- app/coffee/modules/common/lightboxes.coffee | 3 +++ app/coffee/modules/issues/lightboxes.coffee | 4 ++++ app/coffee/modules/taskboard/lightboxes.coffee | 3 +++ app/partials/includes/modules/lightbox-create-issue.jade | 1 + 4 files changed, 11 insertions(+) diff --git a/app/coffee/modules/common/lightboxes.coffee b/app/coffee/modules/common/lightboxes.coffee index a10d735d..17fe81bd 100644 --- a/app/coffee/modules/common/lightboxes.coffee +++ b/app/coffee/modules/common/lightboxes.coffee @@ -315,6 +315,9 @@ CreateEditUserstoryDirective = ($repo, $model, $rs, $rootScope, lightboxService, attachmentsToAdd = attachmentsToAdd.push(attachment) $scope.deleteAttachment = (attachment) -> + attachmentsToAdd = attachmentsToAdd.filter (it) -> + return it.get('name') != attachment.get('name') + if attachment.get("id") attachmentsToDelete = attachmentsToDelete.push(attachment) diff --git a/app/coffee/modules/issues/lightboxes.coffee b/app/coffee/modules/issues/lightboxes.coffee index 9a51992e..b8d57df3 100644 --- a/app/coffee/modules/issues/lightboxes.coffee +++ b/app/coffee/modules/issues/lightboxes.coffee @@ -78,6 +78,10 @@ CreateIssueDirective = ($repo, $confirm, $rootscope, lightboxService, $loading, $scope.addAttachment = (attachment) -> attachmentsToAdd = attachmentsToAdd.push(attachment) + $scope.deleteAttachment = (attachment) -> + attachmentsToAdd = attachmentsToAdd.filter (it) -> + return it.get('name') != attachment.get('name') + $scope.addTag = (tag, color) -> value = trim(tag.toLowerCase()) diff --git a/app/coffee/modules/taskboard/lightboxes.coffee b/app/coffee/modules/taskboard/lightboxes.coffee index df986cf8..19ecb708 100644 --- a/app/coffee/modules/taskboard/lightboxes.coffee +++ b/app/coffee/modules/taskboard/lightboxes.coffee @@ -42,6 +42,9 @@ CreateEditTaskDirective = ($repo, $model, $rs, $rootscope, $loading, lightboxSer attachmentsToAdd = attachmentsToAdd.push(attachment) $scope.deleteAttachment = (attachment) -> + attachmentsToAdd = attachmentsToAdd.filter (it) -> + return it.get('name') != attachment.get('name') + if attachment.get("id") attachmentsToDelete = attachmentsToDelete.push(attachment) diff --git a/app/partials/includes/modules/lightbox-create-issue.jade b/app/partials/includes/modules/lightbox-create-issue.jade index ec245f0a..8cf35fa7 100644 --- a/app/partials/includes/modules/lightbox-create-issue.jade +++ b/app/partials/includes/modules/lightbox-create-issue.jade @@ -43,6 +43,7 @@ form tg-attachments-simple( attachments="attachments", on-add="addAttachment(attachment)" + on-delete="deleteAttachment(attachment)" ) fieldset From 7acae1d23b85e7457f10e4641d12f1b8aab0349b Mon Sep 17 00:00:00 2001 From: Juanfran Date: Fri, 10 Mar 2017 09:45:59 +0100 Subject: [PATCH 174/175] prevent code text selection in firefox editor --- app/modules/components/wysiwyg/wysiwyg.directive.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/modules/components/wysiwyg/wysiwyg.directive.coffee b/app/modules/components/wysiwyg/wysiwyg.directive.coffee index 37ee36a5..ad7f4ddb 100644 --- a/app/modules/components/wysiwyg/wysiwyg.directive.coffee +++ b/app/modules/components/wysiwyg/wysiwyg.directive.coffee @@ -89,6 +89,9 @@ Medium = ($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoad pre.setAttribute('title', $translate.instant("COMMON.WYSIWYG.DB_CLICK")) + # prevent text selection in firefox + pre.addEventListener 'mousedown', (e) -> e.preventDefault() + if pre.nextElementSibling && pre.nextElementSibling.nodeName.toLowerCase() == 'p' && !pre.nextElementSibling.children.length pre.nextElementSibling.appendChild(document.createElement('br')) From 56b978bf836fbbb60a6220e9acfbb135a2e3bd50 Mon Sep 17 00:00:00 2001 From: xaviju Date: Mon, 6 Mar 2017 10:24:34 +0100 Subject: [PATCH 175/175] Display emails along with users on import --- .../import-project-members.controller.coffee | 4 ++++ .../import-project-members.controller.spec.coffee | 6 +++++- .../import-project-members.jade | 1 + .../select-import-user-lightbox.directive.coffee | 7 ++++--- .../select-import-user-lightbox.jade | 12 ++++++++---- 5 files changed, 22 insertions(+), 8 deletions(-) diff --git a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee index 04120b8e..c88ab21e 100644 --- a/app/modules/projects/create/import-project-members/import-project-members.controller.coffee +++ b/app/modules/projects/create/import-project-members/import-project-members.controller.coffee @@ -26,6 +26,7 @@ class ImportProjectMembersController constructor: (@currentUserService, @userService) -> @.selectImportUserLightbox = false @.warningImportUsers = false + @.displayEmailSelector = true @.cancelledUsers = Immutable.List() @.selectedUsers = Immutable.List() @.selectableUsers = Immutable.List() @@ -56,6 +57,7 @@ class ImportProjectMembersController user = user.set('taigaUser', taigaUser) @.selectedUsers = @.selectedUsers.push(user) + @.discardSuggestedUser(externalUser) @.refreshSelectableUsers() @@ -130,8 +132,10 @@ class ImportProjectMembersController users = @.getDistinctSelectedTaigaUsers() @.selectableUsers = users.map (it) -> return it.get('taigaUser') + @.displayEmailSelector = false else @.selectableUsers = @.userContacts + @.displayEmailSelector = true @.selectableUsers = @.selectableUsers.push(@.currentUser) diff --git a/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee b/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee index 88fe51b3..47be1b10 100644 --- a/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee +++ b/app/modules/projects/create/import-project-members/import-project-members.controller.spec.coffee @@ -315,6 +315,7 @@ describe "ImportProjectMembersCtrl", -> ctrl = $controller("ImportProjectMembersCtrl") ctrl.isImportMoreUsersDisabled = sinon.stub().returns(false) + ctrl.displayEmailSelector = false ctrl.userContacts = Immutable.fromJS([1]) ctrl.currentUser = 2 @@ -322,14 +323,16 @@ describe "ImportProjectMembersCtrl", -> ctrl.refreshSelectableUsers() expect(ctrl.selectableUsers.toJS()).to.be.eql([1, 2]) + expect(ctrl.displayEmailSelector).to.be.true - it "refresh selectable users array with the selected ones", () -> + it.only "refresh selectable users array with the selected ones", () -> ctrl = $controller("ImportProjectMembersCtrl") ctrl.getDistinctSelectedTaigaUsers = sinon.stub().returns(Immutable.fromJS([ {taigaUser: 1} ])) + ctrl.displayEmailSelector = false ctrl.isImportMoreUsersDisabled = sinon.stub().returns(true) @@ -339,6 +342,7 @@ describe "ImportProjectMembersCtrl", -> ctrl.refreshSelectableUsers() expect(ctrl.selectableUsers.toJS()).to.be.eql([1, 2]) + expect(ctrl.displayEmailSelector).to.be.false it "import more user disable in private project", () -> ctrl = $controller("ImportProjectMembersCtrl") diff --git a/app/modules/projects/create/import-project-members/import-project-members.jade b/app/modules/projects/create/import-project-members/import-project-members.jade index ccde76ac..ec1b51d9 100644 --- a/app/modules/projects/create/import-project-members/import-project-members.jade +++ b/app/modules/projects/create/import-project-members/import-project-members.jade @@ -73,6 +73,7 @@ limit-members-public-project="vm.limitMembersPublicProject" visible="vm.selectImportUserLightbox" user="vm.searchingUser" + display-email-selector="vm.displayEmailSelector" selectable-users="vm.selectableUsers" on-close="vm.selectImportUserLightbox = false" on-select-user="vm.confirmUser(user, taigaUser)" diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee index 218722a0..baf481f5 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee @@ -40,9 +40,10 @@ SelectImportUserLightboxDirective = (lightboxService, lightboxKeyboardNavigation onClose: '&', onSelectUser: '&', selectableUsers: '<', - isPrivate: '=', - limitMembersPrivateProject: '=', - limitMembersPublicProject: '=' + isPrivate: '<', + limitMembersPrivateProject: '<', + limitMembersPublicProject: '<', + displayEmailSelector: '<' }, templateUrl: 'projects/create/select-import-user-lightbox/select-import-user-lightbox.html' link: link diff --git a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade index 76fb27c9..cccdfabe 100644 --- a/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade +++ b/app/modules/projects/create/select-import-user-lightbox/select-import-user-lightbox.jade @@ -23,7 +23,10 @@ tg-lightbox-close(on-close="vm.onClose()") translate-values="{'members': vm.limitMembersPrivateProject.max}" ) - form(ng-if="vm.mode == 'mail'", ng-submit="vm.assignUser()") + form( + ng-if="vm.mode == 'mail'" + ng-submit="vm.assignUser()" + ) div.create-project-warning tg-svg(svg-icon="icon-exclamation") span(translate="PROJECT.IMPORT.WARNING_MAIL_USER") @@ -73,12 +76,13 @@ tg-lightbox-close(on-close="vm.onClose()") img(tg-avatar="user") a.user-list-name( href="" - title="{{user.full_name_display || user.full_name}}" - ) {{user.full_name_display || user.full_name}} + title="{{user.full_name_display || user.full_name || user}}" + ) {{user.full_name_display || user.full_name || user}} - .more-users(ng-if="filteredCollection.length >= 5") + .more-users(ng-if="filteredCollection.length > 5") span(translate="COMMON.ASSIGNED_TO.TOO_MANY") button.search-user-mode( ng-click="vm.mode = 'mail'" + ng-if="vm.displayEmailSelector" ) {{'PROJECT.IMPORT.WRITE_EMAIL' | translate}}

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