From 1d65a0029d3643a85c84b4de4ff7a1405cab0137 Mon Sep 17 00:00:00 2001 From: Yu Yongwoo Date: Mon, 28 Mar 2016 02:43:58 +0900 Subject: add Korean Language Package --- app/Locale/ko_KR/translations.php | 1110 +++++++++++++++++++++++++++++++++++++ 1 file changed, 1110 insertions(+) create mode 100644 app/Locale/ko_KR/translations.php (limited to 'app/Locale/ko_KR/translations.php') diff --git a/app/Locale/ko_KR/translations.php b/app/Locale/ko_KR/translations.php new file mode 100644 index 00000000..ad1a62d6 --- /dev/null +++ b/app/Locale/ko_KR/translations.php @@ -0,0 +1,1110 @@ +'', + //'number.thousands_separator'=>'', + 'None'=>'없음', + 'edit'=>'수정', + 'Edit'=>'수정', + 'remove'=>'삭제', + 'Remove'=>'삭제', + 'Update'=>'수정', + 'Yes'=>'예', + 'No'=>'아니오', + 'cancel'=>'취소', + 'or'=>'또는', + 'Yellow'=>'노랑', + 'Blue'=>'파랑', + 'Green'=>'초록', + 'Purple'=>'보라', + 'Red'=>'빨강', + 'Orange'=>'주황', + 'Grey'=>'회색', + 'Brown'=>'브라운', + // 'Deep Orange'=>'오아', + // 'Dark Grey'=>'', + // 'Pink'=>'', + // 'Teal'=>'', + // 'Cyan'=>'', + // 'Lime'=>'', + // 'Light Green'=>'', + // 'Amber'=>'', + 'Save'=>'저장', + 'Login'=>'로그인', + 'Official website:'=>'공식 웹사이트:', + 'Unassigned'=>'담당자 없음', + 'View this task'=>'이 할일 보기', + 'Remove user'=>'사용자 삭제', + 'Do you really want to remove this user: "%s"?'=>'사용자 "%s"를 정말로 삭제하시겠습니까?', + 'New user'=>'사용자를 추가하는 ', + 'All users'=>'모든 사용자', + 'Username'=>'사용자 이름', + 'Password'=>'패스워드', + 'Administrator'=>'관리자', + 'Sign in'=>'로그인', + 'Users'=>'사용자', + 'No user'=>'사용자가 없습니다', + 'Forbidden'=>'접근 거부', + 'Access Forbidden'=>'접속이 거부되었습니다', + 'Edit user'=>'사용자를 변경하는 ', + 'Logout'=>'로그아웃', + 'Bad username or password'=>'사용자 이름 또는 패스워드가 다릅니다.', + 'Edit project'=>'프로젝트 수정', + 'Name'=>'이름', + 'Projects'=>'프로젝트', + 'No project'=>'프로젝트가 없습니다', + 'Project'=>'프로젝트', + 'Status'=>'상태', + 'Tasks'=>'할일', + 'Board'=>'보드', + 'Actions'=>'Actions', + 'Inactive'=>'무효', + 'Active'=>'유효', + 'Add this column'=>'칼럼을 추가하는 ', + '%d tasks on the board'=>'%d개의 할일', + '%d tasks in total'=>'총 %d개의 할일', + 'Unable to update this board.'=>'보드를 갱신할 수 없었습니다', + 'Edit board'=>'보드를 변경하는 ', + 'Disable'=>'비활성화', + 'Enable'=>'유효하게 한다', + 'New project'=>'새 프로젝트', + 'Do you really want to remove this project:"%s"?'=>'프로젝트"%s"를 정말로 삭제하시겠습니까?', + 'Remove project'=>'프로젝트의 삭제', + 'Edit the board for"%s"'=>'보드"%s"를 변경하는 ', + 'All projects'=>'모든 프로젝트', + 'Change columns'=>'칼럼의 변경', + 'Add a new column'=>'칼럼의 추가', + 'Title'=>'제목', + 'Nobody assigned'=>'담당자 없음', + 'Assigned to %s'=>'담당자 %s', + 'Remove a column'=>'칼럼 삭제', + 'Remove a column from a board'=>'보드에서 칼럼 삭제', + 'Unable to remove this column.'=>'(※)컬럼을 삭제할 수 없었습니다.', + 'Do you really want to remove this column:"%s"('=>'칼럼"%s"을 삭제할까요?', + 'This action will REMOVE ALL TASKS associated to this column!'=>'이 조작은 이 컬럼에 할당된 『 모든 할일을 삭제 』합니다!', + 'Settings'=>'설정', + 'Application settings'=>'애플리케이션의 설정', + 'Language'=>'언어', + 'Webhook token:'=>'Webhook토큰:', + 'API token:'=>'API토큰:', + 'Database size:'=>'데이터베이스의 사이즈:', + 'Download the database'=>'데이터베이스의 다운로드', + 'Optimize the database'=>'데이터베이스 최적화', + '(VACUUM command)'=>'(VACUUM명령)', + '(Gzip compressed Sqlite file)'=>'(GZip명령으로 압축된 Sqlite파일)', + 'Close a task'=>'할일 마치기', + 'Edit a task'=>'할일 수정', + 'Column'=>'칼럼', + 'Color'=>'색', + 'Assignee'=>'담당자', + 'Create another task'=>'다른 할일 추가', + 'New task'=>'새로운 할일', + 'Open a task'=>'할일 열기', + 'Do you really want to open this task:"%s"?'=>'할일"%s"를 오픈합니까?', + 'Back to the board'=>'보드로 돌아가기', + 'Created on %B %e, %Y at %k:%M %p'=>'%Y-%m-%d %p %H:%M 에 작성', + 'There is nobody assigned'=>'담당자가 없습니다', + 'Column on the board:'=>'칼럼:', + 'Status is open'=>'상태 열림', + 'Status is closed'=>'상태 닫힘', + 'Close this task'=>'할일 마치기', + 'Open this task'=>'할일을 열다', + 'There is no description.'=>'설명이 없다', + 'Add a new task'=>'할일을 추가하는 ', + 'The username is required'=>'사용자 이름이 필요합니다', + 'The maximum length is%d characters'=>'최대%d문자에요!', + 'The minimum length is%d characters'=>'최소%d문자 필요합니다', + 'The password is required'=>'패스워드가 필요합니다', + 'This value must be an integer'=>'정수로 입력하세요', + 'The username must be unique'=>'사용자 이름이 이미 사용되고 있습니다', + 'The user id is required'=>'사용자 ID가 필요합니다', + 'Passwords don\'t match'=>'패스워드가 일치하지 않습니다', + 'The confirmation is required'=>'확인용 패스워드를 입력하세요', + 'The project is required'=>'프로젝트가 필요합니다', + 'The id is required'=>'ID가 필요합니다', + 'The project id is required'=>'프로젝트 ID가 필요합니다', + 'The project name is required'=>'프로젝트 이름이 필요합니다', + 'The title is required'=>'제목이 필요합니다', + 'Settings saved successfully.'=>'설정을 저장하였습니다', + 'Unable to save your settings.'=>'설정의 보존에 실패했습니다.', + 'Database optimization done.'=>'데이터베이스 최적화가 끝났습니다.', + 'Your project have been created successfully.'=>'프로젝트를 작성했습니다.', + 'Unable to create your project.'=>'프로젝트의 작성에 실패했습니다.', + 'Project updated successfully.'=>'프로젝트를 갱신했습니다.', + 'Unable to update this project.'=>'프로젝트의 갱신에 실패했습니다.', + 'Unable to remove this project.'=>'프로젝트의 삭제에 실패했습니다.', + 'Project removed successfully.'=>'프로젝트를 삭제했습니다.', + 'Project activated successfully.'=>'프로젝트를 유효로 했습니다.', + 'Unable to activate this project.'=>'프로젝트의 유효하게 못했어요.', + 'Project disabled successfully.'=>'프로젝트를 무효로 했습니다.', + 'Unable to disable this project.'=>'프로젝트의 무효화할 수 없었습니다.', + 'Unable to open this task.'=>'할일의 오픈에 실패했습니다.', + 'Task opened successfully.'=>'할일을 오픈했습니다.', + 'Unable to close this task.'=>'할일의 클로즈에 실패했습니다.', + 'Task closed successfully.'=>'할일을 마쳤습니다.', + 'Unable to update your task.'=>'할일의 갱신에 실패했습니다.', + 'Task updated successfully.'=>'할일을 갱신했습니다.', + 'Unable to create your task.'=>'할일의 추가에 실패했습니다.', + 'Task created successfully.'=>'할일을 추가했습니다.', + 'User created successfully.'=>'사용자를 추가했습니다.', + 'Unable to create your user.'=>'사용자의 추가에 실패했습니다.', + 'User updated successfully.'=>'사용자를 갱신했습니다.', + 'Unable to update your user.'=>'사용자의 갱신에 실패했습니다.', + 'User removed successfully.'=>'사용자를 삭제했습니다.', + 'Unable to remove this user.'=>'사용자 삭제에 실패했습니다.', + 'Board updated successfully.'=>'보드를 갱신했습니다.', + 'Ready'=>'준비완료', + 'Backlog'=>'요구사항', + 'Work in progress'=>'진행중', + 'Done'=>'완료', + 'Application version:'=>'애플리케이션의 버전:', + 'Completed on%B%e,%Y at%k:%M%p'=>'%Y/%m/%d%H:%M에 완료', + '%B%e,%Y at%k:%M%p'=>'%Y/%m/%d%H:%M', + 'Date created'=>'작성일', + 'Date completed'=>'완료일', + 'Id'=>'ID', + '%d closed tasks'=>'%d개의 마친 할일', + 'No task for this project'=>'이 프로젝트에 할일이 없습니다', + 'Public link'=>'공개 접속 링크', + 'Change assignee'=>'담당자 변경', + 'Change assignee for the task "%s"'=>'할일 "%s"의 담당자를 변경', + 'Timezone'=>'시간대', + 'Sorry, I didn\'t find this information in my database!'=>'데이터베이스에서 정보가 발견되지 않았습니다!', + 'Page not found'=>'페이지가 발견되지 않는다', + 'Complexity'=>'복잡도', + 'Task limit'=>'할일 수 제한', + 'Task count'=>'할일 수', + 'User'=>'사용자', + 'Comments'=>'댓글', + 'Write your text in Markdown'=>'Markdown 사용', + 'Leave a comment'=>'댓글 남기기', + 'Comment is required'=>'댓글을 입력하세요', + 'Leave a description'=>'설명을 입력하세요', + 'Comment added successfully.'=>'의견을 추가했습니다.', + 'Unable to create your comment.'=>'댓글의 추가에 실패했습니다.', + 'Edit this task'=>'할일 수정', + 'Due Date'=>'마감일', + 'Invalid date'=>'날짜가 무효입니다', + 'Must be done before %B %e, %Y'=>'%Y-%m-%d %p %H:%M 까지 완료', + '%B%e,%Y'=>'%Y%B%e', + '%b%e,%Y'=>'%Y%b%e', + 'Automatic actions'=>'자동액션 관리', + 'Your automatic action have been created successfully.'=>'자동 액션을 작성했습니다.', + 'Unable to create your automatic action.'=>'자동 액션의 작성에 실패했습니다.', + 'Remove an action'=>'자동 액션의 삭제', + 'Unable to remove this action.'=>'자동 액션의 삭제에 실패했습니다.', + 'Action removed successfully.'=>'자동 액션의 삭제에 성공했어요.', + 'Automatic actions for the project"%s"'=>'프로젝트"%s"의 자동 액션', + 'Defined actions'=>'정의된 자동 액션', + 'Add an action'=>'자동 액션 추가', + 'Event name'=>'이벤트 이름', + 'Action name'=>'액션 이름', + 'Action parameters'=>'액션의 바로미터', + 'Action'=>'액션', + 'Event'=>'이벤트', + 'When the selected event occurs execute the corresponding action.'=>'선택된 이벤트가 발생했을 때 대응하는 액션을 실행한다.', + 'Next step'=>'다음 단계', + 'Define action parameters'=>'액션의 바로미터', + 'Save this action'=>'이 액션을 보존하는 ', + 'Do you really want to remove this action:"%s"('=>'자동 액션"%s"을 삭제할까요?', + 'Remove an automatic action'=>'자동 액션의 삭제', + 'Assign the task to a specific user'=>'할일 담당자를 할당', + 'Assign the task to the person who does the action'=>'액션을 일으킨 사용자를 담당자이자', + 'Duplicate the task to another project'=>' 다른 프로젝트에 할일을 복제하는 ', + 'Move a task to another column'=>'할일을 다른 칼럼에 이동하는 ', + 'Task modification'=>'할일 변경', + 'Task creation'=>'할일을 만들', + 'Closing a task'=>'할일을 닫혔다', + 'Assign a color to a specific user'=>'색을 사용자에 할당', + 'Column title'=>'칼럼의 제목', + 'Position'=>'위치', + 'Move Up'=>'위에 움직이는 ', + 'Move Down'=>'아래로 움직이는 ', + 'Duplicate to another project'=>'다른 프로젝트에 복사', + 'Duplicate'=>'복사', + 'link'=>'링크', + 'Comment updated successfully.'=>'댓글을 갱신했습니다.', + 'Unable to update your comment.'=>'댓글의 갱신에 실패했습니다.', + 'Remove a comment'=>'댓글 삭제', + 'Comment removed successfully.'=>'댓글을 삭제했습니다.', + 'Unable to remove this comment.'=>'댓글의 삭제에 실패했습니다.', + 'Do you really want to remove this comment?'=>'댓글을 삭제합니까?', + 'Only administrators or the creator of the comment can access to this page.'=>'관리자나 의견 작성자만이 이 페이지 액세스 할 수 있습니다', + 'Current password for the user "%s"'=>'사용자 "%s"의 현재 패스워드', + 'The current password is required'=>'현재의 패스워드를 입력하세요', + 'Wrong password'=>'패스워드가 다릅니다', + 'Unknown'=>'불명', + 'Last logins'=>'마지막 로그인', + 'Login date'=>'로그인 일시', + 'Authentication method'=>'인증 방법', + 'IP address'=>'IP 주소', + 'User agent'=>'사용자 에이전트', + 'Persistent connections'=>'세션', + 'No session.'=>'세션 없음', + 'Expiration date'=>'유효기간', + 'Remember Me'=>'자동 로그인', + 'Creation date'=>'작성일', + 'Everybody'=>'모두', + 'Open'=>'열림', + 'Closed'=>'닫힘', + 'Search'=>'검색', + 'Nothing found.'=>'결과가 없습니다', + 'Due date'=>'마감일', + 'Others formats accepted: %s and %s'=>' 다른 서식: %s 또는 %s', + 'Description'=>'설명', + '%d comments'=>'%d개의 댓글', + '%d comment'=>'%d개의 댓글', + 'Email address invalid'=>'메일 주소가 올바르지 않습니다.', + //'Your external account is not linked anymore to your profile.'=>'', + //'Unable to unlink your external account.'=>'', + //'External authentication failed'=>'', + //'Your external account is linked to your profile successfully.'=>'', + 'Email'=>'이메일', + 'Link my Google Account'=>'Google계정을 연결하는 ', + 'Unlink my Google Account'=>'Google계정의 링크를 해제하는 ', + 'Login with my Google Account'=>'Google계정으로 로그인 한다', + 'Project not found.'=>'프로젝트가 발견되지 않습니다.', + 'Task removed successfully.'=>'할일을 삭제했습니다.', + 'Unable to remove this task.'=>'할일 삭제에 실패했습니다.', + 'Remove a task'=>'할일 삭제', + 'Do you really want to remove this task:"%s"('=>'할일"%s"을 삭제할까요?', + 'Assign automatically a color based on a category'=>'카테고리에 바탕을 두고 색을 바꾸고', + 'Assign automatically a category based on a color'=>'색에 바탕을 두고 카테고리를 바꾸었다', + 'Task creation or modification'=>'할일의 작성 또는 변경', + 'Category'=>'카테고리', + 'Category:'=>'카테고리:', + 'Categories'=>'카테고리', + 'Category not found.'=>'카테고리가 발견되지 않습니다', + 'Your category have been created successfully.'=>'카테고리를 작성했습니다.', + 'Unable to create your category.'=>'카테고리의 작성에 실패했습니다.', + 'Your category have been updated successfully.'=>'카테고리를 갱신했습니다.', + 'Unable to update your category.'=>'카테고리의 갱신에 실패했습니다.', + 'Remove a category'=>'카테고리의 삭제', + 'Category removed successfully.'=>'카테고리를 삭제했습니다.', + 'Unable to remove this category.'=>'카테고리를 삭제할 수 없었습니다.', + 'Category modification for the project"%s"'=>'프로젝트"%s"의 카테고리의 변경', + 'Category Name'=>'카테고리 이름', + 'Add a new category'=>'카테고리의 추가', + 'Do you really want to remove this category:"%s"('=>'카테고리"%s"을 삭제할까요?', + 'All categories'=>'모든 카테고리', + 'No category'=>'카테고리 없음', + 'The name is required'=>'이름을 입력하십시오', + 'Remove a file'=>'파일 삭제', + 'Unable to remove this file.'=>'파일 삭제에 실패했습니다.', + 'File removed successfully.'=>'파일을 삭제했습니다.', + 'Attach a document'=>'문서 첨부', + 'Do you really want to remove this file: "%s"?'=>'파일 "%s" 을 삭제할까요?', + 'Attachments'=>'첨부', + 'Edit the task'=>'할일 수정', + 'Edit the description'=>'설명 수정', + 'Add a comment'=>'댓글 추가', + 'Edit a comment'=>'댓글 수정', + 'Summary'=>'개요', + 'Time tracking'=>'시간 추적', + 'Estimate:'=>'예측:', + 'Spent:'=>'경과:', + 'Do you really want to remove this sub-task?'=>'서브 할일을 삭제합니까?', + 'Remaining:'=>'나머지:', + 'hours'=>'시간', + 'spent'=>'경과', + 'estimated'=>'예측', + 'Sub-Tasks'=>'서브 할일', + 'Add a sub-task'=>'서브 할일 추가', + 'Original estimate'=>'최초 예측시간', + 'Create another sub-task'=>'다음 서브 할일 추가', + 'Time spent'=>'경과시간', + 'Edit a sub-task'=>'서브 할일을 변경하는 ', + 'Remove a sub-task'=>'서브 할일을 삭제하는 ', + 'The time must be a numeric value'=>'시간은 숫자로 입력하세요', + 'Todo'=>'할일 예정', + 'In progress'=>'할일 중', + 'Sub-task removed successfully.'=>'서브 할일을 삭제했습니다.', + 'Unable to remove this sub-task.'=>'서브 할일의 삭제가 실패했습니다.', + 'Sub-task updated successfully.'=>'서브 할일을 갱신했습니다.', + 'Unable to update your sub-task.'=>'서브 할일의 경신에 실패했습니다.', + 'Unable to create your sub-task.'=>'서브 할일의 추가에 실패했습니다.', + 'Sub-task added successfully.'=>'서브 할일을 추가했습니다.', + 'Maximum size: '=>'최대: ', + 'Unable to upload the file.'=>'파일 업로드에 실패했습니다.', + 'Display another project'=>'프로젝트 보기', + 'Login with my Github Account'=>'Github계정으로 로그인 한다', + 'Link my Github Account'=>'Github계정을 연결하는 ', + 'Unlink my Github Account'=>'Github어카운트와의 링크를 해제하는 ', + 'Created by %s'=>'작성자 %s', + 'Last modified on %B %e, %Y at %k:%M %p'=>'%Y-%m-%d %p %H:%M 에 변경', + 'Tasks Export'=>'할일 내보내기', + 'Tasks exportation for"%s"'=>'"%s"의 할일 출력', + 'Start Date'=>'시작일', + 'End Date'=>'종료일', + 'Execute'=>'실행', + 'Task Id'=>'할일 ID', + 'Creator'=>'작성자', + 'Modification date'=>'변경 일', + 'Completion date'=>'완료일', + 'Clone'=>'복사', + 'Project cloned successfully.'=>'프로젝트를 복제했습니다.', + 'Unable to clone this project.'=>'프로젝트의 복제에 실패했습니다.', + 'Enable email notifications'=>'이메일 알림 설정', + 'Task position:'=>'할일 위치:', + 'The task#%d have been opened.'=>'할일#%d를 오픈했습니다.', + 'The task#%d have been closed.'=>'할일#%d을 닫혔습니다.', + 'Sub-task updated'=>'서브 할일 갱신', + 'Title:'=>'제목:', + 'Status:'=>'상태:', + 'Assignee:'=>'담당:', + 'Time tracking:'=>'시간 계측:', + 'New sub-task'=>'새로운 서브 할일', + 'New attachment added"%s"'=>'첨부 파일"%s"가 추가되었습니다', + 'Comment updated'=>'댓글가 갱신되었습니다', + 'New comment posted by %s'=>'"%s"님이 댓글을 추가하였습니다', + 'New attachment'=>' 새로운 첨부 파일', + 'New comment'=>' 새로운 댓글', + 'New subtask'=>' 새로운 서브 할일', + 'Subtask updated'=>'서브 할일 갱신', + 'Task updated'=>'할일 업데이트', + 'Task closed'=>'할일 마침', + 'Task opened'=>'할일 시작', + 'I want to receive notifications only for those projects:'=>'다음 프로젝트의 알림만 받겠습니다:', + 'view the task on Kanboard'=>'Kanboard에서 할일을 본다', + 'Public access'=>'공개 접속 설정', + 'User management'=>'사용자 관리', + 'Active tasks'=>'활성화된 할일', + 'Disable public access'=>'공개 접속 비활성화', + 'Enable public access'=>'공개 접속 활성화', + 'Public access disabled'=>'공개 접속 불가', + 'Do you really want to disable this project:"%s"('=>'"%s"를 무효로 합니까?', + 'Do you really want to enable this project:"%s"('=>'"%s"를 유효하게 합니까?', + 'Project activation'=>'프로젝트의 액티베ー션', + 'Move the task to another project'=>'할일별 프로젝트에 옮기', + 'Move to another project'=>'다른 프로젝트로 이동', + 'Do you really want to duplicate this task?'=>'할일을 복제합니까?', + 'Duplicate a task'=>'할일 복사', + 'External accounts'=>'외부 계정', + 'Account type'=>'계정종류', + 'Local'=>'로컬', + 'Remote'=>'원격', + 'Enabled'=>'활성화', + 'Disabled'=>'비활성화', + 'Username:'=>'사용자명', + 'Name:'=>'이름:', + 'Email:'=>'이메일:', + 'Notifications:'=>'알림:', + 'Notifications'=>'알림', + 'Account type:'=>'계정종류:', + 'Edit profile'=>'프로필 변경', + 'Change password'=>'패스워드 변경', + 'Password modification'=>'패스워드 변경', + 'External authentications'=>'외부 인증', + 'Google Account'=>'Google 계정', + 'Github Account'=>'Github 계정', + 'Never connected.'=>'접속기록없음', + 'No account linked.'=>'계정이 링크하지 않습니다.', + 'Account linked.'=>'계정이 링크했습니다.', + 'No external authentication enabled.'=>'외부 인증이 설정되어 있지 않습니다.', + 'Password modified successfully.'=>'패스워드를 변경했습니다.', + 'Unable to change the password.'=>'비밀 번호가 변경할 수 없었습니다.', + 'Change category for the task "%s"'=>'할일 "%s"의 카테고리의 변경', + 'Change category'=>'카테고리 수정', + '%s updated the task %s'=>'%s이 할일 %s을 업데이트했습니다', + '%s opened the task%s'=>'%s이 할일%s을 오픈했습니다', + '%s moved the task %s to the position #%d in the column "%s"'=>'%s이 할일%s을 위치#%d컬럼%s로 옮겼습니다', + '%s moved the task %s to the column "%s"'=>'%s이 할일 %s을 칼럼 "%s" 로 옮겼습니다', + '%s created the task %s'=>'%s이 할일%s을 추가했습니다', + '%s closed the task %s'=>'%s이 할일%s을 마쳤습니다', + '%s created a subtask for the task %s'=>'%s이 할일%s의 서브 할일을 추가했습니다', + '%s updated a subtask for the task %s'=>'%s이 할일%s의 서브 할일을 갱신했습니다', + 'Assigned to %s with an estimate of %s/%sh'=>'담당자 %s에게 예상 %s/%sh로 할당되었습니다', + 'Not assigned, estimate of%sh'=>'담당자 없이 예상%sh로 변경되었습니다', + '%s updated a comment on the task %s'=>'%s이 할일%s의 댓글을 수정했습니다', + '%s commented the task %s'=>'%s이 할일%s에 댓글을 남겼습니다', + '%s\'s activity'=>'%s의 활동', + 'RSS feed'=>'RSS피드', + '%s updated a comment on the task#%d'=>'%s이 할일#%d의 댓글을 갱신했습니다', + '%s commented on the task#%d'=>'%s이 할일#%d에 말했습니다', + '%s updated a subtask for the task#%d'=>'%s이 할일#%d의 서브 할일을 갱신했습니다', + '%s created a subtask for the task#%d'=>'%s이 할일#%d의 서브 할일을 추가했습니다', + '%s updated the task #%d'=>'%s이 할일#%d을 갱신했습니다', + '%s created the task #%d'=>'%s이 할일#%d을 추가했습니다', + '%s closed the task #%d'=>'%s이 할일#%d을 닫혔습니다', + '%s open the task #%d'=>'%s이 할일#%d를 오픈했습니다', + '%s moved the task #%d to the column "%s"'=>'%s이 할일#%d을 칼럼"%s"로 옮겼습니다', + '%s moved the task #%d to the position%d in the column "%s"'=>'%s이 할일#%d을 위치%d컬럼"%s"이동했습니다', + 'Activity'=>'활동', + 'Default values are"%s"'=>'기본 값은 "%s"', + 'Default columns for new projects(Comma-separated)'=>'신규 프로젝트의 기본 컬럼(쉼표로 구분하여 입력)', + 'Task assignee change'=>'담당자의 변경', + '%s change the assignee of the task#%d to%s'=>'%s이 할일#%d의 담당을%s로 변경했습니다', + '%s changed the assignee of the task %s to %s'=>'%s이 할일 %s의 담당을 %s로 변경했습니다', + 'New password for the user "%s"'=>'사용자 "%s"의 새로운 패스워드', + 'Choose an event'=>'행사의 선택', + 'Create a task from an external provider'=>'할일을 외부 서비스로부터 작성하는 ', + 'Change the assignee based on an external username'=>'담당자를 외부 서비스에 바탕을 두고 변경하는 ', + 'Change the category based on an external label'=>'카테고리를 외부 서비스에 바탕을 두고 변경하는 ', + 'Reference'=>'참조', + 'Reference:%s'=>'참조:%s', + 'Label'=>'라벨', + 'Database'=>'데이터베이스', + 'About'=>'정보', + 'Database driver:'=>'데이터베이스 드라이버:', + 'Board settings'=>'기본 설정', + 'URL and token'=>'URL와 토큰', + 'Webhook settings'=>'Webhook의 설정', + 'URL for task creation:'=>'Task작성의 URL:', + 'Reset token'=>'토큰 리셋', + 'API endpoint:'=>'API엔드 포인트:', + 'Refresh interval for private board'=>'비공개 보드의 갱신 빈도', + 'Refresh interval for public board'=>'공개 보드의 갱신 빈도', + 'Task highlight period'=>'할일의 하이라이트 기간', + 'Period(in second)to consider a task was modified recently(0 to disable, 2 days by default)'=>'할일이 최근 업데이트된 것으로 보면 기간(0은 하이라이트 무효 디폴트 2일)', + 'Frequency in second(60 seconds by default)'=>'초수(디폴트 60초)', + 'Frequency in second(0 to disable this feature, 10 seconds by default)'=>'초수(0은 기능을 무효화, 기본 10초)', + 'Application URL'=>'애플리케이션의 URL', + 'Example:http://example.kanboard.net/(used by email notifications)'=>'Exemple:http://exemple.kanboard.net/(Email통지에 이용)', + 'Token regenerated.'=>'토큰이 다시 생성되었습니다.', + 'Date format'=>'데이터 포맷', + 'ISO format is always accepted, example:"%s"and"%s"'=>'ISO포맷이 입력할 수 있습니다(예:%s또는%s)', + 'New private project'=>'새 비공개 프로젝트', + 'This project is private'=>'이 프로젝트는 비공개입니다', + 'Type here to create a new sub-task'=>'서브 할일을 추가하려면 여기에 입력하세요', + 'Add'=>'추가', + 'Estimated time: %s hours'=>'예상시간: %s시간', + 'Time spent: %s hours'=>'경과: %s시간', + 'Started on%B%e,%Y'=>'시작%Y/%m/%d', + 'Start date'=>'시작시간', + 'Time estimated'=>'예상시간', + 'There is nothing assigned to you.'=>'할일이 없습니다. 옆사람의 일을 도와주면 어떨까요?', + 'My tasks'=>'내 할일', + 'Activity stream'=>'활동기록', + 'Dashboard'=>'대시보드', + 'Confirmation'=>'확인', + 'Allow everybody to access to this project'=>'모든 사람이 이 프로젝트에 접근할 수 있도록 합니다', + 'Everybody have access to this project.'=>'누구나 이 프로젝트에 액세스 할 수 있습니다', + 'Webhooks'=>'Webhook', + 'API'=>'API', + 'Create a comment from an external provider'=>'외부 서비스로부터 의견을 작성한다', + 'Project management'=>'프로젝트 관리', + 'My projects'=>'내 프로젝트', + 'Columns'=>'칼럼', + 'Task'=>'할일', + 'Your are not member of any project.'=>'어떤 프로젝트에도 속하지 않습니다.', + 'Percentage'=>'비중', + 'Number of tasks'=>'할일 수', + 'Task distribution'=>'할일 분포', + 'Reportings'=>'리포트', + 'Task repartition for"%s"'=>'"%s"의 할일 분포', + 'Analytics'=>'분석', + 'Subtask'=>'서브 할일', + 'My subtasks'=>'내 서브 할일', + 'User repartition'=>'담당자 분포', + 'User repartition for"%s"'=>'"%s"의 담당자 분포', + 'Clone this project'=>'이 프로젝트를 복제하는 ', + 'Column removed successfully.'=>'(※)컬럼을 삭제했습니다', + 'Not enough data to show the graph.'=>'그래프를 선묘화하려면 나왔지만 부족합니다', + 'Previous'=>' 돌아가', + 'The id must be an integer'=>'id은 숫자가 아니면 안 됩니다', + 'The project id must be an integer'=>'project id은 숫자가 아니면 안 됩니다', + 'The status must be an integer'=>'status는 숫자지 않으면 안 됩니다', + 'The subtask id is required'=>'subtask id가 필요합니다', + 'The subtask id must be an integer'=>'subtask id은 숫자가 아니면 안 됩니다', + 'The task id is required'=>'task id가 필요합니다', + 'The task id must be an integer'=>'task id은 숫자가 아니면 안 됩니다', + 'The user id must be an integer'=>'user id은 숫자가 아니면 안 됩니다', + 'This value is required'=>'이 값이 필요합니다', + 'This value must be numeric'=>'이 값은 숫자가 아니면 안 됩니다', + 'Unable to create this task.'=>'이 할일을 작성할 수 없었습니다', + 'Cumulative flow diagram'=>'축적 플로', + 'Cumulative flow diagram for"%s"'=>'"%s"의 축적 플로', + 'Daily project summary'=>'일시 프로젝트 개요', + 'Daily project summary export'=>'일시 프로젝트 개요의 출력', + 'Daily project summary export for"%s"'=>'"%s"의 일시 프로젝트 개요의 출력', + 'Exports'=>'출력', + 'This export contains the number of tasks per column grouped per day.'=>'이 출력은 날짜의 칼람별 할일 수를 집계한 것입니다', + 'Nothing to preview...'=>'미리보기가 없습니다', + 'Preview'=>'미리보기', + 'Write'=>'쓰기', + 'Active swimlanes'=>'액티브한 스윔레인', + 'Add a new swimlane'=>' 새로운 스윔레인', + 'Change default swimlane'=>'기본 스윔레인의 변경', + 'Default swimlane'=>'기본 스윔레인', + 'Do you really want to remove this swimlane:"%s"('=>'이 스윔레인"%s"를 정말로 삭제하시겠습니까?', + 'Inactive swimlanes'=>'인터랙티브한 스윔레인', + 'Remove a swimlane'=>'스윔레인의 삭제', + 'Rename'=>'이름 변경', + 'Show default swimlane'=>'기본 스윔레인의 표시', + 'Swimlane modification for the project"%s"'=>'"%s"에 대한 스윔레인 변경', + 'Swimlane not found.'=>'스윔레인이 발견되지 않습니다.', + 'Swimlane removed successfully.'=>'스윔레인을 삭제했습니다.', + 'Swimlanes'=>'스윔레인', + 'Swimlane updated successfully.'=>'스윔레인을 갱신했습니다.', + 'The default swimlane have been updated successfully.'=>'기본 스윔레인을 갱신했습니다.', + 'Unable to create your swimlane.'=>'스윔레인을 추가할 수 없었습니다.', + 'Unable to remove this swimlane.'=>'스윔레인을 삭제할 수 없었습니다.', + 'Unable to update this swimlane.'=>'스윔레인을 갱신할 수 없었습니다.', + 'Your swimlane have been created successfully.'=>'스윔레인이 작성되었습니다.', + 'Example:"Bug, Feature Request, Improvement"'=>'예:버그, 기능, 개선', + 'Default categories for new projects(Comma-separated)'=>' 새로운 프로젝트의 기본적 카테고리(쉼표 분리)', + 'Integrations'=>'연계', + 'Integration with third-party services'=>'외부 서비스 연계', + 'Subtask Id'=>'서브 할일 Id', + 'Subtasks'=>'서브 할일', + 'Subtasks Export'=>'서브 할일 출력', + 'Subtasks exportation for"%s"'=>'"%s"의 서브 할일 출력', + 'Task Title'=>'할일 제목', + 'Untitled'=>'제목 없음', + 'Application default'=>'애플리케이션 기본', + 'Language:'=>'언어:', + 'Timezone:'=>'시간대:', + 'All columns'=>'모든 칼럼', + 'Calendar'=>'달력', + 'Next'=>'다음에 ', + '#%d'=>'#%d', + 'All swimlanes'=>'모든 스윔레인', + 'All colors'=>'모든 색', + 'Moved to column%s'=>'칼럼%s로 이동했습니다', + 'Change description'=>'설명 수정', + 'User dashboard'=>'대시보드', + 'Allow only one subtask in progress at the same time for a user'=>'한 사용자에 대한 하나의 할일만 진행 중에 가능합니다', + 'Edit column"%s"'=>'칼럼"%s"의 편집', + 'Select the new status of the subtask:"%s"'=>'서브 할일"%s"의 위상을 선택', + 'Subtask timesheet'=>'서브 할일 타임시트', + 'There is nothing to show.'=>'기록이 없습니다', + 'Time Tracking'=>'타임 트레킹', + 'You already have one subtask in progress'=>'이미 진행 중인 서브 할일가 있습니다.', + 'Which parts of the project do you want to duplicate?'=>'프로젝트의 무엇을 복제합니까?', + //'Disallow login form'=>'', + 'Start'=>'시작', + 'End'=>'종료', + 'Task age in days'=>'할일이 생긴 시간', + 'Days in this column'=>'이 칼럼에 있는 시간', + '%dd'=>'%d일', + 'Add a link'=>'링크 추가', + 'Add a new link'=>' 새로운 링크 추가', + 'Do you really want to remove this link:"%s"('=>'링크"%s"를 정말로 삭제하시겠습니까?', + 'Do you really want to remove this link with task#%d?'=>'이 링크와 할일#%d을 삭제할까요?', + 'Field required'=>'필드가 필요합니다', + 'Link added successfully.'=>'링크를 추가했습니다.', + 'Link updated successfully.'=>'링크를 갱신했습니다.', + 'Link removed successfully.'=>'링크를 삭제했습니다.', + 'Link labels'=>'링크 라벨', + 'Link modification'=>'링크의 변경', + 'Links'=>'링크', + 'Link settings'=>'링크 설정', + 'Opposite label'=>'반대의 라벨', + 'Remove a link'=>'라벨의 삭제', + 'Task\'s links'=>'할일의 라벨', + 'The labels must be different'=>' 다른 라벨을 지정하세요', + 'There is no link.'=>'링크가 없습니다', + 'This label must be unique'=>'라벨은 독특할 필요가 있습니다', + 'Unable to create your link.'=>'링크를 작성할 수 없었습니다.', + 'Unable to update your link.'=>'링크를 갱신할 수 없었습니다.', + 'Unable to remove this link.'=>'링크를 삭제할 수 없었습니다.', + 'relates to'=>'연관 링크', + 'blocks'=>'다음을 딜레이하는', + 'is blocked by'=>'다음 때문에 딜레이되는', + 'duplicates'=>'다음과 중복하는', + 'is duplicated by'=>'다음에 중복되는', + 'is a child of'=>'다음의 하위 할일', + 'is a parent of'=>'다음의 상위 할일', + 'targets milestone'=>'다음의 이정표를 목표로 하는', + 'is a milestone of'=>'다음의 이정표인', + 'fixes'=>'다음을 수정하는', + 'is fixed by'=>'다음에 의해 수정되는', + 'This task'=>'이 할일의 ', + '<1h'=>'<1시간', + '%dh'=>'%d시간', + '%b%e'=>'%b/%e', + 'Expand tasks'=>'할일 크게', + 'Collapse tasks'=>'할일 작게', + 'Expand/collapse tasks'=>'할일 크게/작게', + 'Close dialog box'=>'다이얼로그를 닫습니다', + 'Submit a form'=>'제출', + 'Board view'=>'보드 뷰', + 'Keyboard shortcuts'=>'키보드 숏 컷', + 'Open board switcher'=>'보드 전환을 열', + 'Application'=>'애플리케이션', + 'since %B %e, %Y at %k:%M %p'=>'%Y-%m-%d %p %H:%M', + 'Compact view'=>'컴팩트 뷰', + 'Horizontal scrolling'=>'세로 스크롤', + 'Compact/wide view'=>'컴팩트/와이드 뷰', + 'No results match:'=>'결과가 일치하지 않았습니다', + 'Currency'=>'통화', + 'Files'=>'파일', + 'Images'=>'이미지', + 'Private project'=>'개인 프로젝트', + 'AUD-Australian Dollar'=>'AUD-호주 달러', + 'CAD-Canadian Dollar'=>'CAD-캐나다 달러', + 'CHF-Swiss Francs'=>'CHF-스위스 프랑', + 'Custom Stylesheet'=>'커스텀 스타일 시트', + 'download'=>'다운로드', + 'EUR-Euro'=>'EUR-유로', + 'GBP-British Pound'=>'GBP-독 파운드', + 'INR-Indian Rupee'=>'INR-이루피', + 'JPY-Japanese Yen'=>'JPY-일본 엔', + 'NZD-New Zealand Dollar'=>'NZD-NZ달러', + 'RSD-Serbian dinar'=>'RSD-세르비아 데나ー루', + 'USD-US Dollar'=>'USD-미국 달러', + 'Destination column'=>'이동 후 칼럼', + 'Move the task to another column when assigned to a user'=>'사용자의 할당을 하면 할일을 다른 칼럼에 이동', + 'Move the task to another column when assignee is cleared'=>'사용자의 할당이 없어지면 할일을 다른 칼럼에 이동', + 'Source column'=>'이동 전 칼럼', + 'Transitions'=>'이력', + 'Executer'=>'실행자', + 'Time spent in the column'=>'칼럼에 있던 시간', + 'Task transitions'=>'할일 천이', + 'Task transitions export'=>'할일 천이를 출력', + 'This report contains all column moves for each task with the date, the user and the time spent for each transition.'=>'이 리포트는 할일의 칼럼 간 이동을 시간, 유저, 경과 시간과 함께 기록한 것입니다.', + 'Currency rates'=>'환율', + 'Rate'=>'레이트', + 'Change reference currency'=>'현재의 기축 통화', + 'Add a new currency rate'=>' 새로운 통화 환율을 추가', + 'Reference currency'=>'기축 통화', + //'The currency rate have been added successfully.'=>'', + 'Unable to add this currency rate.'=>'이 통화 환율을 추가할 수 없습니다.', + 'Webhook URL'=>'Webhook URL', + '%s remove the assignee of the task %s'=>'%s이 할일 %s의 담당을 삭제했습니다', + 'Enable Gravatar images'=>'Gravatar이미지를 활성화', + 'Information'=>'정보', + 'Check two factor authentication code'=>'2단 인증을 체크한다', + 'The two factor authentication code is not valid.'=>'2단 인증 코드는 무효입니다.', + 'The two factor authentication code is valid.'=>'2단 인증 코드는 유효합니다.', + 'Code'=>'코드', + 'Two factor authentication'=>'2단 인증', + 'This QR code contains the key URI:'=>'이 QR코드가 URI키를 포함하고 있습니다:', + 'Check my code'=>'코드 체크', + 'Secret key:'=>'비밀 키:', + 'Test your device'=>'디바이스 테스트', + + + + // 'Assign a color when the task is moved to a specific column' => '', + '%s via Kanboard' => '%s via E-board', + 'uploaded by: %s' => '업로드: %s', + 'uploaded on: %s' => '날짜: %s', + 'size: %s' => '사이즈: %s', + // 'Burndown chart for "%s"' => '', + // 'Burndown chart' => '', + // 'This chart show the task complexity over the time (Work Remaining).' => '', + 'Screenshot taken %s' => '스크린샷_%s', + 'Add a screenshot' => '스크린샷 추가', + 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => '스크린샷을 CTRL+V 혹은 ⌘+V를 눌러 붙여넣기', + 'Screenshot uploaded successfully.' => '스크린샷을 업로드하였습니다', + // 'SEK - Swedish Krona' => '', + // 'The project identifier is an optional alphanumeric code used to identify your project.' => '', + // 'Identifier' => '', + // 'Disable two factor authentication' => '', + // 'Do you really want to disable the two factor authentication for this user: "%s"?' => '', + // 'Edit link' => '', + 'Start to type task title...' => '할일 제목을 처음부터 입력해주세요', + // 'A task cannot be linked to itself' => '', + // 'The exact same link already exists' => '', + // 'Recurrent task is scheduled to be generated' => '', + // 'Recurring information' => '', + // 'Score' => '', + // 'The identifier must be unique' => '', + // 'This linked task id doesn\'t exists' => '', + // 'This value must be alphanumeric' => '', + 'Edit recurrence' => '반복 수정', + 'Generate recurrent task' => '반복 할일 만들기', + 'Trigger to generate recurrent task' => '반복 할일 트리거 만들기', + 'Factor to calculate new due date' => '새로운 종료날짜 계산', + 'Timeframe to calculate new due date' => '종료날짜 계산 단위', + 'Base date to calculate new due date' => '새로운 기본 종료날짜 계산', + 'Action date' => '시작날짜', + 'Base date to calculate new due date: ' => '새로운 기본 종료날짜 계산: ', + // 'This task has created this child task: ' => '', + 'Day(s)' => '일', + 'Existing due date' => '기존 종료날짜', + 'Factor to calculate new due date: ' => '새로운 종료날짜 계산: ', + 'Month(s)' => '월', + // 'Recurrence' => '', + // 'This task has been created by: ' => '', + // 'Recurrent task has been generated:' => '', + 'Timeframe to calculate new due date: ' => '종료날짜 계산 단위', + // 'Trigger to generate recurrent task: ' => '', + 'When task is closed' => '할일을 마쳤을때', + 'When task is moved from first column' => '할일이 첫번째 칼럼으로 옮겨졌을때', + 'When task is moved to last column' => '할일이 마지막 칼럼으로 옮겨졌을때', + 'Year(s)' => '년', + // 'Calendar settings' => '', + // 'Project calendar view' => '', + 'Project settings' => '프로젝트 설정', + // 'Show subtasks based on the time tracking' => '', + // 'Show tasks based on the creation date' => '', + // 'Show tasks based on the start date' => '', + // 'Subtasks time tracking' => '', + // 'User calendar view' => '', + // 'Automatically update the start date' => '', + // 'iCal feed' => '', + // 'Preferences' => '', + // 'Security' => '', + 'Two factor authentication disabled' => '2단 인증 비활성화', + // 'Two factor authentication enabled' => '', + // 'Unable to update this user.' => '', + // 'There is no user management for private projects.' => '', + // 'User that will receive the email' => '', + 'Email subject' => '이메일 제목', + 'Date' => '날짜', + // 'Add a comment log when moving the task between columns' => '', + // 'Move the task to another column when the category is changed' => '', + 'Send a task by email to someone' => '할일을 이메일로 보내기', + 'Reopen a task' => '할일 다시 시작', + 'Column change' => '칼럼 이동', + 'Position change' => '위치 이동', + 'Swimlane change' => '스윔레인 변경', + 'Assignee change' => '담당자 변경', + '[%s] Overdue tasks' => '[%s] 마감시간 지남', + 'Notification' => '알림', + // '%s moved the task #%d to the first swimlane' => '', + // '%s moved the task #%d to the swimlane "%s"' => '', + 'Swimlane' => '스윔레인', + // 'Gravatar' => '', + // '%s moved the task %s to the first swimlane' => '', + // '%s moved the task %s to the swimlane "%s"' => '', + // 'This report contains all subtasks information for the given date range.' => '', + // 'This report contains all tasks information for the given date range.' => '', + // 'Project activities for %s' => '', + // 'view the board on Kanboard' => '', + // 'The task have been moved to the first swimlane' => '', + // 'The task have been moved to another swimlane:' => '', + // 'Overdue tasks for the project "%s"' => '', + 'New title: %s' => '제목 변경: %s', + 'The task is not assigned anymore' => '담당자 없음', + 'New assignee: %s' => '담당자 변경: %s', + 'There is no category now' => '카테고리 없음', + 'New category: %s' => '카테고리 변경: %s', + 'New color: %s' => '색깔 변경: %s', + 'New complexity: %d' => '복잡도 변경: %d', + 'The due date have been removed' => '마감날짜 삭제', + 'There is no description anymore' => '설명 없음', + 'Recurrence settings have been modified' => '반복할일 설정 수정', + 'Time spent changed: %sh' => '경과시간 변경: %s시간', + 'Time estimated changed: %sh' => '%s시간으로 예상시간 변경', + // 'The field "%s" have been updated' => '', + 'The description have been modified' => '설명 수정', + 'Do you really want to close the task "%s" as well as all subtasks?' => '할일 "%s"과 서브 할일을 모두 마치시겠습니까?', + // 'Swimlane: %s' => '', + 'I want to receive notifications for:' => '다음의 알림을 받기를 원합니다:', + 'All tasks' => '모든 할일', + 'Only for tasks assigned to me' => '내가 담당자인 일', + 'Only for tasks created by me' => '내가 만든 일', + 'Only for tasks created by me and assigned to me' => '내가 만들었거나 내가 담당자인 일', + // '%A' => '', + // '%b %e, %Y, %k:%M %p' => '', + 'New due date: %B %e, %Y' => '종료날짜 변경: %Y-%m-%d %p %H:%M', + 'Start date changed: %B %e, %Y' => '시작시간 변경: %Y-%m-%d %p %H:%M', + // '%k:%M %p' => '', + // '%%Y-%%m-%%d' => '', + // 'Total for all columns' => '', + // 'You need at least 2 days of data to show the chart.' => '', + '<15m' => '<15분', + '<30m' => '<30분', + // 'Stop timer' => '', + 'Start timer' => '타이머 시작', + // 'Add project member' => '', + 'Enable notifications' => '알림 켜기', + 'My activity stream' => '내 활동기록', + 'My calendar' => '내 캘린더', + // 'Search tasks' => '', + 'Back to the calendar' => '달력으로 돌아가기', + 'Filters' => '필터', + 'Reset filters' => '필터 리셋', + 'My tasks due tomorrow' => '내일까지 내 할일', + 'Tasks due today' => '오늘까지 할일', + 'Tasks due tomorrow' => '내일까지 할일', + 'Tasks due yesterday' => '어제까지 할일', + 'Closed tasks' => '닫힌 할일', + 'Open tasks' => '열린 할일', + 'Not assigned' => '담당자가 없는 일', + 'View advanced search syntax' => '추가 검색 문법보기', + 'Overview' => '개요', + // '%b %e %Y' => '', + // 'Board/Calendar/List view' => '', + // 'Switch to the board view' => '', + // 'Switch to the calendar view' => '', + // 'Switch to the list view' => '', + // 'Go to the search/filter box' => '', + 'There is no activity yet.' => '활동이 없습니다', + // 'No tasks found.' => '', + // 'Keyboard shortcut: "%s"' => '', + 'List' => '목록', + // 'Filter' => '', + 'Advanced search' => '검색 문법', + 'Example of query: ' => '문법 예제 ', + 'Search by project: ' => '프로젝트로 찾기 ', + 'Search by column: ' => '칼럼으로 찾기 ', + 'Search by assignee: ' => '담당자로 찾기 ', + 'Search by color: ' => '색깔로 찾기 ', + 'Search by category: ' => '카테고리로 찾기 ', + 'Search by description: ' => '설명으로 찾기 ', + 'Search by due date: ' => '마감날짜로 찾기 ', + // 'Lead and Cycle time for "%s"' => '', + // 'Average time spent into each column for "%s"' => '', + // 'Average time spent into each column' => '', + // 'Average time spent' => '', + // 'This chart show the average time spent into each column for the last %d tasks.' => '', + // 'Average Lead and Cycle time' => '', + // 'Average lead time: ' => '', + // 'Average cycle time: ' => '', + 'Cycle Time' => '사이클 타임', + 'Lead Time' => '리드 타임', + // 'This chart show the average lead and cycle time for the last %d tasks over the time.' => '', + // 'Average time into each column' => '', + // 'Lead and cycle time' => '', + // 'Google Authentication' => '', + // 'Help on Google authentication' => '', + // 'Github Authentication' => '', + // 'Help on Github authentication' => '', + 'Lead time: ' => '리드 타임: ', + 'Cycle time: ' => '사이클 타임: ', + 'Time spent into each column' => '각 칼럼에서 걸린 시간', + // 'The lead time is the duration between the task creation and the completion.' => '', + // 'The cycle time is the duration between the start date and the completion.' => '', + // 'If the task is not closed the current time is used instead of the completion date.' => '', + // 'Set automatically the start date' => '', + 'Edit Authentication' => '계정 수정', + // 'Google Id' => '', + // 'Github Id' => '', + // 'Remote user' => '', + // 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => '', + // 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => '', + 'New remote user' => '새로운 원격유저', + 'New local user' => '새로운 유저', + // 'Default task color' => '', + 'Hide sidebar' => '사이드바 닫기', + 'Expand sidebar' => '사이드바 열기', + 'This feature does not work with all browsers.' => '이 기능은 일부 브라우저에서 작동하지 않습니다', + // 'There is no destination project available.' => '', + // 'Trigger automatically subtask time tracking' => '', + // 'Include closed tasks in the cumulative flow diagram' => '', + // 'Current swimlane: %s' => '', + // 'Current column: %s' => '', + // 'Current category: %s' => '', + // 'no category' => '', + // 'Current assignee: %s' => '', + // 'not assigned' => '', + // 'Author:' => '', + // 'contributors' => '', + // 'License:' => '', + // 'License' => '', + // 'Enter the text below' => '', + // 'Gantt chart for %s' => '', + // 'Sort by position' => '', + // 'Sort by date' => '', + // 'Add task' => '', + // 'Start date:' => '', + // 'Due date:' => '', + // 'There is no start date or due date for this task.' => '', + // 'Moving or resizing a task will change the start and due date of the task.' => '', + // 'There is no task in your project.' => '', + 'Gantt chart' => '간트차트', + 'People who are project managers' => '프로젝트 매니저', + 'People who are project members' => '프로젝트 멤버', + // 'NOK - Norwegian Krone' => '', + 'Show this column' => '칼럼 보이기', + 'Hide this column' => '칼럼 숨기기', + 'open file' => '열기', + 'End date' => '종료 날짜', + 'Users overview' => '유저 전체보기', + 'Managers' => '매니저', + 'Members' => '멤버', + // 'Shared project' => '', + 'Project managers' => '프로젝트 매니저', + // 'Gantt chart for all projects' => '', + 'Projects list' => '프로젝트 리스트', + 'Gantt chart for this project' => '이 프로젝트 간트차트', + 'Project board' => '프로젝트 보드', + // 'End date:' => '', + 'There is no start date or end date for this project.' => '이 프로젝트에는 시작날짜와 종료날짜가 없습니다', + 'Projects Gantt chart' => '프로젝트 간트차트', + // 'Start date: %s' => '', + // 'End date: %s' => '', + // 'Link type' => '', + // 'Change task color when using a specific task link' => '', + // 'Task link creation or modification' => '', + // 'Login with my Gitlab Account' => '', + // 'Milestone' => '', + // 'Gitlab Authentication' => '', + // 'Help on Gitlab authentication' => '', + // 'Gitlab Id' => '', + // 'Gitlab Account' => '', + // 'Link my Gitlab Account' => '', + // 'Unlink my Gitlab Account' => '', + // 'Documentation: %s' => '', + // 'Switch to the Gantt chart view' => '', + // 'Reset the search/filter box' => '', + // 'Documentation' => '', + // 'Table of contents' => '', + 'Gantt' => '간트', + // 'Author' => '', + // 'Version' => '', + // 'Plugins' => '', + // 'There is no plugin loaded.' => '', + 'Set maximum column height' => '최대 칼럼 높이 제한하기', + 'Remove maximum column height' => '최대 칼럼 높이 없애기', + 'My notifications' => '내 알림', + 'Custom filters' => '사용자 정의 필터', + // 'Your custom filter have been created successfully.' => '', + // 'Unable to create your custom filter.' => '', + // 'Custom filter removed successfully.' => '', + // 'Unable to remove this custom filter.' => '', + // 'Edit custom filter' => '', + // 'Your custom filter have been updated successfully.' => '', + // 'Unable to update custom filter.' => '', + 'Web' => '웹', + // 'New attachment on task #%d: %s' => '', + 'New comment on task #%d' => '할일 #%d에 새로운 댓글이 달렸습니다', + 'Comment updated on task #%d' => '할일 #%d에 댓글이 업데이트되었습니다', + 'New subtask on task #%d' => '서브 할일 #%d이 업데이트되었습니다', + 'Subtask updated on task #%d' => '서브 할일 #%d가 업데이트되었습니다', + 'New task #%d: %s' => '할일 #%d: %s이 추가되었습니다', + 'Task updated #%d' => '할일 #%d이 업데이트되었습니다', + 'Task #%d closed' => '할일 #%d를 마쳤습니다', + // 'Task #%d opened' => '', + 'Column changed for task #%d' => '할일 #%d의 칼럼이 변경되었습니다', + 'New position for task #%d' => '할일 #%d이 새로운 위치에 등록되었습니다', + // 'Swimlane changed for task #%d' => '', + // 'Assignee changed on task #%d' => '', + // '%d overdue tasks' => '', + // 'Task #%d is overdue' => '', + 'No new notifications.' => '알림이 없습니다', + 'Mark all as read' => '모두 읽음', + 'Mark as read' => '읽음', + // 'Total number of tasks in this column across all swimlanes' => '', + // 'Collapse swimlane' => '', + // 'Expand swimlane' => '', + // 'Add a new filter' => '', + // 'Share with all project members' => '', + // 'Shared' => '', + // 'Owner' => '', + 'Unread notifications' => '읽지않은 알림', + 'My filters' => '내 필터', + 'Notification methods:' => '알림 방법', + // 'Import tasks from CSV file' => '', + // 'Unable to read your file' => '', + // '%d task(s) have been imported successfully.' => '', + // 'Nothing have been imported!' => '', + // 'Import users from CSV file' => '', + // '%d user(s) have been imported successfully.' => '', + // 'Comma' => '', + // 'Semi-colon' => '', + // 'Tab' => '', + // 'Vertical bar' => '', + // 'Double Quote' => '', + // 'Single Quote' => '', + // '%s attached a file to the task #%d' => '', + // 'There is no column or swimlane activated in your project!' => '', + // 'Append filter (instead of replacement)' => '', + // 'Append/Replace' => '', + // 'Append' => '', + // 'Replace' => '', + 'Import' => '가져오기', + // 'change sorting' => '', + // 'Tasks Importation' => '', + // 'Delimiter' => '', + // 'Enclosure' => '', + // 'CSV File' => '', + // 'Instructions' => '', + // 'Your file must use the predefined CSV format' => '', + // 'Your file must be encoded in UTF-8' => '', + // 'The first row must be the header' => '', + // 'Duplicates are not verified for you' => '', + // 'The due date must use the ISO format: YYYY-MM-DD' => '', + // 'Download CSV template' => '', + 'No external integration registered.' => '설정이 되어있지 않습니다', + // 'Duplicates are not imported' => '', + // 'Usernames must be lowercase and unique' => '', + // 'Passwords will be encrypted if present' => '', + '%s attached a new file to the task %s' => '%s이 새로운 파일을 할일 %s에 추가했습니다', + // 'Assign automatically a category based on a link' => '', + // 'BAM - Konvertible Mark' => '', + // 'Assignee Username' => '', + // 'Assignee Name' => '', + // 'Groups' => '', + // 'Members of %s' => '', + // 'New group' => '', + // 'Group created successfully.' => '', + // 'Unable to create your group.' => '', + // 'Edit group' => '', + // 'Group updated successfully.' => '', + // 'Unable to update your group.' => '', + // 'Add group member to "%s"' => '', + // 'Group member added successfully.' => '', + // 'Unable to add group member.' => '', + // 'Remove user from group "%s"' => '', + // 'User removed successfully from this group.' => '', + // 'Unable to remove this user from the group.' => '', + // 'Remove group' => '', + // 'Group removed successfully.' => '', + // 'Unable to remove this group.' => '', + // 'Project Permissions' => '', + 'Manager' => '매니저', + 'Project Manager' => '프로젝트 매니저', + 'Project Member' => '프로젝트 멤버', + // 'Project Viewer' => '', + // 'Your account is locked for %d minutes' => '', + // 'Invalid captcha' => '', + // 'The name must be unique' => '', + 'View all groups' => '모든그룹보기', + // 'View group members' => '', + // 'There is no user available.' => '', + // 'Do you really want to remove the user "%s" from the group "%s"?' => '', + // 'There is no group.' => '', + // 'External Id' => '', + 'Add group member' => '멤버추가', + // 'Do you really want to remove this group: "%s"?' => '', + // 'There is no user in this group.' => '', + // 'Remove this user' => '', + 'Permissions' => '권한', + // 'Allowed Users' => '', + // 'No user have been allowed specifically.' => '', + 'Role' => '역할', + // 'Enter user name...' => '', + // 'Allowed Groups' => '', + // 'No group have been allowed specifically.' => '', + // 'Group' => '', + // 'Group Name' => '', + // 'Enter group name...' => '', + 'Role:' => '역할: ', + 'Project members' => '프로젝트 멤버', + // 'Compare hours for "%s"' => '', + // '%s mentioned you in the task #%d' => '', + // '%s mentioned you in a comment on the task #%d' => '', + // 'You were mentioned in the task #%d' => '', + 'You were mentioned in a comment on the task #%d' => '할일 #%d의 댓글에서 언급되었습니다', + // 'Mentioned' => '', + // 'Compare Estimated Time vs Actual Time' => '', + // 'Estimated hours: ' => '', + // 'Actual hours: ' => '', + // 'Hours Spent' => '', + // 'Hours Estimated' => '', + // 'Estimated Time' => '', + // 'Actual Time' => '', + // 'Estimated vs actual time' => '', + // 'RUB - Russian Ruble' => '', + // 'Assign the task to the person who does the action when the column is changed' => '', + // 'Close a task in a specific column' => '', + 'Time-based One-time Password Algorithm' => '시간에 기반한 1회용 패스워드 알고리즘', + 'Two-Factor Provider: ' => '2단 인증: ', + // 'Disable two-factor authentication' => '', + 'Enable two-factor authentication' => '2단 인증 활성화', + // 'There is no integration registered at the moment.' => '', + // 'Password Reset for Kanboard' => '', + 'Forgot password?' => '비밀번호 찾기', + // 'Enable "Forget Password"' => '', + // 'Password Reset' => '', + // 'New password' => '', + // 'Change Password' => '', + // 'To reset your password click on this link:' => '', + 'Last Password Reset' => '비밀번호 초기화', + 'The password has never been reinitialized.' => '비밀번호가 초기화되지 않았습니다', + // 'Creation' => '', + // 'Expiration' => '', + 'Password reset history' => '비밀번호 초기화 기록', + // 'All tasks of the column "%s" and the swimlane "%s" have been closed successfully.' => '', + // 'Do you really want to close all tasks of this column?' => '', + // '%d task(s) in the column "%s" and the swimlane "%s" will be closed.' => '', + 'Close all tasks of this column' => '칼럼의 모든 할일 마치기', + // 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => '', + 'My dashboard' => '대시보드', + 'My profile' => '프로필', +); -- cgit v1.2.3 From 0c4a5afa839187f66af93ef37dfb08677aeb5b59 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sun, 27 Mar 2016 16:29:33 -0400 Subject: Integrate Korean translation --- CONTRIBUTORS.md | 1 + ChangeLog | 1 + app/Locale/ko_KR/translations.php | 1466 +++++++++++++++++++------------------ app/Model/Config.php | 3 +- 4 files changed, 760 insertions(+), 711 deletions(-) (limited to 'app/Locale/ko_KR/translations.php') diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index f4576949..61d190fa 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -120,6 +120,7 @@ Contributors: - [Vladimir Babin](https://github.com/Chiliec) - [Yannick Ihmels](https://github.com/ihmels) - [Ybarc](https://github.com/ybarc) +- [Yu Yongwoo](https://github.com/uyu423) - [Yuichi Murata](https://github.com/yuichi1004) There is also many people who have reported bugs or proposed awesome ideas. \ No newline at end of file diff --git a/ChangeLog b/ChangeLog index 000ab61b..c732f89a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,7 @@ New features: * Added Markdown editor * Added letter avatar provider * Added pluggable Avatar providers +* Added Korean translation Improvements: diff --git a/app/Locale/ko_KR/translations.php b/app/Locale/ko_KR/translations.php index ad1a62d6..8379761f 100644 --- a/app/Locale/ko_KR/translations.php +++ b/app/Locale/ko_KR/translations.php @@ -1,686 +1,631 @@ '', - //'number.thousands_separator'=>'', - 'None'=>'없음', - 'edit'=>'수정', - 'Edit'=>'수정', - 'remove'=>'삭제', - 'Remove'=>'삭제', - 'Update'=>'수정', - 'Yes'=>'예', - 'No'=>'아니오', - 'cancel'=>'취소', - 'or'=>'또는', - 'Yellow'=>'노랑', - 'Blue'=>'파랑', - 'Green'=>'초록', - 'Purple'=>'보라', - 'Red'=>'빨강', - 'Orange'=>'주황', - 'Grey'=>'회색', - 'Brown'=>'브라운', - // 'Deep Orange'=>'오아', - // 'Dark Grey'=>'', - // 'Pink'=>'', - // 'Teal'=>'', - // 'Cyan'=>'', - // 'Lime'=>'', - // 'Light Green'=>'', - // 'Amber'=>'', - 'Save'=>'저장', - 'Login'=>'로그인', - 'Official website:'=>'공식 웹사이트:', - 'Unassigned'=>'담당자 없음', - 'View this task'=>'이 할일 보기', - 'Remove user'=>'사용자 삭제', - 'Do you really want to remove this user: "%s"?'=>'사용자 "%s"를 정말로 삭제하시겠습니까?', - 'New user'=>'사용자를 추가하는 ', - 'All users'=>'모든 사용자', - 'Username'=>'사용자 이름', - 'Password'=>'패스워드', - 'Administrator'=>'관리자', - 'Sign in'=>'로그인', - 'Users'=>'사용자', - 'No user'=>'사용자가 없습니다', - 'Forbidden'=>'접근 거부', - 'Access Forbidden'=>'접속이 거부되었습니다', - 'Edit user'=>'사용자를 변경하는 ', - 'Logout'=>'로그아웃', - 'Bad username or password'=>'사용자 이름 또는 패스워드가 다릅니다.', - 'Edit project'=>'프로젝트 수정', - 'Name'=>'이름', - 'Projects'=>'프로젝트', - 'No project'=>'프로젝트가 없습니다', - 'Project'=>'프로젝트', - 'Status'=>'상태', - 'Tasks'=>'할일', - 'Board'=>'보드', - 'Actions'=>'Actions', - 'Inactive'=>'무효', - 'Active'=>'유효', - 'Add this column'=>'칼럼을 추가하는 ', - '%d tasks on the board'=>'%d개의 할일', - '%d tasks in total'=>'총 %d개의 할일', - 'Unable to update this board.'=>'보드를 갱신할 수 없었습니다', - 'Edit board'=>'보드를 변경하는 ', - 'Disable'=>'비활성화', - 'Enable'=>'유효하게 한다', - 'New project'=>'새 프로젝트', - 'Do you really want to remove this project:"%s"?'=>'프로젝트"%s"를 정말로 삭제하시겠습니까?', - 'Remove project'=>'프로젝트의 삭제', - 'Edit the board for"%s"'=>'보드"%s"를 변경하는 ', - 'All projects'=>'모든 프로젝트', - 'Change columns'=>'칼럼의 변경', - 'Add a new column'=>'칼럼의 추가', - 'Title'=>'제목', - 'Nobody assigned'=>'담당자 없음', - 'Assigned to %s'=>'담당자 %s', - 'Remove a column'=>'칼럼 삭제', - 'Remove a column from a board'=>'보드에서 칼럼 삭제', - 'Unable to remove this column.'=>'(※)컬럼을 삭제할 수 없었습니다.', - 'Do you really want to remove this column:"%s"('=>'칼럼"%s"을 삭제할까요?', - 'This action will REMOVE ALL TASKS associated to this column!'=>'이 조작은 이 컬럼에 할당된 『 모든 할일을 삭제 』합니다!', - 'Settings'=>'설정', - 'Application settings'=>'애플리케이션의 설정', - 'Language'=>'언어', - 'Webhook token:'=>'Webhook토큰:', - 'API token:'=>'API토큰:', - 'Database size:'=>'데이터베이스의 사이즈:', - 'Download the database'=>'데이터베이스의 다운로드', - 'Optimize the database'=>'데이터베이스 최적화', - '(VACUUM command)'=>'(VACUUM명령)', - '(Gzip compressed Sqlite file)'=>'(GZip명령으로 압축된 Sqlite파일)', - 'Close a task'=>'할일 마치기', - 'Edit a task'=>'할일 수정', - 'Column'=>'칼럼', - 'Color'=>'색', - 'Assignee'=>'담당자', - 'Create another task'=>'다른 할일 추가', - 'New task'=>'새로운 할일', - 'Open a task'=>'할일 열기', - 'Do you really want to open this task:"%s"?'=>'할일"%s"를 오픈합니까?', - 'Back to the board'=>'보드로 돌아가기', - 'Created on %B %e, %Y at %k:%M %p'=>'%Y-%m-%d %p %H:%M 에 작성', - 'There is nobody assigned'=>'담당자가 없습니다', - 'Column on the board:'=>'칼럼:', - 'Status is open'=>'상태 열림', - 'Status is closed'=>'상태 닫힘', - 'Close this task'=>'할일 마치기', - 'Open this task'=>'할일을 열다', - 'There is no description.'=>'설명이 없다', - 'Add a new task'=>'할일을 추가하는 ', - 'The username is required'=>'사용자 이름이 필요합니다', - 'The maximum length is%d characters'=>'최대%d문자에요!', - 'The minimum length is%d characters'=>'최소%d문자 필요합니다', - 'The password is required'=>'패스워드가 필요합니다', - 'This value must be an integer'=>'정수로 입력하세요', - 'The username must be unique'=>'사용자 이름이 이미 사용되고 있습니다', - 'The user id is required'=>'사용자 ID가 필요합니다', - 'Passwords don\'t match'=>'패스워드가 일치하지 않습니다', - 'The confirmation is required'=>'확인용 패스워드를 입력하세요', - 'The project is required'=>'프로젝트가 필요합니다', - 'The id is required'=>'ID가 필요합니다', - 'The project id is required'=>'프로젝트 ID가 필요합니다', - 'The project name is required'=>'프로젝트 이름이 필요합니다', - 'The title is required'=>'제목이 필요합니다', - 'Settings saved successfully.'=>'설정을 저장하였습니다', - 'Unable to save your settings.'=>'설정의 보존에 실패했습니다.', - 'Database optimization done.'=>'데이터베이스 최적화가 끝났습니다.', - 'Your project have been created successfully.'=>'프로젝트를 작성했습니다.', - 'Unable to create your project.'=>'프로젝트의 작성에 실패했습니다.', - 'Project updated successfully.'=>'프로젝트를 갱신했습니다.', - 'Unable to update this project.'=>'프로젝트의 갱신에 실패했습니다.', - 'Unable to remove this project.'=>'프로젝트의 삭제에 실패했습니다.', - 'Project removed successfully.'=>'프로젝트를 삭제했습니다.', - 'Project activated successfully.'=>'프로젝트를 유효로 했습니다.', - 'Unable to activate this project.'=>'프로젝트의 유효하게 못했어요.', - 'Project disabled successfully.'=>'프로젝트를 무효로 했습니다.', - 'Unable to disable this project.'=>'프로젝트의 무효화할 수 없었습니다.', - 'Unable to open this task.'=>'할일의 오픈에 실패했습니다.', - 'Task opened successfully.'=>'할일을 오픈했습니다.', - 'Unable to close this task.'=>'할일의 클로즈에 실패했습니다.', - 'Task closed successfully.'=>'할일을 마쳤습니다.', - 'Unable to update your task.'=>'할일의 갱신에 실패했습니다.', - 'Task updated successfully.'=>'할일을 갱신했습니다.', - 'Unable to create your task.'=>'할일의 추가에 실패했습니다.', - 'Task created successfully.'=>'할일을 추가했습니다.', - 'User created successfully.'=>'사용자를 추가했습니다.', - 'Unable to create your user.'=>'사용자의 추가에 실패했습니다.', - 'User updated successfully.'=>'사용자를 갱신했습니다.', - 'Unable to update your user.'=>'사용자의 갱신에 실패했습니다.', - 'User removed successfully.'=>'사용자를 삭제했습니다.', - 'Unable to remove this user.'=>'사용자 삭제에 실패했습니다.', - 'Board updated successfully.'=>'보드를 갱신했습니다.', - 'Ready'=>'준비완료', - 'Backlog'=>'요구사항', - 'Work in progress'=>'진행중', - 'Done'=>'완료', - 'Application version:'=>'애플리케이션의 버전:', - 'Completed on%B%e,%Y at%k:%M%p'=>'%Y/%m/%d%H:%M에 완료', - '%B%e,%Y at%k:%M%p'=>'%Y/%m/%d%H:%M', - 'Date created'=>'작성일', - 'Date completed'=>'완료일', - 'Id'=>'ID', - '%d closed tasks'=>'%d개의 마친 할일', - 'No task for this project'=>'이 프로젝트에 할일이 없습니다', - 'Public link'=>'공개 접속 링크', - 'Change assignee'=>'담당자 변경', - 'Change assignee for the task "%s"'=>'할일 "%s"의 담당자를 변경', - 'Timezone'=>'시간대', - 'Sorry, I didn\'t find this information in my database!'=>'데이터베이스에서 정보가 발견되지 않았습니다!', - 'Page not found'=>'페이지가 발견되지 않는다', - 'Complexity'=>'복잡도', - 'Task limit'=>'할일 수 제한', - 'Task count'=>'할일 수', - 'User'=>'사용자', - 'Comments'=>'댓글', - 'Write your text in Markdown'=>'Markdown 사용', - 'Leave a comment'=>'댓글 남기기', - 'Comment is required'=>'댓글을 입력하세요', - 'Leave a description'=>'설명을 입력하세요', - 'Comment added successfully.'=>'의견을 추가했습니다.', - 'Unable to create your comment.'=>'댓글의 추가에 실패했습니다.', - 'Edit this task'=>'할일 수정', - 'Due Date'=>'마감일', - 'Invalid date'=>'날짜가 무효입니다', - 'Must be done before %B %e, %Y'=>'%Y-%m-%d %p %H:%M 까지 완료', - '%B%e,%Y'=>'%Y%B%e', - '%b%e,%Y'=>'%Y%b%e', - 'Automatic actions'=>'자동액션 관리', - 'Your automatic action have been created successfully.'=>'자동 액션을 작성했습니다.', - 'Unable to create your automatic action.'=>'자동 액션의 작성에 실패했습니다.', - 'Remove an action'=>'자동 액션의 삭제', - 'Unable to remove this action.'=>'자동 액션의 삭제에 실패했습니다.', - 'Action removed successfully.'=>'자동 액션의 삭제에 성공했어요.', - 'Automatic actions for the project"%s"'=>'프로젝트"%s"의 자동 액션', - 'Defined actions'=>'정의된 자동 액션', - 'Add an action'=>'자동 액션 추가', - 'Event name'=>'이벤트 이름', - 'Action name'=>'액션 이름', - 'Action parameters'=>'액션의 바로미터', - 'Action'=>'액션', - 'Event'=>'이벤트', - 'When the selected event occurs execute the corresponding action.'=>'선택된 이벤트가 발생했을 때 대응하는 액션을 실행한다.', - 'Next step'=>'다음 단계', - 'Define action parameters'=>'액션의 바로미터', - 'Save this action'=>'이 액션을 보존하는 ', - 'Do you really want to remove this action:"%s"('=>'자동 액션"%s"을 삭제할까요?', - 'Remove an automatic action'=>'자동 액션의 삭제', - 'Assign the task to a specific user'=>'할일 담당자를 할당', - 'Assign the task to the person who does the action'=>'액션을 일으킨 사용자를 담당자이자', - 'Duplicate the task to another project'=>' 다른 프로젝트에 할일을 복제하는 ', - 'Move a task to another column'=>'할일을 다른 칼럼에 이동하는 ', - 'Task modification'=>'할일 변경', - 'Task creation'=>'할일을 만들', - 'Closing a task'=>'할일을 닫혔다', - 'Assign a color to a specific user'=>'색을 사용자에 할당', - 'Column title'=>'칼럼의 제목', - 'Position'=>'위치', - 'Move Up'=>'위에 움직이는 ', - 'Move Down'=>'아래로 움직이는 ', - 'Duplicate to another project'=>'다른 프로젝트에 복사', - 'Duplicate'=>'복사', - 'link'=>'링크', - 'Comment updated successfully.'=>'댓글을 갱신했습니다.', - 'Unable to update your comment.'=>'댓글의 갱신에 실패했습니다.', - 'Remove a comment'=>'댓글 삭제', - 'Comment removed successfully.'=>'댓글을 삭제했습니다.', - 'Unable to remove this comment.'=>'댓글의 삭제에 실패했습니다.', - 'Do you really want to remove this comment?'=>'댓글을 삭제합니까?', - 'Only administrators or the creator of the comment can access to this page.'=>'관리자나 의견 작성자만이 이 페이지 액세스 할 수 있습니다', - 'Current password for the user "%s"'=>'사용자 "%s"의 현재 패스워드', - 'The current password is required'=>'현재의 패스워드를 입력하세요', - 'Wrong password'=>'패스워드가 다릅니다', - 'Unknown'=>'불명', - 'Last logins'=>'마지막 로그인', - 'Login date'=>'로그인 일시', - 'Authentication method'=>'인증 방법', - 'IP address'=>'IP 주소', - 'User agent'=>'사용자 에이전트', - 'Persistent connections'=>'세션', - 'No session.'=>'세션 없음', - 'Expiration date'=>'유효기간', - 'Remember Me'=>'자동 로그인', - 'Creation date'=>'작성일', - 'Everybody'=>'모두', - 'Open'=>'열림', - 'Closed'=>'닫힘', - 'Search'=>'검색', - 'Nothing found.'=>'결과가 없습니다', - 'Due date'=>'마감일', - 'Others formats accepted: %s and %s'=>' 다른 서식: %s 또는 %s', - 'Description'=>'설명', - '%d comments'=>'%d개의 댓글', - '%d comment'=>'%d개의 댓글', - 'Email address invalid'=>'메일 주소가 올바르지 않습니다.', - //'Your external account is not linked anymore to your profile.'=>'', - //'Unable to unlink your external account.'=>'', - //'External authentication failed'=>'', - //'Your external account is linked to your profile successfully.'=>'', - 'Email'=>'이메일', - 'Link my Google Account'=>'Google계정을 연결하는 ', - 'Unlink my Google Account'=>'Google계정의 링크를 해제하는 ', - 'Login with my Google Account'=>'Google계정으로 로그인 한다', - 'Project not found.'=>'프로젝트가 발견되지 않습니다.', - 'Task removed successfully.'=>'할일을 삭제했습니다.', - 'Unable to remove this task.'=>'할일 삭제에 실패했습니다.', - 'Remove a task'=>'할일 삭제', - 'Do you really want to remove this task:"%s"('=>'할일"%s"을 삭제할까요?', - 'Assign automatically a color based on a category'=>'카테고리에 바탕을 두고 색을 바꾸고', - 'Assign automatically a category based on a color'=>'색에 바탕을 두고 카테고리를 바꾸었다', - 'Task creation or modification'=>'할일의 작성 또는 변경', - 'Category'=>'카테고리', - 'Category:'=>'카테고리:', - 'Categories'=>'카테고리', - 'Category not found.'=>'카테고리가 발견되지 않습니다', - 'Your category have been created successfully.'=>'카테고리를 작성했습니다.', - 'Unable to create your category.'=>'카테고리의 작성에 실패했습니다.', - 'Your category have been updated successfully.'=>'카테고리를 갱신했습니다.', - 'Unable to update your category.'=>'카테고리의 갱신에 실패했습니다.', - 'Remove a category'=>'카테고리의 삭제', - 'Category removed successfully.'=>'카테고리를 삭제했습니다.', - 'Unable to remove this category.'=>'카테고리를 삭제할 수 없었습니다.', - 'Category modification for the project"%s"'=>'프로젝트"%s"의 카테고리의 변경', - 'Category Name'=>'카테고리 이름', - 'Add a new category'=>'카테고리의 추가', - 'Do you really want to remove this category:"%s"('=>'카테고리"%s"을 삭제할까요?', - 'All categories'=>'모든 카테고리', - 'No category'=>'카테고리 없음', - 'The name is required'=>'이름을 입력하십시오', - 'Remove a file'=>'파일 삭제', - 'Unable to remove this file.'=>'파일 삭제에 실패했습니다.', - 'File removed successfully.'=>'파일을 삭제했습니다.', - 'Attach a document'=>'문서 첨부', - 'Do you really want to remove this file: "%s"?'=>'파일 "%s" 을 삭제할까요?', - 'Attachments'=>'첨부', - 'Edit the task'=>'할일 수정', - 'Edit the description'=>'설명 수정', - 'Add a comment'=>'댓글 추가', - 'Edit a comment'=>'댓글 수정', - 'Summary'=>'개요', - 'Time tracking'=>'시간 추적', - 'Estimate:'=>'예측:', - 'Spent:'=>'경과:', - 'Do you really want to remove this sub-task?'=>'서브 할일을 삭제합니까?', - 'Remaining:'=>'나머지:', - 'hours'=>'시간', - 'spent'=>'경과', - 'estimated'=>'예측', - 'Sub-Tasks'=>'서브 할일', - 'Add a sub-task'=>'서브 할일 추가', - 'Original estimate'=>'최초 예측시간', - 'Create another sub-task'=>'다음 서브 할일 추가', - 'Time spent'=>'경과시간', - 'Edit a sub-task'=>'서브 할일을 변경하는 ', - 'Remove a sub-task'=>'서브 할일을 삭제하는 ', - 'The time must be a numeric value'=>'시간은 숫자로 입력하세요', - 'Todo'=>'할일 예정', - 'In progress'=>'할일 중', - 'Sub-task removed successfully.'=>'서브 할일을 삭제했습니다.', - 'Unable to remove this sub-task.'=>'서브 할일의 삭제가 실패했습니다.', - 'Sub-task updated successfully.'=>'서브 할일을 갱신했습니다.', - 'Unable to update your sub-task.'=>'서브 할일의 경신에 실패했습니다.', - 'Unable to create your sub-task.'=>'서브 할일의 추가에 실패했습니다.', - 'Sub-task added successfully.'=>'서브 할일을 추가했습니다.', - 'Maximum size: '=>'최대: ', - 'Unable to upload the file.'=>'파일 업로드에 실패했습니다.', - 'Display another project'=>'프로젝트 보기', - 'Login with my Github Account'=>'Github계정으로 로그인 한다', - 'Link my Github Account'=>'Github계정을 연결하는 ', - 'Unlink my Github Account'=>'Github어카운트와의 링크를 해제하는 ', - 'Created by %s'=>'작성자 %s', - 'Last modified on %B %e, %Y at %k:%M %p'=>'%Y-%m-%d %p %H:%M 에 변경', - 'Tasks Export'=>'할일 내보내기', - 'Tasks exportation for"%s"'=>'"%s"의 할일 출력', - 'Start Date'=>'시작일', - 'End Date'=>'종료일', - 'Execute'=>'실행', - 'Task Id'=>'할일 ID', - 'Creator'=>'작성자', - 'Modification date'=>'변경 일', - 'Completion date'=>'완료일', - 'Clone'=>'복사', - 'Project cloned successfully.'=>'프로젝트를 복제했습니다.', - 'Unable to clone this project.'=>'프로젝트의 복제에 실패했습니다.', - 'Enable email notifications'=>'이메일 알림 설정', - 'Task position:'=>'할일 위치:', - 'The task#%d have been opened.'=>'할일#%d를 오픈했습니다.', - 'The task#%d have been closed.'=>'할일#%d을 닫혔습니다.', - 'Sub-task updated'=>'서브 할일 갱신', - 'Title:'=>'제목:', - 'Status:'=>'상태:', - 'Assignee:'=>'담당:', - 'Time tracking:'=>'시간 계측:', - 'New sub-task'=>'새로운 서브 할일', - 'New attachment added"%s"'=>'첨부 파일"%s"가 추가되었습니다', - 'Comment updated'=>'댓글가 갱신되었습니다', - 'New comment posted by %s'=>'"%s"님이 댓글을 추가하였습니다', - 'New attachment'=>' 새로운 첨부 파일', - 'New comment'=>' 새로운 댓글', - 'New subtask'=>' 새로운 서브 할일', - 'Subtask updated'=>'서브 할일 갱신', - 'Task updated'=>'할일 업데이트', - 'Task closed'=>'할일 마침', - 'Task opened'=>'할일 시작', - 'I want to receive notifications only for those projects:'=>'다음 프로젝트의 알림만 받겠습니다:', - 'view the task on Kanboard'=>'Kanboard에서 할일을 본다', - 'Public access'=>'공개 접속 설정', - 'User management'=>'사용자 관리', - 'Active tasks'=>'활성화된 할일', - 'Disable public access'=>'공개 접속 비활성화', - 'Enable public access'=>'공개 접속 활성화', - 'Public access disabled'=>'공개 접속 불가', - 'Do you really want to disable this project:"%s"('=>'"%s"를 무효로 합니까?', - 'Do you really want to enable this project:"%s"('=>'"%s"를 유효하게 합니까?', - 'Project activation'=>'프로젝트의 액티베ー션', - 'Move the task to another project'=>'할일별 프로젝트에 옮기', - 'Move to another project'=>'다른 프로젝트로 이동', - 'Do you really want to duplicate this task?'=>'할일을 복제합니까?', - 'Duplicate a task'=>'할일 복사', - 'External accounts'=>'외부 계정', - 'Account type'=>'계정종류', - 'Local'=>'로컬', - 'Remote'=>'원격', - 'Enabled'=>'활성화', - 'Disabled'=>'비활성화', - 'Username:'=>'사용자명', - 'Name:'=>'이름:', - 'Email:'=>'이메일:', - 'Notifications:'=>'알림:', - 'Notifications'=>'알림', - 'Account type:'=>'계정종류:', - 'Edit profile'=>'프로필 변경', - 'Change password'=>'패스워드 변경', - 'Password modification'=>'패스워드 변경', - 'External authentications'=>'외부 인증', - 'Google Account'=>'Google 계정', - 'Github Account'=>'Github 계정', - 'Never connected.'=>'접속기록없음', - 'No account linked.'=>'계정이 링크하지 않습니다.', - 'Account linked.'=>'계정이 링크했습니다.', - 'No external authentication enabled.'=>'외부 인증이 설정되어 있지 않습니다.', - 'Password modified successfully.'=>'패스워드를 변경했습니다.', - 'Unable to change the password.'=>'비밀 번호가 변경할 수 없었습니다.', - 'Change category for the task "%s"'=>'할일 "%s"의 카테고리의 변경', - 'Change category'=>'카테고리 수정', - '%s updated the task %s'=>'%s이 할일 %s을 업데이트했습니다', - '%s opened the task%s'=>'%s이 할일%s을 오픈했습니다', - '%s moved the task %s to the position #%d in the column "%s"'=>'%s이 할일%s을 위치#%d컬럼%s로 옮겼습니다', - '%s moved the task %s to the column "%s"'=>'%s이 할일 %s을 칼럼 "%s" 로 옮겼습니다', - '%s created the task %s'=>'%s이 할일%s을 추가했습니다', - '%s closed the task %s'=>'%s이 할일%s을 마쳤습니다', - '%s created a subtask for the task %s'=>'%s이 할일%s의 서브 할일을 추가했습니다', - '%s updated a subtask for the task %s'=>'%s이 할일%s의 서브 할일을 갱신했습니다', - 'Assigned to %s with an estimate of %s/%sh'=>'담당자 %s에게 예상 %s/%sh로 할당되었습니다', - 'Not assigned, estimate of%sh'=>'담당자 없이 예상%sh로 변경되었습니다', - '%s updated a comment on the task %s'=>'%s이 할일%s의 댓글을 수정했습니다', - '%s commented the task %s'=>'%s이 할일%s에 댓글을 남겼습니다', - '%s\'s activity'=>'%s의 활동', - 'RSS feed'=>'RSS피드', - '%s updated a comment on the task#%d'=>'%s이 할일#%d의 댓글을 갱신했습니다', - '%s commented on the task#%d'=>'%s이 할일#%d에 말했습니다', - '%s updated a subtask for the task#%d'=>'%s이 할일#%d의 서브 할일을 갱신했습니다', - '%s created a subtask for the task#%d'=>'%s이 할일#%d의 서브 할일을 추가했습니다', - '%s updated the task #%d'=>'%s이 할일#%d을 갱신했습니다', - '%s created the task #%d'=>'%s이 할일#%d을 추가했습니다', - '%s closed the task #%d'=>'%s이 할일#%d을 닫혔습니다', - '%s open the task #%d'=>'%s이 할일#%d를 오픈했습니다', - '%s moved the task #%d to the column "%s"'=>'%s이 할일#%d을 칼럼"%s"로 옮겼습니다', - '%s moved the task #%d to the position%d in the column "%s"'=>'%s이 할일#%d을 위치%d컬럼"%s"이동했습니다', - 'Activity'=>'활동', - 'Default values are"%s"'=>'기본 값은 "%s"', - 'Default columns for new projects(Comma-separated)'=>'신규 프로젝트의 기본 컬럼(쉼표로 구분하여 입력)', - 'Task assignee change'=>'담당자의 변경', - '%s change the assignee of the task#%d to%s'=>'%s이 할일#%d의 담당을%s로 변경했습니다', - '%s changed the assignee of the task %s to %s'=>'%s이 할일 %s의 담당을 %s로 변경했습니다', - 'New password for the user "%s"'=>'사용자 "%s"의 새로운 패스워드', - 'Choose an event'=>'행사의 선택', - 'Create a task from an external provider'=>'할일을 외부 서비스로부터 작성하는 ', - 'Change the assignee based on an external username'=>'담당자를 외부 서비스에 바탕을 두고 변경하는 ', - 'Change the category based on an external label'=>'카테고리를 외부 서비스에 바탕을 두고 변경하는 ', - 'Reference'=>'참조', - 'Reference:%s'=>'참조:%s', - 'Label'=>'라벨', - 'Database'=>'데이터베이스', - 'About'=>'정보', - 'Database driver:'=>'데이터베이스 드라이버:', - 'Board settings'=>'기본 설정', - 'URL and token'=>'URL와 토큰', - 'Webhook settings'=>'Webhook의 설정', - 'URL for task creation:'=>'Task작성의 URL:', - 'Reset token'=>'토큰 리셋', - 'API endpoint:'=>'API엔드 포인트:', - 'Refresh interval for private board'=>'비공개 보드의 갱신 빈도', - 'Refresh interval for public board'=>'공개 보드의 갱신 빈도', - 'Task highlight period'=>'할일의 하이라이트 기간', - 'Period(in second)to consider a task was modified recently(0 to disable, 2 days by default)'=>'할일이 최근 업데이트된 것으로 보면 기간(0은 하이라이트 무효 디폴트 2일)', - 'Frequency in second(60 seconds by default)'=>'초수(디폴트 60초)', - 'Frequency in second(0 to disable this feature, 10 seconds by default)'=>'초수(0은 기능을 무효화, 기본 10초)', - 'Application URL'=>'애플리케이션의 URL', - 'Example:http://example.kanboard.net/(used by email notifications)'=>'Exemple:http://exemple.kanboard.net/(Email통지에 이용)', - 'Token regenerated.'=>'토큰이 다시 생성되었습니다.', - 'Date format'=>'데이터 포맷', - 'ISO format is always accepted, example:"%s"and"%s"'=>'ISO포맷이 입력할 수 있습니다(예:%s또는%s)', - 'New private project'=>'새 비공개 프로젝트', - 'This project is private'=>'이 프로젝트는 비공개입니다', - 'Type here to create a new sub-task'=>'서브 할일을 추가하려면 여기에 입력하세요', - 'Add'=>'추가', - 'Estimated time: %s hours'=>'예상시간: %s시간', - 'Time spent: %s hours'=>'경과: %s시간', - 'Started on%B%e,%Y'=>'시작%Y/%m/%d', - 'Start date'=>'시작시간', - 'Time estimated'=>'예상시간', - 'There is nothing assigned to you.'=>'할일이 없습니다. 옆사람의 일을 도와주면 어떨까요?', - 'My tasks'=>'내 할일', - 'Activity stream'=>'활동기록', - 'Dashboard'=>'대시보드', - 'Confirmation'=>'확인', - 'Allow everybody to access to this project'=>'모든 사람이 이 프로젝트에 접근할 수 있도록 합니다', - 'Everybody have access to this project.'=>'누구나 이 프로젝트에 액세스 할 수 있습니다', - 'Webhooks'=>'Webhook', - 'API'=>'API', - 'Create a comment from an external provider'=>'외부 서비스로부터 의견을 작성한다', - 'Project management'=>'프로젝트 관리', - 'My projects'=>'내 프로젝트', - 'Columns'=>'칼럼', - 'Task'=>'할일', - 'Your are not member of any project.'=>'어떤 프로젝트에도 속하지 않습니다.', - 'Percentage'=>'비중', - 'Number of tasks'=>'할일 수', - 'Task distribution'=>'할일 분포', - 'Reportings'=>'리포트', - 'Task repartition for"%s"'=>'"%s"의 할일 분포', - 'Analytics'=>'분석', - 'Subtask'=>'서브 할일', - 'My subtasks'=>'내 서브 할일', - 'User repartition'=>'담당자 분포', - 'User repartition for"%s"'=>'"%s"의 담당자 분포', - 'Clone this project'=>'이 프로젝트를 복제하는 ', - 'Column removed successfully.'=>'(※)컬럼을 삭제했습니다', - 'Not enough data to show the graph.'=>'그래프를 선묘화하려면 나왔지만 부족합니다', - 'Previous'=>' 돌아가', - 'The id must be an integer'=>'id은 숫자가 아니면 안 됩니다', - 'The project id must be an integer'=>'project id은 숫자가 아니면 안 됩니다', - 'The status must be an integer'=>'status는 숫자지 않으면 안 됩니다', - 'The subtask id is required'=>'subtask id가 필요합니다', - 'The subtask id must be an integer'=>'subtask id은 숫자가 아니면 안 됩니다', - 'The task id is required'=>'task id가 필요합니다', - 'The task id must be an integer'=>'task id은 숫자가 아니면 안 됩니다', - 'The user id must be an integer'=>'user id은 숫자가 아니면 안 됩니다', - 'This value is required'=>'이 값이 필요합니다', - 'This value must be numeric'=>'이 값은 숫자가 아니면 안 됩니다', - 'Unable to create this task.'=>'이 할일을 작성할 수 없었습니다', - 'Cumulative flow diagram'=>'축적 플로', - 'Cumulative flow diagram for"%s"'=>'"%s"의 축적 플로', - 'Daily project summary'=>'일시 프로젝트 개요', - 'Daily project summary export'=>'일시 프로젝트 개요의 출력', - 'Daily project summary export for"%s"'=>'"%s"의 일시 프로젝트 개요의 출력', - 'Exports'=>'출력', - 'This export contains the number of tasks per column grouped per day.'=>'이 출력은 날짜의 칼람별 할일 수를 집계한 것입니다', - 'Nothing to preview...'=>'미리보기가 없습니다', - 'Preview'=>'미리보기', - 'Write'=>'쓰기', - 'Active swimlanes'=>'액티브한 스윔레인', - 'Add a new swimlane'=>' 새로운 스윔레인', - 'Change default swimlane'=>'기본 스윔레인의 변경', - 'Default swimlane'=>'기본 스윔레인', - 'Do you really want to remove this swimlane:"%s"('=>'이 스윔레인"%s"를 정말로 삭제하시겠습니까?', - 'Inactive swimlanes'=>'인터랙티브한 스윔레인', - 'Remove a swimlane'=>'스윔레인의 삭제', - 'Rename'=>'이름 변경', - 'Show default swimlane'=>'기본 스윔레인의 표시', - 'Swimlane modification for the project"%s"'=>'"%s"에 대한 스윔레인 변경', - 'Swimlane not found.'=>'스윔레인이 발견되지 않습니다.', - 'Swimlane removed successfully.'=>'스윔레인을 삭제했습니다.', - 'Swimlanes'=>'스윔레인', - 'Swimlane updated successfully.'=>'스윔레인을 갱신했습니다.', - 'The default swimlane have been updated successfully.'=>'기본 스윔레인을 갱신했습니다.', - 'Unable to create your swimlane.'=>'스윔레인을 추가할 수 없었습니다.', - 'Unable to remove this swimlane.'=>'스윔레인을 삭제할 수 없었습니다.', - 'Unable to update this swimlane.'=>'스윔레인을 갱신할 수 없었습니다.', - 'Your swimlane have been created successfully.'=>'스윔레인이 작성되었습니다.', - 'Example:"Bug, Feature Request, Improvement"'=>'예:버그, 기능, 개선', - 'Default categories for new projects(Comma-separated)'=>' 새로운 프로젝트의 기본적 카테고리(쉼표 분리)', - 'Integrations'=>'연계', - 'Integration with third-party services'=>'외부 서비스 연계', - 'Subtask Id'=>'서브 할일 Id', - 'Subtasks'=>'서브 할일', - 'Subtasks Export'=>'서브 할일 출력', - 'Subtasks exportation for"%s"'=>'"%s"의 서브 할일 출력', - 'Task Title'=>'할일 제목', - 'Untitled'=>'제목 없음', - 'Application default'=>'애플리케이션 기본', - 'Language:'=>'언어:', - 'Timezone:'=>'시간대:', - 'All columns'=>'모든 칼럼', - 'Calendar'=>'달력', - 'Next'=>'다음에 ', - '#%d'=>'#%d', - 'All swimlanes'=>'모든 스윔레인', - 'All colors'=>'모든 색', - 'Moved to column%s'=>'칼럼%s로 이동했습니다', - 'Change description'=>'설명 수정', - 'User dashboard'=>'대시보드', - 'Allow only one subtask in progress at the same time for a user'=>'한 사용자에 대한 하나의 할일만 진행 중에 가능합니다', - 'Edit column"%s"'=>'칼럼"%s"의 편집', - 'Select the new status of the subtask:"%s"'=>'서브 할일"%s"의 위상을 선택', - 'Subtask timesheet'=>'서브 할일 타임시트', - 'There is nothing to show.'=>'기록이 없습니다', - 'Time Tracking'=>'타임 트레킹', - 'You already have one subtask in progress'=>'이미 진행 중인 서브 할일가 있습니다.', - 'Which parts of the project do you want to duplicate?'=>'프로젝트의 무엇을 복제합니까?', - //'Disallow login form'=>'', - 'Start'=>'시작', - 'End'=>'종료', - 'Task age in days'=>'할일이 생긴 시간', - 'Days in this column'=>'이 칼럼에 있는 시간', - '%dd'=>'%d일', - 'Add a link'=>'링크 추가', - 'Add a new link'=>' 새로운 링크 추가', - 'Do you really want to remove this link:"%s"('=>'링크"%s"를 정말로 삭제하시겠습니까?', - 'Do you really want to remove this link with task#%d?'=>'이 링크와 할일#%d을 삭제할까요?', - 'Field required'=>'필드가 필요합니다', - 'Link added successfully.'=>'링크를 추가했습니다.', - 'Link updated successfully.'=>'링크를 갱신했습니다.', - 'Link removed successfully.'=>'링크를 삭제했습니다.', - 'Link labels'=>'링크 라벨', - 'Link modification'=>'링크의 변경', - 'Links'=>'링크', - 'Link settings'=>'링크 설정', - 'Opposite label'=>'반대의 라벨', - 'Remove a link'=>'라벨의 삭제', - 'Task\'s links'=>'할일의 라벨', - 'The labels must be different'=>' 다른 라벨을 지정하세요', - 'There is no link.'=>'링크가 없습니다', - 'This label must be unique'=>'라벨은 독특할 필요가 있습니다', - 'Unable to create your link.'=>'링크를 작성할 수 없었습니다.', - 'Unable to update your link.'=>'링크를 갱신할 수 없었습니다.', - 'Unable to remove this link.'=>'링크를 삭제할 수 없었습니다.', - 'relates to'=>'연관 링크', - 'blocks'=>'다음을 딜레이하는', - 'is blocked by'=>'다음 때문에 딜레이되는', - 'duplicates'=>'다음과 중복하는', - 'is duplicated by'=>'다음에 중복되는', - 'is a child of'=>'다음의 하위 할일', - 'is a parent of'=>'다음의 상위 할일', - 'targets milestone'=>'다음의 이정표를 목표로 하는', - 'is a milestone of'=>'다음의 이정표인', - 'fixes'=>'다음을 수정하는', - 'is fixed by'=>'다음에 의해 수정되는', - 'This task'=>'이 할일의 ', - '<1h'=>'<1시간', - '%dh'=>'%d시간', - '%b%e'=>'%b/%e', - 'Expand tasks'=>'할일 크게', - 'Collapse tasks'=>'할일 작게', - 'Expand/collapse tasks'=>'할일 크게/작게', - 'Close dialog box'=>'다이얼로그를 닫습니다', - 'Submit a form'=>'제출', - 'Board view'=>'보드 뷰', - 'Keyboard shortcuts'=>'키보드 숏 컷', - 'Open board switcher'=>'보드 전환을 열', - 'Application'=>'애플리케이션', - 'since %B %e, %Y at %k:%M %p'=>'%Y-%m-%d %p %H:%M', - 'Compact view'=>'컴팩트 뷰', - 'Horizontal scrolling'=>'세로 스크롤', - 'Compact/wide view'=>'컴팩트/와이드 뷰', - 'No results match:'=>'결과가 일치하지 않았습니다', - 'Currency'=>'통화', - 'Files'=>'파일', - 'Images'=>'이미지', - 'Private project'=>'개인 프로젝트', - 'AUD-Australian Dollar'=>'AUD-호주 달러', - 'CAD-Canadian Dollar'=>'CAD-캐나다 달러', - 'CHF-Swiss Francs'=>'CHF-스위스 프랑', - 'Custom Stylesheet'=>'커스텀 스타일 시트', - 'download'=>'다운로드', - 'EUR-Euro'=>'EUR-유로', - 'GBP-British Pound'=>'GBP-독 파운드', - 'INR-Indian Rupee'=>'INR-이루피', - 'JPY-Japanese Yen'=>'JPY-일본 엔', - 'NZD-New Zealand Dollar'=>'NZD-NZ달러', - 'RSD-Serbian dinar'=>'RSD-세르비아 데나ー루', - 'USD-US Dollar'=>'USD-미국 달러', - 'Destination column'=>'이동 후 칼럼', - 'Move the task to another column when assigned to a user'=>'사용자의 할당을 하면 할일을 다른 칼럼에 이동', - 'Move the task to another column when assignee is cleared'=>'사용자의 할당이 없어지면 할일을 다른 칼럼에 이동', - 'Source column'=>'이동 전 칼럼', - 'Transitions'=>'이력', - 'Executer'=>'실행자', - 'Time spent in the column'=>'칼럼에 있던 시간', - 'Task transitions'=>'할일 천이', - 'Task transitions export'=>'할일 천이를 출력', - 'This report contains all column moves for each task with the date, the user and the time spent for each transition.'=>'이 리포트는 할일의 칼럼 간 이동을 시간, 유저, 경과 시간과 함께 기록한 것입니다.', - 'Currency rates'=>'환율', - 'Rate'=>'레이트', - 'Change reference currency'=>'현재의 기축 통화', - 'Add a new currency rate'=>' 새로운 통화 환율을 추가', - 'Reference currency'=>'기축 통화', - //'The currency rate have been added successfully.'=>'', - 'Unable to add this currency rate.'=>'이 통화 환율을 추가할 수 없습니다.', - 'Webhook URL'=>'Webhook URL', - '%s remove the assignee of the task %s'=>'%s이 할일 %s의 담당을 삭제했습니다', - 'Enable Gravatar images'=>'Gravatar이미지를 활성화', - 'Information'=>'정보', - 'Check two factor authentication code'=>'2단 인증을 체크한다', - 'The two factor authentication code is not valid.'=>'2단 인증 코드는 무효입니다.', - 'The two factor authentication code is valid.'=>'2단 인증 코드는 유효합니다.', - 'Code'=>'코드', - 'Two factor authentication'=>'2단 인증', - 'This QR code contains the key URI:'=>'이 QR코드가 URI키를 포함하고 있습니다:', - 'Check my code'=>'코드 체크', - 'Secret key:'=>'비밀 키:', - 'Test your device'=>'디바이스 테스트', - - - + // 'number.decimals_separator' => '', + // 'number.thousands_separator' => '', + 'None' => '없음', + 'edit' => '수정', + 'Edit' => '수정', + 'remove' => '삭제', + 'Remove' => '삭제', + 'Yes' => '예', + 'No' => '아니오', + 'cancel' => '취소', + 'or' => '또는', + 'Yellow' => '노랑', + 'Blue' => '파랑', + 'Green' => '초록', + 'Purple' => '보라', + 'Red' => '빨강', + 'Orange' => '주황', + 'Grey' => '회색', + 'Brown' => '브라운', + // 'Deep Orange' => '', + // 'Dark Grey' => '', + // 'Pink' => '', + // 'Teal' => '', + // 'Cyan' => '', + // 'Lime' => '', + // 'Light Green' => '', + // 'Amber' => '', + 'Save' => '저장', + 'Login' => '로그인', + 'Official website:' => '공식 웹사이트:', + 'Unassigned' => '담당자 없음', + 'View this task' => '이 할일 보기', + 'Remove user' => '사용자 삭제', + 'Do you really want to remove this user: "%s"?' => '사용자 "%s"를 정말로 삭제하시겠습니까?', + 'New user' => '사용자를 추가하는 ', + 'All users' => '모든 사용자', + 'Username' => '사용자 이름', + 'Password' => '패스워드', + 'Administrator' => '관리자', + 'Sign in' => '로그인', + 'Users' => '사용자', + 'No user' => '사용자가 없습니다', + 'Forbidden' => '접근 거부', + 'Access Forbidden' => '접속이 거부되었습니다', + 'Edit user' => '사용자를 변경하는 ', + 'Logout' => '로그아웃', + 'Bad username or password' => '사용자 이름 또는 패스워드가 다릅니다.', + 'Edit project' => '프로젝트 수정', + 'Name' => '이름', + 'Projects' => '프로젝트', + 'No project' => '프로젝트가 없습니다', + 'Project' => '프로젝트', + 'Status' => '상태', + 'Tasks' => '할일', + 'Board' => '보드', + 'Actions' => 'Actions', + 'Inactive' => '무효', + 'Active' => '유효', + '%d tasks on the board' => '%d개의 할일', + '%d tasks in total' => '총 %d개의 할일', + 'Unable to update this board.' => '보드를 갱신할 수 없었습니다', + 'Edit board' => '보드를 변경하는 ', + 'Disable' => '비활성화', + 'Enable' => '유효하게 한다', + 'New project' => '새 프로젝트', + // 'Do you really want to remove this project: "%s"?' => '', + 'Remove project' => '프로젝트의 삭제', + // 'Edit the board for "%s"' => '', + 'All projects' => '모든 프로젝트', + 'Add a new column' => '칼럼의 추가', + 'Title' => '제목', + 'Assigned to %s' => '담당자 %s', + 'Remove a column' => '칼럼 삭제', + 'Remove a column from a board' => '보드에서 칼럼 삭제', + 'Unable to remove this column.' => '(※)컬럼을 삭제할 수 없었습니다.', + // 'Do you really want to remove this column: "%s"?' => '', + 'This action will REMOVE ALL TASKS associated to this column!' => '이 조작은 이 컬럼에 할당된 『 모든 할일을 삭제 』합니다!', + 'Settings' => '설정', + 'Application settings' => '애플리케이션의 설정', + 'Language' => '언어', + 'Webhook token:' => 'Webhook토큰:', + 'API token:' => 'API토큰:', + 'Database size:' => '데이터베이스의 사이즈:', + 'Download the database' => '데이터베이스의 다운로드', + 'Optimize the database' => '데이터베이스 최적화', + '(VACUUM command)' => '(VACUUM명령)', + '(Gzip compressed Sqlite file)' => '(GZip명령으로 압축된 Sqlite파일)', + 'Close a task' => '할일 마치기', + 'Edit a task' => '할일 수정', + 'Column' => '칼럼', + 'Color' => '색', + 'Assignee' => '담당자', + 'Create another task' => '다른 할일 추가', + 'New task' => '새로운 할일', + 'Open a task' => '할일 열기', + // 'Do you really want to open this task: "%s"?' => '', + 'Back to the board' => '보드로 돌아가기', + 'There is nobody assigned' => '담당자가 없습니다', + 'Column on the board:' => '칼럼:', + 'Close this task' => '할일 마치기', + 'Open this task' => '할일을 열다', + 'There is no description.' => '설명이 없다', + 'Add a new task' => '할일을 추가하는 ', + 'The username is required' => '사용자 이름이 필요합니다', + // 'The maximum length is %d characters' => '', + // 'The minimum length is %d characters' => '', + 'The password is required' => '패스워드가 필요합니다', + 'This value must be an integer' => '정수로 입력하세요', + 'The username must be unique' => '사용자 이름이 이미 사용되고 있습니다', + 'The user id is required' => '사용자 ID가 필요합니다', + 'Passwords don\'t match' => '패스워드가 일치하지 않습니다', + 'The confirmation is required' => '확인용 패스워드를 입력하세요', + 'The project is required' => '프로젝트가 필요합니다', + 'The id is required' => 'ID가 필요합니다', + 'The project id is required' => '프로젝트 ID가 필요합니다', + 'The project name is required' => '프로젝트 이름이 필요합니다', + 'The title is required' => '제목이 필요합니다', + 'Settings saved successfully.' => '설정을 저장하였습니다', + 'Unable to save your settings.' => '설정의 보존에 실패했습니다.', + 'Database optimization done.' => '데이터베이스 최적화가 끝났습니다.', + 'Your project have been created successfully.' => '프로젝트를 작성했습니다.', + 'Unable to create your project.' => '프로젝트의 작성에 실패했습니다.', + 'Project updated successfully.' => '프로젝트를 갱신했습니다.', + 'Unable to update this project.' => '프로젝트의 갱신에 실패했습니다.', + 'Unable to remove this project.' => '프로젝트의 삭제에 실패했습니다.', + 'Project removed successfully.' => '프로젝트를 삭제했습니다.', + 'Project activated successfully.' => '프로젝트를 유효로 했습니다.', + 'Unable to activate this project.' => '프로젝트의 유효하게 못했어요.', + 'Project disabled successfully.' => '프로젝트를 무효로 했습니다.', + 'Unable to disable this project.' => '프로젝트의 무효화할 수 없었습니다.', + 'Unable to open this task.' => '할일의 오픈에 실패했습니다.', + 'Task opened successfully.' => '할일을 오픈했습니다.', + 'Unable to close this task.' => '할일의 클로즈에 실패했습니다.', + 'Task closed successfully.' => '할일을 마쳤습니다.', + 'Unable to update your task.' => '할일의 갱신에 실패했습니다.', + 'Task updated successfully.' => '할일을 갱신했습니다.', + 'Unable to create your task.' => '할일의 추가에 실패했습니다.', + 'Task created successfully.' => '할일을 추가했습니다.', + 'User created successfully.' => '사용자를 추가했습니다.', + 'Unable to create your user.' => '사용자의 추가에 실패했습니다.', + 'User updated successfully.' => '사용자를 갱신했습니다.', + 'Unable to update your user.' => '사용자의 갱신에 실패했습니다.', + 'User removed successfully.' => '사용자를 삭제했습니다.', + 'Unable to remove this user.' => '사용자 삭제에 실패했습니다.', + 'Board updated successfully.' => '보드를 갱신했습니다.', + 'Ready' => '준비완료', + 'Backlog' => '요구사항', + 'Work in progress' => '진행중', + 'Done' => '완료', + 'Application version:' => '애플리케이션의 버전:', + 'Id' => 'ID', + '%d closed tasks' => '%d개의 마친 할일', + 'No task for this project' => '이 프로젝트에 할일이 없습니다', + 'Public link' => '공개 접속 링크', + 'Change assignee' => '담당자 변경', + 'Change assignee for the task "%s"' => '할일 "%s"의 담당자를 변경', + 'Timezone' => '시간대', + 'Sorry, I didn\'t find this information in my database!' => '데이터베이스에서 정보가 발견되지 않았습니다!', + 'Page not found' => '페이지가 발견되지 않는다', + 'Complexity' => '복잡도', + 'Task limit' => '할일 수 제한', + 'Task count' => '할일 수', + 'User' => '사용자', + 'Comments' => '댓글', + 'Leave a comment' => '댓글 남기기', + 'Comment is required' => '댓글을 입력하세요', + 'Leave a description' => '설명을 입력하세요', + 'Comment added successfully.' => '의견을 추가했습니다.', + 'Unable to create your comment.' => '댓글의 추가에 실패했습니다.', + 'Edit this task' => '할일 수정', + 'Due Date' => '마감일', + 'Invalid date' => '날짜가 무효입니다', + 'Automatic actions' => '자동액션 관리', + 'Your automatic action have been created successfully.' => '자동 액션을 작성했습니다.', + 'Unable to create your automatic action.' => '자동 액션의 작성에 실패했습니다.', + 'Remove an action' => '자동 액션의 삭제', + 'Unable to remove this action.' => '자동 액션의 삭제에 실패했습니다.', + 'Action removed successfully.' => '자동 액션의 삭제에 성공했어요.', + // 'Automatic actions for the project "%s"' => '', + 'Add an action' => '자동 액션 추가', + 'Event name' => '이벤트 이름', + 'Action name' => '액션 이름', + 'Action parameters' => '액션의 바로미터', + 'Action' => '액션', + 'Event' => '이벤트', + 'When the selected event occurs execute the corresponding action.' => '선택된 이벤트가 발생했을 때 대응하는 액션을 실행한다.', + 'Next step' => '다음 단계', + 'Define action parameters' => '액션의 바로미터', + // 'Do you really want to remove this action: "%s"?' => '', + 'Remove an automatic action' => '자동 액션의 삭제', + 'Assign the task to a specific user' => '할일 담당자를 할당', + 'Assign the task to the person who does the action' => '액션을 일으킨 사용자를 담당자이자', + 'Duplicate the task to another project' => ' 다른 프로젝트에 할일을 복제하는 ', + 'Move a task to another column' => '할일을 다른 칼럼에 이동하는 ', + 'Task modification' => '할일 변경', + 'Task creation' => '할일을 만들', + 'Closing a task' => '할일을 닫혔다', + 'Assign a color to a specific user' => '색을 사용자에 할당', + 'Column title' => '칼럼의 제목', + 'Position' => '위치', + 'Duplicate to another project' => '다른 프로젝트에 복사', + 'Duplicate' => '복사', + 'link' => '링크', + 'Comment updated successfully.' => '댓글을 갱신했습니다.', + 'Unable to update your comment.' => '댓글의 갱신에 실패했습니다.', + 'Remove a comment' => '댓글 삭제', + 'Comment removed successfully.' => '댓글을 삭제했습니다.', + 'Unable to remove this comment.' => '댓글의 삭제에 실패했습니다.', + 'Do you really want to remove this comment?' => '댓글을 삭제합니까?', + 'Current password for the user "%s"' => '사용자 "%s"의 현재 패스워드', + 'The current password is required' => '현재의 패스워드를 입력하세요', + 'Wrong password' => '패스워드가 다릅니다', + 'Unknown' => '불명', + 'Last logins' => '마지막 로그인', + 'Login date' => '로그인 일시', + 'Authentication method' => '인증 방법', + 'IP address' => 'IP 주소', + 'User agent' => '사용자 에이전트', + 'Persistent connections' => '세션', + 'No session.' => '세션 없음', + 'Expiration date' => '유효기간', + 'Remember Me' => '자동 로그인', + 'Creation date' => '작성일', + 'Everybody' => '모두', + 'Open' => '열림', + 'Closed' => '닫힘', + 'Search' => '검색', + 'Nothing found.' => '결과가 없습니다', + 'Due date' => '마감일', + 'Others formats accepted: %s and %s' => ' 다른 서식: %s 또는 %s', + 'Description' => '설명', + '%d comments' => '%d개의 댓글', + '%d comment' => '%d개의 댓글', + 'Email address invalid' => '메일 주소가 올바르지 않습니다.', + // 'Your external account is not linked anymore to your profile.' => '', + // 'Unable to unlink your external account.' => '', + // 'External authentication failed' => '', + // 'Your external account is linked to your profile successfully.' => '', + 'Email' => '이메일', + 'Task removed successfully.' => '할일을 삭제했습니다.', + 'Unable to remove this task.' => '할일 삭제에 실패했습니다.', + 'Remove a task' => '할일 삭제', + // 'Do you really want to remove this task: "%s"?' => '', + 'Assign automatically a color based on a category' => '카테고리에 바탕을 두고 색을 바꾸고', + 'Assign automatically a category based on a color' => '색에 바탕을 두고 카테고리를 바꾸었다', + 'Task creation or modification' => '할일의 작성 또는 변경', + 'Category' => '카테고리', + 'Category:' => '카테고리:', + 'Categories' => '카테고리', + 'Category not found.' => '카테고리가 발견되지 않습니다', + 'Your category have been created successfully.' => '카테고리를 작성했습니다.', + 'Unable to create your category.' => '카테고리의 작성에 실패했습니다.', + 'Your category have been updated successfully.' => '카테고리를 갱신했습니다.', + 'Unable to update your category.' => '카테고리의 갱신에 실패했습니다.', + 'Remove a category' => '카테고리의 삭제', + 'Category removed successfully.' => '카테고리를 삭제했습니다.', + 'Unable to remove this category.' => '카테고리를 삭제할 수 없었습니다.', + // 'Category modification for the project "%s"' => '', + 'Category Name' => '카테고리 이름', + 'Add a new category' => '카테고리의 추가', + // 'Do you really want to remove this category: "%s"?' => '', + 'All categories' => '모든 카테고리', + 'No category' => '카테고리 없음', + 'The name is required' => '이름을 입력하십시오', + 'Remove a file' => '파일 삭제', + 'Unable to remove this file.' => '파일 삭제에 실패했습니다.', + 'File removed successfully.' => '파일을 삭제했습니다.', + 'Attach a document' => '문서 첨부', + 'Do you really want to remove this file: "%s"?' => '파일 "%s" 을 삭제할까요?', + 'Attachments' => '첨부', + 'Edit the task' => '할일 수정', + 'Edit the description' => '설명 수정', + 'Add a comment' => '댓글 추가', + 'Edit a comment' => '댓글 수정', + 'Summary' => '개요', + 'Time tracking' => '시간 추적', + 'Estimate:' => '예측:', + 'Spent:' => '경과:', + 'Do you really want to remove this sub-task?' => '서브 할일을 삭제합니까?', + 'Remaining:' => '나머지:', + 'hours' => '시간', + 'spent' => '경과', + 'estimated' => '예측', + 'Sub-Tasks' => '서브 할일', + 'Add a sub-task' => '서브 할일 추가', + 'Original estimate' => '최초 예측시간', + 'Create another sub-task' => '다음 서브 할일 추가', + 'Time spent' => '경과시간', + 'Edit a sub-task' => '서브 할일을 변경하는 ', + 'Remove a sub-task' => '서브 할일을 삭제하는 ', + 'The time must be a numeric value' => '시간은 숫자로 입력하세요', + 'Todo' => '할일 예정', + 'In progress' => '할일 중', + 'Sub-task removed successfully.' => '서브 할일을 삭제했습니다.', + 'Unable to remove this sub-task.' => '서브 할일의 삭제가 실패했습니다.', + 'Sub-task updated successfully.' => '서브 할일을 갱신했습니다.', + 'Unable to update your sub-task.' => '서브 할일의 경신에 실패했습니다.', + 'Unable to create your sub-task.' => '서브 할일의 추가에 실패했습니다.', + 'Sub-task added successfully.' => '서브 할일을 추가했습니다.', + 'Maximum size: ' => '최대: ', + 'Unable to upload the file.' => '파일 업로드에 실패했습니다.', + 'Display another project' => '프로젝트 보기', + 'Created by %s' => '작성자 %s', + 'Tasks Export' => '할일 내보내기', + // 'Tasks exportation for "%s"' => '', + 'Start Date' => '시작일', + 'End Date' => '종료일', + 'Execute' => '실행', + 'Task Id' => '할일 ID', + 'Creator' => '작성자', + 'Modification date' => '변경 일', + 'Completion date' => '완료일', + 'Clone' => '복사', + 'Project cloned successfully.' => '프로젝트를 복제했습니다.', + 'Unable to clone this project.' => '프로젝트의 복제에 실패했습니다.', + 'Enable email notifications' => '이메일 알림 설정', + 'Task position:' => '할일 위치:', + // 'The task #%d have been opened.' => '', + // 'The task #%d have been closed.' => '', + 'Sub-task updated' => '서브 할일 갱신', + 'Title:' => '제목:', + 'Status:' => '상태:', + 'Assignee:' => '담당:', + 'Time tracking:' => '시간 계측:', + 'New sub-task' => '새로운 서브 할일', + // 'New attachment added "%s"' => '', + 'New comment posted by %s' => '"%s"님이 댓글을 추가하였습니다', + 'New attachment' => ' 새로운 첨부 파일', + 'New comment' => ' 새로운 댓글', + 'Comment updated' => '댓글가 갱신되었습니다', + 'New subtask' => ' 새로운 서브 할일', + 'Subtask updated' => '서브 할일 갱신', + 'Task updated' => '할일 업데이트', + 'Task closed' => '할일 마침', + 'Task opened' => '할일 시작', + 'I want to receive notifications only for those projects:' => '다음 프로젝트의 알림만 받겠습니다:', + 'view the task on Kanboard' => 'Kanboard에서 할일을 본다', + 'Public access' => '공개 접속 설정', + 'Active tasks' => '활성화된 할일', + 'Disable public access' => '공개 접속 비활성화', + 'Enable public access' => '공개 접속 활성화', + 'Public access disabled' => '공개 접속 불가', + // 'Do you really want to disable this project: "%s"?' => '', + // 'Do you really want to enable this project: "%s"?' => '', + 'Project activation' => '프로젝트의 액티베ー션', + 'Move the task to another project' => '할일별 프로젝트에 옮기', + 'Move to another project' => '다른 프로젝트로 이동', + 'Do you really want to duplicate this task?' => '할일을 복제합니까?', + 'Duplicate a task' => '할일 복사', + 'External accounts' => '외부 계정', + 'Account type' => '계정종류', + 'Local' => '로컬', + 'Remote' => '원격', + 'Enabled' => '활성화', + 'Disabled' => '비활성화', + 'Username:' => '사용자명', + 'Name:' => '이름:', + 'Email:' => '이메일:', + 'Notifications:' => '알림:', + 'Notifications' => '알림', + 'Account type:' => '계정종류:', + 'Edit profile' => '프로필 변경', + 'Change password' => '패스워드 변경', + 'Password modification' => '패스워드 변경', + 'External authentications' => '외부 인증', + 'Never connected.' => '접속기록없음', + 'No external authentication enabled.' => '외부 인증이 설정되어 있지 않습니다.', + 'Password modified successfully.' => '패스워드를 변경했습니다.', + 'Unable to change the password.' => '비밀 번호가 변경할 수 없었습니다.', + 'Change category for the task "%s"' => '할일 "%s"의 카테고리의 변경', + 'Change category' => '카테고리 수정', + '%s updated the task %s' => '%s이 할일 %s을 업데이트했습니다', + // '%s opened the task %s' => '', + '%s moved the task %s to the position #%d in the column "%s"' => '%s이 할일%s을 위치#%d컬럼%s로 옮겼습니다', + '%s moved the task %s to the column "%s"' => '%s이 할일 %s을 칼럼 "%s" 로 옮겼습니다', + '%s created the task %s' => '%s이 할일%s을 추가했습니다', + '%s closed the task %s' => '%s이 할일%s을 마쳤습니다', + '%s created a subtask for the task %s' => '%s이 할일%s의 서브 할일을 추가했습니다', + '%s updated a subtask for the task %s' => '%s이 할일%s의 서브 할일을 갱신했습니다', + 'Assigned to %s with an estimate of %s/%sh' => '담당자 %s에게 예상 %s/%sh로 할당되었습니다', + // 'Not assigned, estimate of %sh' => '', + '%s updated a comment on the task %s' => '%s이 할일%s의 댓글을 수정했습니다', + '%s commented the task %s' => '%s이 할일%s에 댓글을 남겼습니다', + '%s\'s activity' => '%s의 활동', + 'RSS feed' => 'RSS피드', + // '%s updated a comment on the task #%d' => '', + // '%s commented on the task #%d' => '', + // '%s updated a subtask for the task #%d' => '', + // '%s created a subtask for the task #%d' => '', + '%s updated the task #%d' => '%s이 할일#%d을 갱신했습니다', + '%s created the task #%d' => '%s이 할일#%d을 추가했습니다', + '%s closed the task #%d' => '%s이 할일#%d을 닫혔습니다', + '%s open the task #%d' => '%s이 할일#%d를 오픈했습니다', + '%s moved the task #%d to the column "%s"' => '%s이 할일#%d을 칼럼"%s"로 옮겼습니다', + // '%s moved the task #%d to the position %d in the column "%s"' => '', + 'Activity' => '활동', + // 'Default values are "%s"' => '', + // 'Default columns for new projects (Comma-separated)' => '', + 'Task assignee change' => '담당자의 변경', + // '%s change the assignee of the task #%d to %s' => '', + '%s changed the assignee of the task %s to %s' => '%s이 할일 %s의 담당을 %s로 변경했습니다', + 'New password for the user "%s"' => '사용자 "%s"의 새로운 패스워드', + 'Choose an event' => '행사의 선택', + 'Create a task from an external provider' => '할일을 외부 서비스로부터 작성하는 ', + 'Change the assignee based on an external username' => '담당자를 외부 서비스에 바탕을 두고 변경하는 ', + 'Change the category based on an external label' => '카테고리를 외부 서비스에 바탕을 두고 변경하는 ', + 'Reference' => '참조', + 'Label' => '라벨', + 'Database' => '데이터베이스', + 'About' => '정보', + 'Database driver:' => '데이터베이스 드라이버:', + 'Board settings' => '기본 설정', + 'URL and token' => 'URL와 토큰', + 'Webhook settings' => 'Webhook의 설정', + 'URL for task creation:' => 'Task작성의 URL:', + 'Reset token' => '토큰 리셋', + 'API endpoint:' => 'API엔드 포인트:', + 'Refresh interval for private board' => '비공개 보드의 갱신 빈도', + 'Refresh interval for public board' => '공개 보드의 갱신 빈도', + 'Task highlight period' => '할일의 하이라이트 기간', + // 'Period (in second) to consider a task was modified recently (0 to disable, 2 days by default)' => '', + // 'Frequency in second (60 seconds by default)' => '', + // 'Frequency in second (0 to disable this feature, 10 seconds by default)' => '', + 'Application URL' => '애플리케이션의 URL', + 'Token regenerated.' => '토큰이 다시 생성되었습니다.', + 'Date format' => '데이터 포맷', + // 'ISO format is always accepted, example: "%s" and "%s"' => '', + 'New private project' => '새 비공개 프로젝트', + 'This project is private' => '이 프로젝트는 비공개입니다', + 'Add' => '추가', + 'Start date' => '시작시간', + 'Time estimated' => '예상시간', + 'There is nothing assigned to you.' => '할일이 없습니다. 옆사람의 일을 도와주면 어떨까요?', + 'My tasks' => '내 할일', + 'Activity stream' => '활동기록', + 'Dashboard' => '대시보드', + 'Confirmation' => '확인', + 'Allow everybody to access to this project' => '모든 사람이 이 프로젝트에 접근할 수 있도록 합니다', + 'Everybody have access to this project.' => '누구나 이 프로젝트에 액세스 할 수 있습니다', + 'Webhooks' => 'Webhook', + 'API' => 'API', + 'Create a comment from an external provider' => '외부 서비스로부터 의견을 작성한다', + 'Project management' => '프로젝트 관리', + 'My projects' => '내 프로젝트', + 'Columns' => '칼럼', + 'Task' => '할일', + 'Your are not member of any project.' => '어떤 프로젝트에도 속하지 않습니다.', + 'Percentage' => '비중', + 'Number of tasks' => '할일 수', + 'Task distribution' => '할일 분포', + 'Reportings' => '리포트', + // 'Task repartition for "%s"' => '', + 'Analytics' => '분석', + 'Subtask' => '서브 할일', + 'My subtasks' => '내 서브 할일', + 'User repartition' => '담당자 분포', + // 'User repartition for "%s"' => '', + 'Clone this project' => '이 프로젝트를 복제하는 ', + 'Column removed successfully.' => '(※)컬럼을 삭제했습니다', + 'Not enough data to show the graph.' => '그래프를 선묘화하려면 나왔지만 부족합니다', + 'Previous' => ' 돌아가', + 'The id must be an integer' => 'id은 숫자가 아니면 안 됩니다', + 'The project id must be an integer' => 'project id은 숫자가 아니면 안 됩니다', + 'The status must be an integer' => 'status는 숫자지 않으면 안 됩니다', + 'The subtask id is required' => 'subtask id가 필요합니다', + 'The subtask id must be an integer' => 'subtask id은 숫자가 아니면 안 됩니다', + 'The task id is required' => 'task id가 필요합니다', + 'The task id must be an integer' => 'task id은 숫자가 아니면 안 됩니다', + 'The user id must be an integer' => 'user id은 숫자가 아니면 안 됩니다', + 'This value is required' => '이 값이 필요합니다', + 'This value must be numeric' => '이 값은 숫자가 아니면 안 됩니다', + 'Unable to create this task.' => '이 할일을 작성할 수 없었습니다', + 'Cumulative flow diagram' => '축적 플로', + // 'Cumulative flow diagram for "%s"' => '', + 'Daily project summary' => '일시 프로젝트 개요', + 'Daily project summary export' => '일시 프로젝트 개요의 출력', + // 'Daily project summary export for "%s"' => '', + 'Exports' => '출력', + 'This export contains the number of tasks per column grouped per day.' => '이 출력은 날짜의 칼람별 할일 수를 집계한 것입니다', + 'Active swimlanes' => '액티브한 스윔레인', + 'Add a new swimlane' => ' 새로운 스윔레인', + 'Change default swimlane' => '기본 스윔레인의 변경', + 'Default swimlane' => '기본 스윔레인', + // 'Do you really want to remove this swimlane: "%s"?' => '', + 'Inactive swimlanes' => '인터랙티브한 스윔레인', + 'Remove a swimlane' => '스윔레인의 삭제', + 'Show default swimlane' => '기본 스윔레인의 표시', + // 'Swimlane modification for the project "%s"' => '', + 'Swimlane not found.' => '스윔레인이 발견되지 않습니다.', + 'Swimlane removed successfully.' => '스윔레인을 삭제했습니다.', + 'Swimlanes' => '스윔레인', + 'Swimlane updated successfully.' => '스윔레인을 갱신했습니다.', + 'The default swimlane have been updated successfully.' => '기본 스윔레인을 갱신했습니다.', + 'Unable to remove this swimlane.' => '스윔레인을 삭제할 수 없었습니다.', + 'Unable to update this swimlane.' => '스윔레인을 갱신할 수 없었습니다.', + 'Your swimlane have been created successfully.' => '스윔레인이 작성되었습니다.', + // 'Example: "Bug, Feature Request, Improvement"' => '', + // 'Default categories for new projects (Comma-separated)' => '', + 'Integrations' => '연계', + 'Integration with third-party services' => '외부 서비스 연계', + 'Subtask Id' => '서브 할일 Id', + 'Subtasks' => '서브 할일', + 'Subtasks Export' => '서브 할일 출력', + // 'Subtasks exportation for "%s"' => '', + 'Task Title' => '할일 제목', + 'Untitled' => '제목 없음', + 'Application default' => '애플리케이션 기본', + 'Language:' => '언어:', + 'Timezone:' => '시간대:', + 'All columns' => '모든 칼럼', + 'Calendar' => '달력', + 'Next' => '다음에 ', + '#%d' => '#%d', + 'All swimlanes' => '모든 스윔레인', + 'All colors' => '모든 색', + // 'Moved to column %s' => '', + 'Change description' => '설명 수정', + 'User dashboard' => '대시보드', + 'Allow only one subtask in progress at the same time for a user' => '한 사용자에 대한 하나의 할일만 진행 중에 가능합니다', + // 'Edit column "%s"' => '', + // 'Select the new status of the subtask: "%s"' => '', + 'Subtask timesheet' => '서브 할일 타임시트', + 'There is nothing to show.' => '기록이 없습니다', + 'Time Tracking' => '타임 트레킹', + 'You already have one subtask in progress' => '이미 진행 중인 서브 할일가 있습니다.', + 'Which parts of the project do you want to duplicate?' => '프로젝트의 무엇을 복제합니까?', + // 'Disallow login form' => '', + 'Start' => '시작', + 'End' => '종료', + 'Task age in days' => '할일이 생긴 시간', + 'Days in this column' => '이 칼럼에 있는 시간', + '%dd' => '%d일', + 'Add a new link' => ' 새로운 링크 추가', + // 'Do you really want to remove this link: "%s"?' => '', + // 'Do you really want to remove this link with task #%d?' => '', + 'Field required' => '필드가 필요합니다', + 'Link added successfully.' => '링크를 추가했습니다.', + 'Link updated successfully.' => '링크를 갱신했습니다.', + 'Link removed successfully.' => '링크를 삭제했습니다.', + 'Link labels' => '링크 라벨', + 'Link modification' => '링크의 변경', + 'Links' => '링크', + 'Link settings' => '링크 설정', + 'Opposite label' => '반대의 라벨', + 'Remove a link' => '라벨의 삭제', + 'Task\'s links' => '할일의 라벨', + 'The labels must be different' => ' 다른 라벨을 지정하세요', + 'There is no link.' => '링크가 없습니다', + 'This label must be unique' => '라벨은 독특할 필요가 있습니다', + 'Unable to create your link.' => '링크를 작성할 수 없었습니다.', + 'Unable to update your link.' => '링크를 갱신할 수 없었습니다.', + 'Unable to remove this link.' => '링크를 삭제할 수 없었습니다.', + 'relates to' => '연관 링크', + 'blocks' => '다음을 딜레이하는', + 'is blocked by' => '다음 때문에 딜레이되는', + 'duplicates' => '다음과 중복하는', + 'is duplicated by' => '다음에 중복되는', + 'is a child of' => '다음의 하위 할일', + 'is a parent of' => '다음의 상위 할일', + 'targets milestone' => '다음의 이정표를 목표로 하는', + 'is a milestone of' => '다음의 이정표인', + 'fixes' => '다음을 수정하는', + 'is fixed by' => '다음에 의해 수정되는', + 'This task' => '이 할일의 ', + '<1h' => '<1시간', + '%dh' => '%d시간', + 'Expand tasks' => '할일 크게', + 'Collapse tasks' => '할일 작게', + 'Expand/collapse tasks' => '할일 크게/작게', + 'Close dialog box' => '다이얼로그를 닫습니다', + 'Submit a form' => '제출', + 'Board view' => '보드 뷰', + 'Keyboard shortcuts' => '키보드 숏 컷', + 'Open board switcher' => '보드 전환을 열', + 'Application' => '애플리케이션', + 'Compact view' => '컴팩트 뷰', + 'Horizontal scrolling' => '세로 스크롤', + 'Compact/wide view' => '컴팩트/와이드 뷰', + 'No results match:' => '결과가 일치하지 않았습니다', + 'Currency' => '통화', + 'Private project' => '개인 프로젝트', + // 'AUD - Australian Dollar' => '', + // 'CAD - Canadian Dollar' => '', + // 'CHF - Swiss Francs' => '', + 'Custom Stylesheet' => '커스텀 스타일 시트', + 'download' => '다운로드', + // 'EUR - Euro' => '', + // 'GBP - British Pound' => '', + // 'INR - Indian Rupee' => '', + // 'JPY - Japanese Yen' => '', + // 'NZD - New Zealand Dollar' => '', + // 'RSD - Serbian dinar' => '', + // 'USD - US Dollar' => '', + 'Destination column' => '이동 후 칼럼', + 'Move the task to another column when assigned to a user' => '사용자의 할당을 하면 할일을 다른 칼럼에 이동', + 'Move the task to another column when assignee is cleared' => '사용자의 할당이 없어지면 할일을 다른 칼럼에 이동', + 'Source column' => '이동 전 칼럼', + 'Transitions' => '이력', + 'Executer' => '실행자', + 'Time spent in the column' => '칼럼에 있던 시간', + 'Task transitions' => '할일 천이', + 'Task transitions export' => '할일 천이를 출력', + 'This report contains all column moves for each task with the date, the user and the time spent for each transition.' => '이 리포트는 할일의 칼럼 간 이동을 시간, 유저, 경과 시간과 함께 기록한 것입니다.', + 'Currency rates' => '환율', + 'Rate' => '레이트', + 'Change reference currency' => '현재의 기축 통화', + 'Add a new currency rate' => ' 새로운 통화 환율을 추가', + 'Reference currency' => '기축 통화', + // 'The currency rate have been added successfully.' => '', + 'Unable to add this currency rate.' => '이 통화 환율을 추가할 수 없습니다.', + 'Webhook URL' => 'Webhook URL', + '%s remove the assignee of the task %s' => '%s이 할일 %s의 담당을 삭제했습니다', + 'Enable Gravatar images' => 'Gravatar이미지를 활성화', + 'Information' => '정보', + 'Check two factor authentication code' => '2단 인증을 체크한다', + 'The two factor authentication code is not valid.' => '2단 인증 코드는 무효입니다.', + 'The two factor authentication code is valid.' => '2단 인증 코드는 유효합니다.', + 'Code' => '코드', + 'Two factor authentication' => '2단 인증', + // 'This QR code contains the key URI: ' => '', + 'Check my code' => '코드 체크', + // 'Secret key: ' => '', + 'Test your device' => '디바이스 테스트', // 'Assign a color when the task is moved to a specific column' => '', '%s via Kanboard' => '%s via E-board', - 'uploaded by: %s' => '업로드: %s', - 'uploaded on: %s' => '날짜: %s', - 'size: %s' => '사이즈: %s', // 'Burndown chart for "%s"' => '', // 'Burndown chart' => '', // 'This chart show the task complexity over the time (Work Remaining).' => '', @@ -689,7 +634,6 @@ return array( 'Take a screenshot and press CTRL+V or ⌘+V to paste here.' => '스크린샷을 CTRL+V 혹은 ⌘+V를 눌러 붙여넣기', 'Screenshot uploaded successfully.' => '스크린샷을 업로드하였습니다', // 'SEK - Swedish Krona' => '', - // 'The project identifier is an optional alphanumeric code used to identify your project.' => '', // 'Identifier' => '', // 'Disable two factor authentication' => '', // 'Do you really want to disable the two factor authentication for this user: "%s"?' => '', @@ -698,7 +642,6 @@ return array( // 'A task cannot be linked to itself' => '', // 'The exact same link already exists' => '', // 'Recurrent task is scheduled to be generated' => '', - // 'Recurring information' => '', // 'Score' => '', // 'The identifier must be unique' => '', // 'This linked task id doesn\'t exists' => '', @@ -780,19 +723,13 @@ return array( 'Time spent changed: %sh' => '경과시간 변경: %s시간', 'Time estimated changed: %sh' => '%s시간으로 예상시간 변경', // 'The field "%s" have been updated' => '', - 'The description have been modified' => '설명 수정', + // 'The description has been modified:' => '', 'Do you really want to close the task "%s" as well as all subtasks?' => '할일 "%s"과 서브 할일을 모두 마치시겠습니까?', - // 'Swimlane: %s' => '', 'I want to receive notifications for:' => '다음의 알림을 받기를 원합니다:', 'All tasks' => '모든 할일', 'Only for tasks assigned to me' => '내가 담당자인 일', 'Only for tasks created by me' => '내가 만든 일', 'Only for tasks created by me and assigned to me' => '내가 만들었거나 내가 담당자인 일', - // '%A' => '', - // '%b %e, %Y, %k:%M %p' => '', - 'New due date: %B %e, %Y' => '종료날짜 변경: %Y-%m-%d %p %H:%M', - 'Start date changed: %B %e, %Y' => '시작시간 변경: %Y-%m-%d %p %H:%M', - // '%k:%M %p' => '', // '%%Y-%%m-%%d' => '', // 'Total for all columns' => '', // 'You need at least 2 days of data to show the chart.' => '', @@ -805,8 +742,6 @@ return array( 'My activity stream' => '내 활동기록', 'My calendar' => '내 캘린더', // 'Search tasks' => '', - 'Back to the calendar' => '달력으로 돌아가기', - 'Filters' => '필터', 'Reset filters' => '필터 리셋', 'My tasks due tomorrow' => '내일까지 내 할일', 'Tasks due today' => '오늘까지 할일', @@ -817,7 +752,6 @@ return array( 'Not assigned' => '담당자가 없는 일', 'View advanced search syntax' => '추가 검색 문법보기', 'Overview' => '개요', - // '%b %e %Y' => '', // 'Board/Calendar/List view' => '', // 'Switch to the board view' => '', // 'Switch to the calendar view' => '', @@ -850,10 +784,6 @@ return array( // 'This chart show the average lead and cycle time for the last %d tasks over the time.' => '', // 'Average time into each column' => '', // 'Lead and cycle time' => '', - // 'Google Authentication' => '', - // 'Help on Google authentication' => '', - // 'Github Authentication' => '', - // 'Help on Github authentication' => '', 'Lead time: ' => '리드 타임: ', 'Cycle time: ' => '사이클 타임: ', 'Time spent into each column' => '각 칼럼에서 걸린 시간', @@ -862,16 +792,12 @@ return array( // 'If the task is not closed the current time is used instead of the completion date.' => '', // 'Set automatically the start date' => '', 'Edit Authentication' => '계정 수정', - // 'Google Id' => '', - // 'Github Id' => '', // 'Remote user' => '', // 'Remote users do not store their password in Kanboard database, examples: LDAP, Google and Github accounts.' => '', // 'If you check the box "Disallow login form", credentials entered in the login form will be ignored.' => '', 'New remote user' => '새로운 원격유저', 'New local user' => '새로운 유저', // 'Default task color' => '', - 'Hide sidebar' => '사이드바 닫기', - 'Expand sidebar' => '사이드바 열기', 'This feature does not work with all browsers.' => '이 기능은 일부 브라우저에서 작동하지 않습니다', // 'There is no destination project available.' => '', // 'Trigger automatically subtask time tracking' => '', @@ -905,7 +831,6 @@ return array( 'open file' => '열기', 'End date' => '종료 날짜', 'Users overview' => '유저 전체보기', - 'Managers' => '매니저', 'Members' => '멤버', // 'Shared project' => '', 'Project managers' => '프로젝트 매니저', @@ -916,19 +841,9 @@ return array( // 'End date:' => '', 'There is no start date or end date for this project.' => '이 프로젝트에는 시작날짜와 종료날짜가 없습니다', 'Projects Gantt chart' => '프로젝트 간트차트', - // 'Start date: %s' => '', - // 'End date: %s' => '', - // 'Link type' => '', // 'Change task color when using a specific task link' => '', // 'Task link creation or modification' => '', - // 'Login with my Gitlab Account' => '', // 'Milestone' => '', - // 'Gitlab Authentication' => '', - // 'Help on Gitlab authentication' => '', - // 'Gitlab Id' => '', - // 'Gitlab Account' => '', - // 'Link my Gitlab Account' => '', - // 'Unlink my Gitlab Account' => '', // 'Documentation: %s' => '', // 'Switch to the Gantt chart view' => '', // 'Reset the search/filter box' => '', @@ -977,7 +892,6 @@ return array( // 'Shared' => '', // 'Owner' => '', 'Unread notifications' => '읽지않은 알림', - 'My filters' => '내 필터', 'Notification methods:' => '알림 방법', // 'Import tasks from CSV file' => '', // 'Unable to read your file' => '', @@ -1015,6 +929,7 @@ return array( // 'Usernames must be lowercase and unique' => '', // 'Passwords will be encrypted if present' => '', '%s attached a new file to the task %s' => '%s이 새로운 파일을 할일 %s에 추가했습니다', + // 'Link type' => '', // 'Assign automatically a category based on a link' => '', // 'BAM - Konvertible Mark' => '', // 'Assignee Username' => '', @@ -1107,4 +1022,135 @@ return array( // 'No plugin has registered a project notification method. You can still configure individual notifications in your user profile.' => '', 'My dashboard' => '대시보드', 'My profile' => '프로필', + // 'Project owner: ' => '', + // 'The project identifier is optional and must be alphanumeric, example: MYPROJECT.' => '', + // 'Project owner' => '', + // 'Those dates are useful for the project Gantt chart.' => '', + // 'Private projects do not have users and groups management.' => '', + // 'There is no project member.' => '', + // 'Priority' => '', + // 'Task priority' => '', + // 'General' => '', + // 'Dates' => '', + // 'Default priority' => '', + // 'Lowest priority' => '', + // 'Highest priority' => '', + // 'If you put zero to the low and high priority, this feature will be disabled.' => '', + // 'Close a task when there is no activity' => '', + // 'Duration in days' => '', + // 'Send email when there is no activity on a task' => '', + // 'Unable to fetch link information.' => '', + // 'Daily background job for tasks' => '', + // 'Auto' => '', + // 'Related' => '', + // 'Attachment' => '', + // 'Title not found' => '', + // 'Web Link' => '', + // 'External links' => '', + // 'Add external link' => '', + // 'Type' => '', + // 'Dependency' => '', + // 'Add internal link' => '', + // 'Add a new external link' => '', + // 'Edit external link' => '', + // 'External link' => '', + // 'Copy and paste your link here...' => '', + // 'URL' => '', + // 'Internal links' => '', + // 'Assign to me' => '', + // 'Me' => '', + // 'Do not duplicate anything' => '', + // 'Projects management' => '', + // 'Users management' => '', + // 'Groups management' => '', + // 'Create from another project' => '', + // 'open' => '', + // 'closed' => '', + // 'Priority:' => '', + // 'Reference:' => '', + // 'Complexity:' => '', + // 'Swimlane:' => '', + // 'Column:' => '', + // 'Position:' => '', + // 'Creator:' => '', + // 'Time estimated:' => '', + // '%s hours' => '', + // 'Time spent:' => '', + // 'Created:' => '', + // 'Modified:' => '', + // 'Completed:' => '', + // 'Started:' => '', + // 'Moved:' => '', + // 'Task #%d' => '', + // 'Date and time format' => '', + // 'Time format' => '', + // 'Start date: ' => '', + // 'End date: ' => '', + // 'New due date: ' => '', + // 'Start date changed: ' => '', + // 'Disable private projects' => '', + // 'Do you really want to remove this custom filter: "%s"?' => '', + // 'Remove a custom filter' => '', + // 'User activated successfully.' => '', + // 'Unable to enable this user.' => '', + // 'User disabled successfully.' => '', + // 'Unable to disable this user.' => '', + // 'All files have been uploaded successfully.' => '', + // 'View uploaded files' => '', + // 'The maximum allowed file size is %sB.' => '', + // 'Choose files again' => '', + // 'Drag and drop your files here' => '', + // 'choose files' => '', + // 'View profile' => '', + // 'Two Factor' => '', + // 'Disable user' => '', + // 'Do you really want to disable this user: "%s"?' => '', + // 'Enable user' => '', + // 'Do you really want to enable this user: "%s"?' => '', + // 'Download' => '', + // 'Uploaded: %s' => '', + // 'Size: %s' => '', + // 'Uploaded by %s' => '', + // 'Filename' => '', + // 'Size' => '', + // 'Column created successfully.' => '', + // 'Another column with the same name exists in the project' => '', + // 'Default filters' => '', + // 'Your board doesn\'t have any column!' => '', + // 'Change column position' => '', + // 'Switch to the project overview' => '', + // 'User filters' => '', + // 'Category filters' => '', + // 'Upload a file' => '', + // 'View file' => '', + // 'Last activity' => '', + // 'Change subtask position' => '', + // 'This value must be greater than %d' => '', + // 'Another swimlane with the same name exists in the project' => '', + // 'Example: http://example.kanboard.net/ (used to generate absolute URLs)' => '', + // 'Actions duplicated successfully.' => '', + // 'Unable to duplicate actions.' => '', + // 'Add a new action' => '', + // 'Import from another project' => '', + // 'There is no action at the moment.' => '', + // 'Import actions from another project' => '', + // 'There is no available project.' => '', + // 'Local File' => '', + // 'Configuration' => '', + // 'PHP version:' => '', + // 'PHP SAPI:' => '', + // 'OS version:' => '', + // 'Database version:' => '', + // 'Browser:' => '', + // 'Task view' => '', + // 'Edit task' => '', + // 'Edit description' => '', + // 'New internal link' => '', + // 'Display list of keyboard shortcuts' => '', + // 'Menu' => '', + // 'Set start date' => '', + // 'Avatar' => '', + // 'Upload my avatar image' => '', + // 'Remove my image' => '', + // 'The OAuth2 state parameter is invalid' => '', ); diff --git a/app/Model/Config.php b/app/Model/Config.php index 3f9157ba..0c363fb0 100644 --- a/app/Model/Config.php +++ b/app/Model/Config.php @@ -90,7 +90,7 @@ class Config extends Setting 'fi_FI' => 'Suomi', 'sv_SE' => 'Svenska', 'tr_TR' => 'Türkçe', - 'ko_KR' => '한국어', + 'ko_KR' => '한국어', 'zh_CN' => '中文(简体)', 'ja_JP' => '日本語', 'th_TH' => 'ไทย', @@ -130,6 +130,7 @@ class Config extends Setting 'fi_FI' => 'fi', 'sv_SE' => 'sv', 'tr_TR' => 'tr', + 'ko_KR' => 'ko', 'zh_CN' => 'zh-cn', 'ja_JP' => 'ja', 'th_TH' => 'th', -- cgit v1.2.3 From 9f0166502b8b8886156bcb4ad0497cd9ee5a60b2 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sun, 10 Apr 2016 15:18:20 -0400 Subject: Added search in activity stream --- ChangeLog | 1 + app/Controller/Search.php | 18 ++++ app/Filter/BaseDateFilter.php | 103 ++++++++++++++++++ app/Filter/BaseFilter.php | 44 -------- app/Filter/ProjectActivityCreationDateFilter.php | 38 +++++++ app/Filter/ProjectActivityCreatorFilter.php | 65 ++++++++++++ app/Filter/ProjectActivityProjectIdsFilter.php | 2 +- app/Filter/ProjectActivityProjectNameFilter.php | 38 +++++++ app/Filter/ProjectActivityTaskStatusFilter.php | 43 ++++++++ app/Filter/ProjectActivityTaskTitleFilter.php | 15 +-- app/Filter/TaskCompletionDateFilter.php | 2 +- app/Filter/TaskCreationDateFilter.php | 2 +- app/Filter/TaskDueDateFilter.php | 2 +- app/Filter/TaskModificationDateFilter.php | 2 +- app/Filter/TaskProjectsFilter.php | 7 +- app/Filter/TaskStartDateFilter.php | 2 +- app/Helper/ProjectActivityHelper.php | 27 +++++ app/Locale/bs_BA/translations.php | 10 ++ app/Locale/cs_CZ/translations.php | 10 ++ app/Locale/da_DK/translations.php | 10 ++ app/Locale/de_DE/translations.php | 10 ++ app/Locale/el_GR/translations.php | 10 ++ app/Locale/es_ES/translations.php | 10 ++ app/Locale/fi_FI/translations.php | 10 ++ app/Locale/fr_FR/translations.php | 10 ++ app/Locale/hu_HU/translations.php | 10 ++ app/Locale/id_ID/translations.php | 10 ++ app/Locale/it_IT/translations.php | 10 ++ app/Locale/ja_JP/translations.php | 10 ++ app/Locale/ko_KR/translations.php | 10 ++ app/Locale/my_MY/translations.php | 10 ++ app/Locale/nb_NO/translations.php | 10 ++ app/Locale/nl_NL/translations.php | 10 ++ app/Locale/pl_PL/translations.php | 10 ++ app/Locale/pt_BR/translations.php | 10 ++ app/Locale/pt_PT/translations.php | 10 ++ app/Locale/ru_RU/translations.php | 12 ++- app/Locale/sr_Latn_RS/translations.php | 10 ++ app/Locale/sv_SE/translations.php | 10 ++ app/Locale/th_TH/translations.php | 10 ++ app/Locale/tr_TR/translations.php | 10 ++ app/Locale/zh_CN/translations.php | 10 ++ app/Model/ProjectActivity.php | 1 + app/ServiceProvider/FilterProvider.php | 30 +++++- app/ServiceProvider/RouteProvider.php | 3 +- app/Template/activity/filter_dropdown.php | 14 +++ app/Template/search/activity.php | 39 +++++++ app/Template/search/index.php | 4 +- doc/search.markdown | 83 +++++++++------ .../ProjectActivityCreationDateFilterTest.php | 117 +++++++++++++++++++++ .../Filter/ProjectActivityCreatorFilterTest.php | 91 ++++++++++++++++ .../ProjectActivityProjectNameFilterTest.php | 35 ++++++ .../Filter/ProjectActivityTaskStatusFilterTest.php | 49 +++++++++ .../Filter/ProjectActivityTaskTitleFilterTest.php | 47 ++++++++- 54 files changed, 1066 insertions(+), 110 deletions(-) create mode 100644 app/Filter/BaseDateFilter.php create mode 100644 app/Filter/ProjectActivityCreationDateFilter.php create mode 100644 app/Filter/ProjectActivityCreatorFilter.php create mode 100644 app/Filter/ProjectActivityProjectNameFilter.php create mode 100644 app/Filter/ProjectActivityTaskStatusFilter.php create mode 100644 app/Template/activity/filter_dropdown.php create mode 100644 app/Template/search/activity.php create mode 100644 tests/units/Filter/ProjectActivityCreationDateFilterTest.php create mode 100644 tests/units/Filter/ProjectActivityCreatorFilterTest.php create mode 100644 tests/units/Filter/ProjectActivityProjectNameFilterTest.php create mode 100644 tests/units/Filter/ProjectActivityTaskStatusFilterTest.php (limited to 'app/Locale/ko_KR/translations.php') diff --git a/ChangeLog b/ChangeLog index 1bbe8062..f4952b53 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ Version 1.0.28 (unreleased) New features: +* Search in activity stream * Search in comments * Search by task creator diff --git a/app/Controller/Search.php b/app/Controller/Search.php index 840a90c8..a42e9d3d 100644 --- a/app/Controller/Search.php +++ b/app/Controller/Search.php @@ -46,4 +46,22 @@ class Search extends Base 'title' => t('Search tasks').($nb_tasks > 0 ? ' ('.$nb_tasks.')' : '') ))); } + + public function activity() + { + $search = urldecode($this->request->getStringParam('search')); + $events = $this->helper->projectActivity->searchEvents($search); + $nb_events = count($events); + + $this->response->html($this->helper->layout->app('search/activity', array( + 'values' => array( + 'search' => $search, + 'controller' => 'search', + 'action' => 'activity', + ), + 'title' => t('Search in activity stream').($nb_events > 0 ? ' ('.$nb_events.')' : ''), + 'nb_events' => $nb_events, + 'events' => $events, + ))); + } } diff --git a/app/Filter/BaseDateFilter.php b/app/Filter/BaseDateFilter.php new file mode 100644 index 00000000..56fb2d78 --- /dev/null +++ b/app/Filter/BaseDateFilter.php @@ -0,0 +1,103 @@ +dateParser = $dateParser; + return $this; + } + + /** + * Parse operator in the input string + * + * @access protected + * @return string + */ + protected function parseOperator() + { + $operators = array( + '<=' => 'lte', + '>=' => 'gte', + '<' => 'lt', + '>' => 'gt', + ); + + foreach ($operators as $operator => $method) { + if (strpos($this->value, $operator) === 0) { + $this->value = substr($this->value, strlen($operator)); + return $method; + } + } + + return ''; + } + + /** + * Apply a date filter + * + * @access protected + * @param string $field + */ + protected function applyDateFilter($field) + { + $method = $this->parseOperator(); + $timestamp = $this->dateParser->getTimestampFromIsoFormat($this->value); + + if ($method !== '') { + $this->query->$method($field, $this->getTimestampFromOperator($method, $timestamp)); + } else { + $this->query->gte($field, $timestamp); + $this->query->lte($field, $timestamp + 86399); + } + } + + /** + * Get timestamp from the operator + * + * @access public + * @param string $method + * @param integer $timestamp + * @return integer + */ + protected function getTimestampFromOperator($method, $timestamp) + { + switch ($method) { + case 'lte': + return $timestamp + 86399; + case 'lt': + return $timestamp; + case 'gte': + return $timestamp; + case 'gt': + return $timestamp + 86400; + } + + return $timestamp; + } +} diff --git a/app/Filter/BaseFilter.php b/app/Filter/BaseFilter.php index a7e6a61a..79a664be 100644 --- a/app/Filter/BaseFilter.php +++ b/app/Filter/BaseFilter.php @@ -72,48 +72,4 @@ abstract class BaseFilter $this->value = $value; return $this; } - - /** - * Parse operator in the input string - * - * @access protected - * @return string - */ - protected function parseOperator() - { - $operators = array( - '<=' => 'lte', - '>=' => 'gte', - '<' => 'lt', - '>' => 'gt', - ); - - foreach ($operators as $operator => $method) { - if (strpos($this->value, $operator) === 0) { - $this->value = substr($this->value, strlen($operator)); - return $method; - } - } - - return ''; - } - - /** - * Apply a date filter - * - * @access protected - * @param string $field - */ - protected function applyDateFilter($field) - { - $timestamp = strtotime($this->value); - $method = $this->parseOperator(); - - if ($method !== '') { - $this->query->$method($field, $timestamp); - } else { - $this->query->gte($field, $timestamp); - $this->query->lte($field, $timestamp + 86399); - } - } } diff --git a/app/Filter/ProjectActivityCreationDateFilter.php b/app/Filter/ProjectActivityCreationDateFilter.php new file mode 100644 index 00000000..d0b7f754 --- /dev/null +++ b/app/Filter/ProjectActivityCreationDateFilter.php @@ -0,0 +1,38 @@ +applyDateFilter(ProjectActivity::TABLE.'.date_creation'); + return $this; + } +} diff --git a/app/Filter/ProjectActivityCreatorFilter.php b/app/Filter/ProjectActivityCreatorFilter.php new file mode 100644 index 00000000..c95569d6 --- /dev/null +++ b/app/Filter/ProjectActivityCreatorFilter.php @@ -0,0 +1,65 @@ +currentUserId = $userId; + return $this; + } + + /** + * Get search attribute + * + * @access public + * @return string[] + */ + public function getAttributes() + { + return array('creator'); + } + + /** + * Apply filter + * + * @access public + * @return string + */ + public function apply() + { + if ($this->value === 'me') { + $this->query->eq(ProjectActivity::TABLE . '.creator_id', $this->currentUserId); + } else { + $this->query->beginOr(); + $this->query->ilike('uc.username', '%'.$this->value.'%'); + $this->query->ilike('uc.name', '%'.$this->value.'%'); + $this->query->closeOr(); + } + } +} diff --git a/app/Filter/ProjectActivityProjectIdsFilter.php b/app/Filter/ProjectActivityProjectIdsFilter.php index 4d7c9028..47cf0c25 100644 --- a/app/Filter/ProjectActivityProjectIdsFilter.php +++ b/app/Filter/ProjectActivityProjectIdsFilter.php @@ -21,7 +21,7 @@ class ProjectActivityProjectIdsFilter extends BaseFilter implements FilterInterf */ public function getAttributes() { - return array('project_ids'); + return array('projects'); } /** diff --git a/app/Filter/ProjectActivityProjectNameFilter.php b/app/Filter/ProjectActivityProjectNameFilter.php new file mode 100644 index 00000000..0cf73657 --- /dev/null +++ b/app/Filter/ProjectActivityProjectNameFilter.php @@ -0,0 +1,38 @@ +query->ilike(Project::TABLE.'.name', '%'.$this->value.'%'); + return $this; + } +} diff --git a/app/Filter/ProjectActivityTaskStatusFilter.php b/app/Filter/ProjectActivityTaskStatusFilter.php new file mode 100644 index 00000000..69e2c52d --- /dev/null +++ b/app/Filter/ProjectActivityTaskStatusFilter.php @@ -0,0 +1,43 @@ +value === 'open') { + $this->query->eq(Task::TABLE.'.is_active', Task::STATUS_OPEN); + } elseif ($this->value === 'closed') { + $this->query->eq(Task::TABLE.'.is_active', Task::STATUS_CLOSED); + } + + return $this; + } +} diff --git a/app/Filter/ProjectActivityTaskTitleFilter.php b/app/Filter/ProjectActivityTaskTitleFilter.php index ed3f36d6..bf2afa30 100644 --- a/app/Filter/ProjectActivityTaskTitleFilter.php +++ b/app/Filter/ProjectActivityTaskTitleFilter.php @@ -3,7 +3,6 @@ namespace Kanboard\Filter; use Kanboard\Core\Filter\FilterInterface; -use Kanboard\Model\Task; /** * Filter activity events by task title @@ -11,7 +10,7 @@ use Kanboard\Model\Task; * @package filter * @author Frederic Guillot */ -class ProjectActivityTaskTitleFilter extends BaseFilter implements FilterInterface +class ProjectActivityTaskTitleFilter extends TaskTitleFilter implements FilterInterface { /** * Get search attribute @@ -23,16 +22,4 @@ class ProjectActivityTaskTitleFilter extends BaseFilter implements FilterInterfa { return array('title'); } - - /** - * Apply filter - * - * @access public - * @return FilterInterface - */ - public function apply() - { - $this->query->ilike(Task::TABLE.'.title', '%'.$this->value.'%'); - return $this; - } } diff --git a/app/Filter/TaskCompletionDateFilter.php b/app/Filter/TaskCompletionDateFilter.php index 5166bebf..f206a3e2 100644 --- a/app/Filter/TaskCompletionDateFilter.php +++ b/app/Filter/TaskCompletionDateFilter.php @@ -11,7 +11,7 @@ use Kanboard\Model\Task; * @package filter * @author Frederic Guillot */ -class TaskCompletionDateFilter extends BaseFilter implements FilterInterface +class TaskCompletionDateFilter extends BaseDateFilter implements FilterInterface { /** * Get search attribute diff --git a/app/Filter/TaskCreationDateFilter.php b/app/Filter/TaskCreationDateFilter.php index 26318b3e..bb6efad6 100644 --- a/app/Filter/TaskCreationDateFilter.php +++ b/app/Filter/TaskCreationDateFilter.php @@ -11,7 +11,7 @@ use Kanboard\Model\Task; * @package filter * @author Frederic Guillot */ -class TaskCreationDateFilter extends BaseFilter implements FilterInterface +class TaskCreationDateFilter extends BaseDateFilter implements FilterInterface { /** * Get search attribute diff --git a/app/Filter/TaskDueDateFilter.php b/app/Filter/TaskDueDateFilter.php index 6ba55eb9..e36efdd0 100644 --- a/app/Filter/TaskDueDateFilter.php +++ b/app/Filter/TaskDueDateFilter.php @@ -11,7 +11,7 @@ use Kanboard\Model\Task; * @package filter * @author Frederic Guillot */ -class TaskDueDateFilter extends BaseFilter implements FilterInterface +class TaskDueDateFilter extends BaseDateFilter implements FilterInterface { /** * Get search attribute diff --git a/app/Filter/TaskModificationDateFilter.php b/app/Filter/TaskModificationDateFilter.php index d8838bce..5036e9c1 100644 --- a/app/Filter/TaskModificationDateFilter.php +++ b/app/Filter/TaskModificationDateFilter.php @@ -11,7 +11,7 @@ use Kanboard\Model\Task; * @package filter * @author Frederic Guillot */ -class TaskModificationDateFilter extends BaseFilter implements FilterInterface +class TaskModificationDateFilter extends BaseDateFilter implements FilterInterface { /** * Get search attribute diff --git a/app/Filter/TaskProjectsFilter.php b/app/Filter/TaskProjectsFilter.php index e0fc09cf..47636b1d 100644 --- a/app/Filter/TaskProjectsFilter.php +++ b/app/Filter/TaskProjectsFilter.php @@ -32,7 +32,12 @@ class TaskProjectsFilter extends BaseFilter implements FilterInterface */ public function apply() { - $this->query->in(Task::TABLE.'.project_id', $this->value); + if (empty($this->value)) { + $this->query->eq(Task::TABLE.'.project_id', 0); + } else { + $this->query->in(Task::TABLE.'.project_id', $this->value); + } + return $this; } } diff --git a/app/Filter/TaskStartDateFilter.php b/app/Filter/TaskStartDateFilter.php index d45bc0d4..dd30762b 100644 --- a/app/Filter/TaskStartDateFilter.php +++ b/app/Filter/TaskStartDateFilter.php @@ -11,7 +11,7 @@ use Kanboard\Model\Task; * @package filter * @author Frederic Guillot */ -class TaskStartDateFilter extends BaseFilter implements FilterInterface +class TaskStartDateFilter extends BaseDateFilter implements FilterInterface { /** * Get search attribute diff --git a/app/Helper/ProjectActivityHelper.php b/app/Helper/ProjectActivityHelper.php index 738fec66..0638a978 100644 --- a/app/Helper/ProjectActivityHelper.php +++ b/app/Helper/ProjectActivityHelper.php @@ -17,6 +17,33 @@ use Kanboard\Model\ProjectActivity; */ class ProjectActivityHelper extends Base { + /** + * Search events + * + * @access public + * @param string $search + * @return array + */ + public function searchEvents($search) + { + $projects = $this->projectUserRole->getProjectsByUser($this->userSession->getId()); + $events = array(); + + if ($search !== '') { + $queryBuilder = $this->projectActivityLexer->build($search); + $queryBuilder + ->withFilter(new ProjectActivityProjectIdsFilter(array_keys($projects))) + ->getQuery() + ->desc(ProjectActivity::TABLE.'.id') + ->limit(500) + ; + + $events = $queryBuilder->format(new ProjectActivityEventFormatter($this->container)); + } + + return $events; + } + /** * Get project activity events * diff --git a/app/Locale/bs_BA/translations.php b/app/Locale/bs_BA/translations.php index 7ca864f4..e384f923 100644 --- a/app/Locale/bs_BA/translations.php +++ b/app/Locale/bs_BA/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/cs_CZ/translations.php b/app/Locale/cs_CZ/translations.php index b2921de9..3c8de1ad 100644 --- a/app/Locale/cs_CZ/translations.php +++ b/app/Locale/cs_CZ/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index c4743922..747fa2d1 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index 999bf048..fa447e62 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -1153,4 +1153,14 @@ return array( 'Upload my avatar image' => 'Mein Avatar Bild hochladen', 'Remove my image' => 'Mein Bild entfernen', 'The OAuth2 state parameter is invalid' => 'Der OAuth2 Statusparameter ist ungültig', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/el_GR/translations.php b/app/Locale/el_GR/translations.php index 9a31e485..84cf8462 100644 --- a/app/Locale/el_GR/translations.php +++ b/app/Locale/el_GR/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index c3623369..e52c959b 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index 8e5dd81f..f47852b0 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/fr_FR/translations.php b/app/Locale/fr_FR/translations.php index cedd6039..0c2e4955 100644 --- a/app/Locale/fr_FR/translations.php +++ b/app/Locale/fr_FR/translations.php @@ -1153,4 +1153,14 @@ return array( 'Upload my avatar image' => 'Uploader mon image d\'avatar', 'Remove my image' => 'Supprimer mon image', 'The OAuth2 state parameter is invalid' => 'Le paramètre "state" de OAuth2 est invalide', + 'User not found.' => 'Utilisateur introuvable.', + 'Search in activity stream' => 'Chercher dans le flux d\'activité', + 'My activities' => 'Mes activités', + 'Activity until yesterday' => 'Activités jusqu\'à hier', + 'Activity until today' => 'Activités jusqu\'à aujourd\'hui', + 'Search by creator: ' => 'Rechercher par créateur : ', + 'Search by creation date: ' => 'Rechercher par date de création : ', + 'Search by task status: ' => 'Rechercher par le statut des tâches : ', + 'Search by task title: ' => 'Rechercher par le titre des tâches : ', + 'Activity stream search' => 'Recherche dans le flux d\'activité', ); diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index f642a6c1..9a2d666a 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/id_ID/translations.php b/app/Locale/id_ID/translations.php index 3f105054..9cbca60e 100644 --- a/app/Locale/id_ID/translations.php +++ b/app/Locale/id_ID/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/it_IT/translations.php b/app/Locale/it_IT/translations.php index 93ceb03f..d0209b3a 100644 --- a/app/Locale/it_IT/translations.php +++ b/app/Locale/it_IT/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index b48eabd8..69ab5f17 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/ko_KR/translations.php b/app/Locale/ko_KR/translations.php index 8379761f..f4320c55 100644 --- a/app/Locale/ko_KR/translations.php +++ b/app/Locale/ko_KR/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/my_MY/translations.php b/app/Locale/my_MY/translations.php index 36b3db0b..f6f15937 100644 --- a/app/Locale/my_MY/translations.php +++ b/app/Locale/my_MY/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/nb_NO/translations.php b/app/Locale/nb_NO/translations.php index 465efb53..f3d3047a 100644 --- a/app/Locale/nb_NO/translations.php +++ b/app/Locale/nb_NO/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/nl_NL/translations.php b/app/Locale/nl_NL/translations.php index 3c3fa1ee..f08f5eff 100644 --- a/app/Locale/nl_NL/translations.php +++ b/app/Locale/nl_NL/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index d06e347f..8222f9e1 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index cdb06dea..60242d95 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -1153,4 +1153,14 @@ return array( 'Upload my avatar image' => 'Enviar a minha imagem de avatar', 'Remove my image' => 'Remover a minha imagem', 'The OAuth2 state parameter is invalid' => 'O parâmetro "state" de OAuth2 não é válido', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/pt_PT/translations.php b/app/Locale/pt_PT/translations.php index e38344f8..956d1259 100644 --- a/app/Locale/pt_PT/translations.php +++ b/app/Locale/pt_PT/translations.php @@ -1153,4 +1153,14 @@ return array( 'Upload my avatar image' => 'Enviar a minha imagem de avatar', 'Remove my image' => 'Remover a minha imagem', 'The OAuth2 state parameter is invalid' => 'O parametro de estado do OAuth2 é inválido', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index b3503e52..1e548e0d 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -1152,5 +1152,15 @@ return array( 'Avatar' => 'Аватар', 'Upload my avatar image' => 'Загрузить моё изображение для аватара', 'Remove my image' => 'Удалить моё изображение', - 'The OAuth2 state parameter is invalid' => 'Параметр состояние OAuth2 неправильный' + 'The OAuth2 state parameter is invalid' => 'Параметр состояние OAuth2 неправильный', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/sr_Latn_RS/translations.php b/app/Locale/sr_Latn_RS/translations.php index c7070a8d..b69e6cf4 100644 --- a/app/Locale/sr_Latn_RS/translations.php +++ b/app/Locale/sr_Latn_RS/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index e4728d2d..634b87d0 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index 1e2fb98a..1e913f28 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/tr_TR/translations.php b/app/Locale/tr_TR/translations.php index 6e8fae2f..95bcc8a8 100644 --- a/app/Locale/tr_TR/translations.php +++ b/app/Locale/tr_TR/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index decd49d8..7b0c3139 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -1153,4 +1153,14 @@ return array( // 'Upload my avatar image' => '', // 'Remove my image' => '', // 'The OAuth2 state parameter is invalid' => '', + // 'User not found.' => '', + // 'Search in activity stream' => '', + // 'My activities' => '', + // 'Activity until yesterday' => '', + // 'Activity until today' => '', + // 'Search by creator: ' => '', + // 'Search by creation date: ' => '', + // 'Search by task status: ' => '', + // 'Search by task title: ' => '', + // 'Activity stream search' => '', ); diff --git a/app/Model/ProjectActivity.php b/app/Model/ProjectActivity.php index 31cee113..d993015b 100644 --- a/app/Model/ProjectActivity.php +++ b/app/Model/ProjectActivity.php @@ -71,6 +71,7 @@ class ProjectActivity extends Base 'uc.avatar_path' ) ->join(Task::TABLE, 'id', 'task_id') + ->join(Project::TABLE, 'id', 'project_id') ->left(User::TABLE, 'uc', 'id', ProjectActivity::TABLE, 'creator_id'); } diff --git a/app/ServiceProvider/FilterProvider.php b/app/ServiceProvider/FilterProvider.php index 4b4dbd2d..f3918d77 100644 --- a/app/ServiceProvider/FilterProvider.php +++ b/app/ServiceProvider/FilterProvider.php @@ -4,6 +4,10 @@ namespace Kanboard\ServiceProvider; use Kanboard\Core\Filter\LexerBuilder; use Kanboard\Core\Filter\QueryBuilder; +use Kanboard\Filter\ProjectActivityCreationDateFilter; +use Kanboard\Filter\ProjectActivityCreatorFilter; +use Kanboard\Filter\ProjectActivityProjectNameFilter; +use Kanboard\Filter\ProjectActivityTaskStatusFilter; use Kanboard\Filter\ProjectActivityTaskTitleFilter; use Kanboard\Filter\TaskAssigneeFilter; use Kanboard\Filter\TaskCategoryFilter; @@ -86,8 +90,18 @@ class FilterProvider implements ServiceProviderInterface $container['projectActivityLexer'] = $container->factory(function ($c) { $builder = new LexerBuilder(); - $builder->withQuery($c['projectActivity']->getQuery()); - $builder->withFilter(new ProjectActivityTaskTitleFilter()); + $builder + ->withQuery($c['projectActivity']->getQuery()) + ->withFilter(new ProjectActivityTaskTitleFilter(), true) + ->withFilter(new ProjectActivityTaskStatusFilter()) + ->withFilter(new ProjectActivityProjectNameFilter()) + ->withFilter(ProjectActivityCreationDateFilter::getInstance() + ->setDateParser($c['dateParser']) + ) + ->withFilter(ProjectActivityCreatorFilter::getInstance() + ->setCurrentUserId($c['userSession']->getId()) + ) + ; return $builder; }); @@ -124,17 +138,23 @@ class FilterProvider implements ServiceProviderInterface ) ->withFilter(new TaskColumnFilter()) ->withFilter(new TaskCommentFilter()) - ->withFilter(new TaskCreationDateFilter()) + ->withFilter(TaskCreationDateFilter::getInstance() + ->setDateParser($c['dateParser']) + ) ->withFilter(TaskCreatorFilter::getInstance() ->setCurrentUserId($c['userSession']->getId()) ) ->withFilter(new TaskDescriptionFilter()) - ->withFilter(new TaskDueDateFilter()) + ->withFilter(TaskDueDateFilter::getInstance() + ->setDateParser($c['dateParser']) + ) ->withFilter(new TaskIdFilter()) ->withFilter(TaskLinkFilter::getInstance() ->setDatabase($c['db']) ) - ->withFilter(new TaskModificationDateFilter()) + ->withFilter(TaskModificationDateFilter::getInstance() + ->setDateParser($c['dateParser']) + ) ->withFilter(new TaskProjectFilter()) ->withFilter(new TaskReferenceFilter()) ->withFilter(new TaskStatusFilter()) diff --git a/app/ServiceProvider/RouteProvider.php b/app/ServiceProvider/RouteProvider.php index 0e7548d4..30d23a51 100644 --- a/app/ServiceProvider/RouteProvider.php +++ b/app/ServiceProvider/RouteProvider.php @@ -42,7 +42,7 @@ class RouteProvider implements ServiceProviderInterface // Search routes $container['route']->addRoute('search', 'search', 'index'); - $container['route']->addRoute('search/:search', 'search', 'index'); + $container['route']->addRoute('search/activity', 'search', 'activity'); // ProjectCreation routes $container['route']->addRoute('project/create', 'ProjectCreation', 'create'); @@ -62,6 +62,7 @@ class RouteProvider implements ServiceProviderInterface $container['route']->addRoute('project/:project_id/enable', 'project', 'enable'); $container['route']->addRoute('project/:project_id/permissions', 'ProjectPermission', 'index'); $container['route']->addRoute('project/:project_id/import', 'taskImport', 'step1'); + $container['route']->addRoute('project/:project_id/activity', 'activity', 'project'); // Project Overview $container['route']->addRoute('project/:project_id/overview', 'ProjectOverview', 'show'); diff --git a/app/Template/activity/filter_dropdown.php b/app/Template/activity/filter_dropdown.php new file mode 100644 index 00000000..8d7a7de3 --- /dev/null +++ b/app/Template/activity/filter_dropdown.php @@ -0,0 +1,14 @@ + \ No newline at end of file diff --git a/app/Template/search/activity.php b/app/Template/search/activity.php new file mode 100644 index 00000000..60362215 --- /dev/null +++ b/app/Template/search/activity.php @@ -0,0 +1,39 @@ +
+ + +
+ +
+ + +
+

+

project:"My project" creator:me

+
    +
  • project:"My project"
  • +
  • creator:admin
  • +
  • created:today
  • +
  • status:open
  • +
  • title:"My task"
  • +
+

url->doc(t('View advanced search syntax'), 'search') ?>

+
+ +

+ + render('event/events', array('events' => $events)) ?> + + +
\ No newline at end of file diff --git a/app/Template/search/index.php b/app/Template/search/index.php index 9231a6f3..d5d07ed6 100644 --- a/app/Template/search/index.php +++ b/app/Template/search/index.php @@ -2,8 +2,8 @@ diff --git a/doc/search.markdown b/doc/search.markdown index f6d343e9..37bb8625 100644 --- a/doc/search.markdown +++ b/doc/search.markdown @@ -1,7 +1,8 @@ Advanced Search Syntax ====================== -Kanboard uses a simple query language for advanced search. +Kanboard uses a simple query language for advanced search. +You can search in tasks, comments, subtasks, links but also in the activity stream. Example of query ---------------- @@ -12,23 +13,23 @@ This example will return all tasks assigned to me with a due date for tomorrow a assigne:me due:tomorrow my title ``` -Search by task id or title --------------------------- +Global search +------------- + +### Search by task id or title - Search by task id: `#123` - Search by task id and task title: `123` - Search by task title: anything that doesn't match any search attributes -Search by status ----------------- +### Search by status Attribute: **status** - Query to find open tasks: `status:open` - Query to find closed tasks: `status:closed` -Search by assignee ------------------- +### Search by assignee Attribute: **assignee** @@ -38,8 +39,7 @@ Attribute: **assignee** - Query for unassigned tasks: `assignee:nobody` - Query for my assigned tasks: `assignee:me` -Search by task creator ----------------------- +### Search by task creator Attribute: **creator** @@ -47,23 +47,20 @@ Attribute: **creator** - Tasks created by John Doe: `creator:"John Doe"` - Tasks created by the user id #1: `creator:1` -Search by subtask assignee --------------------------- +### Search by subtask assignee Attribute: **subtask:assignee** - Example: `subtask:assignee:"John Doe"` -Search by color ---------------- +### Search by color Attribute: **color** - Query to search by color id: `color:blue` - Query to search by color name: `color:"Deep Orange"` -Search by the due date ----------------------- +### Search by the due date Attribute: **due** @@ -83,8 +80,7 @@ Operators supported with a date: - Greater than or equal: **due:>=2015-06-29** - Lower than or equal: **due:<=2015-06-29** -Search by modification date ---------------------------- +### Search by modification date Attribute: **modified** or **updated** @@ -94,29 +90,25 @@ There is also a filter by recently modified tasks: `modified:recently`. This query will use the same value as the board highlight period configured in settings. -Search by creation date ------------------------ +### Search by creation date Attribute: **created** Works in the same way as the modification date queries. -Search by description ---------------------- +### Search by description Attribute: **description** or **desc** Example: `description:"text search"` -Search by external reference ----------------------------- +### Search by external reference The task reference is an external id of your task, by example a ticket number from another software. - Find tasks with a reference: `ref:1234` or `reference:TICKET-1234` -Search by category ------------------- +### Search by category Attribute: **category** @@ -124,8 +116,7 @@ Attribute: **category** - Find all tasks that have those categories: `category:"Bug" category:"Improvements"` - Find tasks with no category assigned: `category:none` -Search by project ------------------ +### Search by project Attribute: **project** @@ -133,16 +124,14 @@ Attribute: **project** - Find tasks by project id: `project:23` - Find tasks for several projects: `project:"My project A" project:"My project B"` -Search by columns ------------------ +### Search by columns Attribute: **column** - Find tasks by column name: `column:"Work in progress"` - Find tasks for several columns: `column:"Backlog" column:ready` -Search by swim-lane -------------------- +### Search by swim-lane Attribute: **swimlane** @@ -150,17 +139,41 @@ Attribute: **swimlane** - Find tasks in the default swim-lane: `swimlane:default` - Find tasks into several swim-lanes: `swimlane:"Version 1.2" swimlane:"Version 1.3"` -Search by task link ------------------- +### Search by task link Attribute: **link** - Find tasks by link name: `link:"is a milestone of"` - Find tasks into several links: `link:"is a milestone of" link:"relates to"` -Search by comment ------------------ +### Search by comment Attribute: **comment** - Find comments that contains this title: `comment:"My comment message"` + +Activity stream search +---------------------- + +### Search events by task title + +Attribute: **title** or none (default) + +- Example: `title:"My task"` +- Search by task id: `#123` + +### Search events by task status + +Attribute: **status** + +### Search by event creator + +Attribute: **creator** + +### Search by event creation date + +Attribute: **created** + +### Search events by project + +Attribute: **project** diff --git a/tests/units/Filter/ProjectActivityCreationDateFilterTest.php b/tests/units/Filter/ProjectActivityCreationDateFilterTest.php new file mode 100644 index 00000000..d679f285 --- /dev/null +++ b/tests/units/Filter/ProjectActivityCreationDateFilterTest.php @@ -0,0 +1,117 @@ +container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreationDateFilter('today'); + $filter->setDateParser($this->container['dateParser']); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + } + + public function testWithYesterday() + { + $taskFinder = new TaskFinder($this->container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreationDateFilter('yesterday'); + $filter->setDateParser($this->container['dateParser']); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(0, $events); + } + + public function testWithIsoDate() + { + $taskFinder = new TaskFinder($this->container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreationDateFilter(date('Y-m-d')); + $filter->setDateParser($this->container['dateParser']); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + } + + public function testWithOperatorAndIsoDate() + { + $taskFinder = new TaskFinder($this->container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreationDateFilter('>='.date('Y-m-d')); + $filter->setDateParser($this->container['dateParser']); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreationDateFilter('<'.date('Y-m-d')); + $filter->setDateParser($this->container['dateParser']); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(0, $events); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreationDateFilter('>'.date('Y-m-d')); + $filter->setDateParser($this->container['dateParser']); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(0, $events); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreationDateFilter('>='.date('Y-m-d')); + $filter->setDateParser($this->container['dateParser']); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + } +} diff --git a/tests/units/Filter/ProjectActivityCreatorFilterTest.php b/tests/units/Filter/ProjectActivityCreatorFilterTest.php new file mode 100644 index 00000000..99c70322 --- /dev/null +++ b/tests/units/Filter/ProjectActivityCreatorFilterTest.php @@ -0,0 +1,91 @@ +container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreatorFilter('admin'); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + } + + public function testWithAnotherUsername() + { + $taskFinder = new TaskFinder($this->container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreatorFilter('John Doe'); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(0, $events); + } + + public function testWithCurrentUser() + { + $taskFinder = new TaskFinder($this->container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreatorFilter('me'); + $filter->setCurrentUserId(1); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + } + + public function testWithAnotherCurrentUser() + { + $taskFinder = new TaskFinder($this->container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityCreatorFilter('me'); + $filter->setCurrentUserId(2); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(0, $events); + } +} diff --git a/tests/units/Filter/ProjectActivityProjectNameFilterTest.php b/tests/units/Filter/ProjectActivityProjectNameFilterTest.php new file mode 100644 index 00000000..de9d7d59 --- /dev/null +++ b/tests/units/Filter/ProjectActivityProjectNameFilterTest.php @@ -0,0 +1,35 @@ +container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + $query = $projectActivityModel->getQuery(); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + $this->assertEquals(2, $projectModel->create(array('name' => 'P2'))); + + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertEquals(2, $taskCreation->create(array('title' => 'Test', 'project_id' => 2))); + + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + $this->assertNotFalse($projectActivityModel->createEvent(2, 2, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(2)))); + + $filter = new ProjectActivityProjectNameFilter('P1'); + $filter->withQuery($query)->apply(); + $this->assertCount(1, $query->findAll()); + } +} diff --git a/tests/units/Filter/ProjectActivityTaskStatusFilterTest.php b/tests/units/Filter/ProjectActivityTaskStatusFilterTest.php new file mode 100644 index 00000000..b8df6338 --- /dev/null +++ b/tests/units/Filter/ProjectActivityTaskStatusFilterTest.php @@ -0,0 +1,49 @@ +container); + $taskCreation = new TaskCreation($this->container); + $taskStatus = new TaskStatus($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + $this->assertEquals(2, $taskCreation->create(array('title' => 'Test', 'project_id' => 1))); + + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 2, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(2)))); + + $this->assertTrue($taskStatus->close(1)); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityTaskStatusFilter('open'); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + $this->assertEquals(2, $events[0]['task_id']); + + $query = $projectActivityModel->getQuery(); + $filter = new ProjectActivityTaskStatusFilter('closed'); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + $this->assertEquals(1, $events[0]['task_id']); + } +} diff --git a/tests/units/Filter/ProjectActivityTaskTitleFilterTest.php b/tests/units/Filter/ProjectActivityTaskTitleFilterTest.php index 6a7c23af..925a1ab2 100644 --- a/tests/units/Filter/ProjectActivityTaskTitleFilterTest.php +++ b/tests/units/Filter/ProjectActivityTaskTitleFilterTest.php @@ -11,7 +11,7 @@ require_once __DIR__.'/../Base.php'; class ProjectActivityTaskTitleFilterTest extends Base { - public function testFilterByTaskId() + public function testWithFullTitle() { $taskFinder = new TaskFinder($this->container); $taskCreation = new TaskCreation($this->container); @@ -31,4 +31,49 @@ class ProjectActivityTaskTitleFilterTest extends Base $filter->withQuery($query)->apply(); $this->assertCount(1, $query->findAll()); } + + public function testWithPartialTitle() + { + $taskFinder = new TaskFinder($this->container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + $query = $projectActivityModel->getQuery(); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test1', 'project_id' => 1))); + $this->assertEquals(2, $taskCreation->create(array('title' => 'Test2', 'project_id' => 1))); + + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 2, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(2)))); + + $filter = new ProjectActivityTaskTitleFilter('test'); + $filter->withQuery($query)->apply(); + $this->assertCount(2, $query->findAll()); + } + + public function testWithId() + { + $taskFinder = new TaskFinder($this->container); + $taskCreation = new TaskCreation($this->container); + $projectModel = new Project($this->container); + $projectActivityModel = new ProjectActivity($this->container); + $query = $projectActivityModel->getQuery(); + + $this->assertEquals(1, $projectModel->create(array('name' => 'P1'))); + + $this->assertEquals(1, $taskCreation->create(array('title' => 'Test1', 'project_id' => 1))); + $this->assertEquals(2, $taskCreation->create(array('title' => 'Test2', 'project_id' => 1))); + + $this->assertNotFalse($projectActivityModel->createEvent(1, 1, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(1)))); + $this->assertNotFalse($projectActivityModel->createEvent(1, 2, 1, Task::EVENT_CREATE, array('task' => $taskFinder->getById(2)))); + + $filter = new ProjectActivityTaskTitleFilter('#2'); + $filter->withQuery($query)->apply(); + + $events = $query->findAll(); + $this->assertCount(1, $events); + $this->assertEquals(2, $events[0]['task_id']); + } } -- cgit v1.2.3 From d8b6e7e26e947d4d3409ac4edad90217f0a74487 Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Mon, 11 Apr 2016 18:16:58 -0400 Subject: Sync locales --- app/Locale/bs_BA/translations.php | 4 ++++ app/Locale/cs_CZ/translations.php | 4 ++++ app/Locale/da_DK/translations.php | 4 ++++ app/Locale/de_DE/translations.php | 4 ++++ app/Locale/el_GR/translations.php | 4 ++++ app/Locale/es_ES/translations.php | 4 ++++ app/Locale/fi_FI/translations.php | 4 ++++ app/Locale/hu_HU/translations.php | 4 ++++ app/Locale/id_ID/translations.php | 4 ++++ app/Locale/ja_JP/translations.php | 4 ++++ app/Locale/ko_KR/translations.php | 4 ++++ app/Locale/my_MY/translations.php | 4 ++++ app/Locale/nb_NO/translations.php | 4 ++++ app/Locale/nl_NL/translations.php | 4 ++++ app/Locale/pl_PL/translations.php | 4 ++++ app/Locale/pt_BR/translations.php | 4 ++++ app/Locale/pt_PT/translations.php | 4 ++++ app/Locale/ru_RU/translations.php | 4 ++++ app/Locale/sr_Latn_RS/translations.php | 4 ++++ app/Locale/sv_SE/translations.php | 4 ++++ app/Locale/th_TH/translations.php | 4 ++++ app/Locale/tr_TR/translations.php | 4 ++++ app/Locale/zh_CN/translations.php | 4 ++++ 23 files changed, 92 insertions(+) (limited to 'app/Locale/ko_KR/translations.php') diff --git a/app/Locale/bs_BA/translations.php b/app/Locale/bs_BA/translations.php index 19a11c44..fadf0a1b 100644 --- a/app/Locale/bs_BA/translations.php +++ b/app/Locale/bs_BA/translations.php @@ -1163,4 +1163,8 @@ return array( 'Search by task status: ' => 'Pretraga po statusu zadatka: ', 'Search by task title: ' => 'Pretraga po naslovu zadatka: ', 'Activity stream search' => 'Pretraga aktivnosti', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/cs_CZ/translations.php b/app/Locale/cs_CZ/translations.php index 3c8de1ad..777e9b42 100644 --- a/app/Locale/cs_CZ/translations.php +++ b/app/Locale/cs_CZ/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/da_DK/translations.php b/app/Locale/da_DK/translations.php index 747fa2d1..7c255561 100644 --- a/app/Locale/da_DK/translations.php +++ b/app/Locale/da_DK/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/de_DE/translations.php b/app/Locale/de_DE/translations.php index fa447e62..b154e6f9 100644 --- a/app/Locale/de_DE/translations.php +++ b/app/Locale/de_DE/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/el_GR/translations.php b/app/Locale/el_GR/translations.php index 84cf8462..664bf328 100644 --- a/app/Locale/el_GR/translations.php +++ b/app/Locale/el_GR/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/es_ES/translations.php b/app/Locale/es_ES/translations.php index e52c959b..6b4dda42 100644 --- a/app/Locale/es_ES/translations.php +++ b/app/Locale/es_ES/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/fi_FI/translations.php b/app/Locale/fi_FI/translations.php index f47852b0..f30b7b4c 100644 --- a/app/Locale/fi_FI/translations.php +++ b/app/Locale/fi_FI/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/hu_HU/translations.php b/app/Locale/hu_HU/translations.php index 9a2d666a..394f89a0 100644 --- a/app/Locale/hu_HU/translations.php +++ b/app/Locale/hu_HU/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/id_ID/translations.php b/app/Locale/id_ID/translations.php index 9cbca60e..bd1dd684 100644 --- a/app/Locale/id_ID/translations.php +++ b/app/Locale/id_ID/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/ja_JP/translations.php b/app/Locale/ja_JP/translations.php index 69ab5f17..89769edd 100644 --- a/app/Locale/ja_JP/translations.php +++ b/app/Locale/ja_JP/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/ko_KR/translations.php b/app/Locale/ko_KR/translations.php index f4320c55..ed9e3b86 100644 --- a/app/Locale/ko_KR/translations.php +++ b/app/Locale/ko_KR/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/my_MY/translations.php b/app/Locale/my_MY/translations.php index f6f15937..4537f38c 100644 --- a/app/Locale/my_MY/translations.php +++ b/app/Locale/my_MY/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/nb_NO/translations.php b/app/Locale/nb_NO/translations.php index f3d3047a..8c6a56f2 100644 --- a/app/Locale/nb_NO/translations.php +++ b/app/Locale/nb_NO/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/nl_NL/translations.php b/app/Locale/nl_NL/translations.php index f08f5eff..18155816 100644 --- a/app/Locale/nl_NL/translations.php +++ b/app/Locale/nl_NL/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/pl_PL/translations.php b/app/Locale/pl_PL/translations.php index 8222f9e1..d9427d80 100644 --- a/app/Locale/pl_PL/translations.php +++ b/app/Locale/pl_PL/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/pt_BR/translations.php b/app/Locale/pt_BR/translations.php index 60242d95..e0cdb17d 100644 --- a/app/Locale/pt_BR/translations.php +++ b/app/Locale/pt_BR/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/pt_PT/translations.php b/app/Locale/pt_PT/translations.php index 956d1259..ea8c9a93 100644 --- a/app/Locale/pt_PT/translations.php +++ b/app/Locale/pt_PT/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/ru_RU/translations.php b/app/Locale/ru_RU/translations.php index 1e548e0d..bf2bc559 100644 --- a/app/Locale/ru_RU/translations.php +++ b/app/Locale/ru_RU/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/sr_Latn_RS/translations.php b/app/Locale/sr_Latn_RS/translations.php index b69e6cf4..0399530e 100644 --- a/app/Locale/sr_Latn_RS/translations.php +++ b/app/Locale/sr_Latn_RS/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/sv_SE/translations.php b/app/Locale/sv_SE/translations.php index 634b87d0..7e738e70 100644 --- a/app/Locale/sv_SE/translations.php +++ b/app/Locale/sv_SE/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/th_TH/translations.php b/app/Locale/th_TH/translations.php index 1e913f28..6765e8ea 100644 --- a/app/Locale/th_TH/translations.php +++ b/app/Locale/th_TH/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/tr_TR/translations.php b/app/Locale/tr_TR/translations.php index 95bcc8a8..f771b106 100644 --- a/app/Locale/tr_TR/translations.php +++ b/app/Locale/tr_TR/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); diff --git a/app/Locale/zh_CN/translations.php b/app/Locale/zh_CN/translations.php index 7b0c3139..baa7693a 100644 --- a/app/Locale/zh_CN/translations.php +++ b/app/Locale/zh_CN/translations.php @@ -1163,4 +1163,8 @@ return array( // 'Search by task status: ' => '', // 'Search by task title: ' => '', // 'Activity stream search' => '', + // 'Projects where "%s" is manager' => '', + // 'Projects where "%s" is member' => '', + // 'Open tasks assigned to "%s"' => '', + // 'Closed tasks assigned to "%s"' => '', ); -- cgit v1.2.3