Merge branch 'master' into master
commit
954ecff691
@ -1 +1 @@
|
|||||||
REACT_APP_VERSION=1.15.4
|
REACT_APP_VERSION=1.16.4
|
||||||
|
|||||||
@ -0,0 +1,68 @@
|
|||||||
|
import React, { useCallback } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import LinkifyReact from 'linkify-react';
|
||||||
|
|
||||||
|
import history from '../history';
|
||||||
|
|
||||||
|
const Linkify = React.memo(({ children, linkStopPropagation, ...props }) => {
|
||||||
|
const handleLinkClick = useCallback(
|
||||||
|
(event) => {
|
||||||
|
if (linkStopPropagation) {
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!event.target.getAttribute('target')) {
|
||||||
|
event.preventDefault();
|
||||||
|
history.push(event.target.href);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[linkStopPropagation],
|
||||||
|
);
|
||||||
|
|
||||||
|
const linkRenderer = useCallback(
|
||||||
|
({ attributes: { href, ...linkProps }, content }) => {
|
||||||
|
let url;
|
||||||
|
try {
|
||||||
|
url = new URL(href, window.location);
|
||||||
|
} catch (error) {} // eslint-disable-line no-empty
|
||||||
|
|
||||||
|
const isSameSite = !!url && url.origin === window.location.origin;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<a
|
||||||
|
{...linkProps} // eslint-disable-line react/jsx-props-no-spreading
|
||||||
|
href={href}
|
||||||
|
target={isSameSite ? undefined : '_blank'}
|
||||||
|
rel={isSameSite ? undefined : 'noreferrer'}
|
||||||
|
onClick={handleLinkClick}
|
||||||
|
>
|
||||||
|
{isSameSite ? url.pathname : content}
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
[handleLinkClick],
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<LinkifyReact
|
||||||
|
{...props} // eslint-disable-line react/jsx-props-no-spreading
|
||||||
|
options={{
|
||||||
|
defaultProtocol: 'https',
|
||||||
|
render: linkRenderer,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</LinkifyReact>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
Linkify.propTypes = {
|
||||||
|
children: PropTypes.string.isRequired,
|
||||||
|
linkStopPropagation: PropTypes.bool,
|
||||||
|
};
|
||||||
|
|
||||||
|
Linkify.defaultProps = {
|
||||||
|
linkStopPropagation: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Linkify;
|
||||||
@ -0,0 +1,241 @@
|
|||||||
|
import dateFns from 'date-fns/locale/id';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
dateFns,
|
||||||
|
|
||||||
|
format: {
|
||||||
|
date: 'dd MMM yyyy',
|
||||||
|
time: 'p',
|
||||||
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
|
longDate: 'd MMM',
|
||||||
|
longDateTime: "d MMMM 'pada' p",
|
||||||
|
fullDate: 'd MMM, y',
|
||||||
|
fullDateTime: "d MMM, y 'pada' p",
|
||||||
|
},
|
||||||
|
|
||||||
|
translation: {
|
||||||
|
common: {
|
||||||
|
aboutPlanka: 'Tentang Planka',
|
||||||
|
account: 'Akun',
|
||||||
|
actions: 'Tindakan',
|
||||||
|
addAttachment_title: 'Tambah Lampiran',
|
||||||
|
addComment: 'Tambahkan komentar',
|
||||||
|
addManager_title: 'Tambahkan Manager',
|
||||||
|
addMember_title: 'Tambahkan Anggota',
|
||||||
|
addUser_title: 'Tambahkan Pengguna',
|
||||||
|
administrator: 'Administrator',
|
||||||
|
all: 'Semua',
|
||||||
|
allChangesWillBeAutomaticallySavedAfterConnectionRestored:
|
||||||
|
'Semua perubahan akan disimpan<br />setelah koneksi pulih.',
|
||||||
|
areYouSureYouWantToDeleteThisAttachment: 'Apakah anda ingin menghapus lampiran ini?',
|
||||||
|
areYouSureYouWantToDeleteThisBoard: 'Apakah anda ingin menghapus papan ini?',
|
||||||
|
areYouSureYouWantToDeleteThisCard: 'Apakah anda ingin menghapus kartu ini?',
|
||||||
|
areYouSureYouWantToDeleteThisComment: 'Apakah anda ingin menghapus komentar ini?',
|
||||||
|
areYouSureYouWantToDeleteThisLabel: 'Apakah anda ingin menghapus label ini?',
|
||||||
|
areYouSureYouWantToDeleteThisList: 'Apakah anda ingin menghapus daftar ini?',
|
||||||
|
areYouSureYouWantToDeleteThisProject: 'Apakah anda ingin menghapus proyek ini?',
|
||||||
|
areYouSureYouWantToDeleteThisTask: 'Apakah anda ingin menghapus tugas ini?',
|
||||||
|
areYouSureYouWantToDeleteThisUser: 'Apakah anda ingin menghapus pengguna ini?',
|
||||||
|
areYouSureYouWantToLeaveBoard: 'Apakah anda ingin keluar dari papan ini?',
|
||||||
|
areYouSureYouWantToLeaveProject: 'Apakah anda ingin keluar dari proyek ini?',
|
||||||
|
areYouSureYouWantToRemoveThisManagerFromProject:
|
||||||
|
'Apakah anda ingin menghapus manajer ini dari papan ini?',
|
||||||
|
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||||
|
'Apakah anda ingin menghapus anggota ini dari papan ini?',
|
||||||
|
attachment: 'Lampiran',
|
||||||
|
attachments: 'Lampiran-lampiran',
|
||||||
|
authentication: 'Autentikasi',
|
||||||
|
background: 'Latar belakang',
|
||||||
|
board: 'Papan',
|
||||||
|
boardNotFound_title: 'Papan Tidak Ditemukan',
|
||||||
|
canComment: 'Bisa berkomentar',
|
||||||
|
canEditContentOfBoard: 'Bisa mengubah isi papan.',
|
||||||
|
canOnlyViewBoard: 'Hanya dapat menglihat isi papan.',
|
||||||
|
cardActions_title: 'Aksi Kartu',
|
||||||
|
cardNotFound_title: 'Kartu Tidak Ditemukan',
|
||||||
|
cardOrActionAreDeleted: 'Kartu atau aksi telah dihapus.',
|
||||||
|
color: 'Warna',
|
||||||
|
createBoard_title: 'Buat Papan',
|
||||||
|
createLabel_title: 'Buat Label',
|
||||||
|
createNewOneOrSelectExistingOne: 'Create a new one or select<br />an existing one.',
|
||||||
|
createProject_title: 'Buat Proyek',
|
||||||
|
createTextFile_title: 'Buat Berkas Teks',
|
||||||
|
currentPassword: 'Kata sandi sekarang',
|
||||||
|
dangerZone_title: 'Zona Berbahaya',
|
||||||
|
date: 'Tanggal',
|
||||||
|
dueDate_title: 'Tenggat Waktu',
|
||||||
|
deleteAttachment_title: 'Hapus Lampiran',
|
||||||
|
deleteBoard_title: 'Hapus Papan',
|
||||||
|
deleteCard_title: 'Hapus Kartu',
|
||||||
|
deleteComment_title: 'Hapus Komentar',
|
||||||
|
deleteLabel_title: 'Hapus Label',
|
||||||
|
deleteList_title: 'Hapus Daftar',
|
||||||
|
deleteProject_title: 'Hapus Proyek',
|
||||||
|
deleteTask_title: 'Hapus Tugas',
|
||||||
|
deleteUser_title: 'Hapus Pengguna',
|
||||||
|
description: 'Deskripsi',
|
||||||
|
detectAutomatically: 'Deteksi otomatis',
|
||||||
|
dropFileToUpload: 'Tarik berkas untuk menggungah',
|
||||||
|
editor: 'Pengubah',
|
||||||
|
editAttachment_title: 'Ubah Lampiran',
|
||||||
|
editAvatar_title: 'Ubah Avatar',
|
||||||
|
editBoard_title: 'Ubah Papan',
|
||||||
|
editDueDate_title: 'Ubah Tenggat Waktu',
|
||||||
|
editEmail_title: 'Ubah E-mail',
|
||||||
|
editInformation_title: 'Ubah Informasi',
|
||||||
|
editLabel_title: 'Ubah Label',
|
||||||
|
editPassword_title: 'Ubah Kata Sandi',
|
||||||
|
editPermissions_title: 'Ubah Izin',
|
||||||
|
editStopwatch_title: 'Ubah Stopwatch',
|
||||||
|
editUsername_title: 'Ubah Username',
|
||||||
|
email: 'E-mail',
|
||||||
|
emailAlreadyInUse: 'E-mail telah digunakan',
|
||||||
|
enterCardTitle: 'Masukkan judul kartu... [Ctrl+Enter] untuk membuka otomatis.',
|
||||||
|
enterDescription: 'Masukkan deskripsi...',
|
||||||
|
enterFilename: 'Masukkan nama berkas...',
|
||||||
|
enterListTitle: 'Masukkan judul daftar...',
|
||||||
|
enterProjectTitle: 'Masukkan judul proyek',
|
||||||
|
enterTaskDescription: 'Masukkan deskripsi tugas...',
|
||||||
|
filterByLabels_title: 'Saring berdasarkan Label',
|
||||||
|
filterByMembers_title: 'Saring berdasarkan Anggota',
|
||||||
|
fromComputer_title: 'Dari Komputer',
|
||||||
|
fromTrello: 'Dari Trello',
|
||||||
|
general: 'Umum',
|
||||||
|
hours: 'Jam',
|
||||||
|
importBoard_title: 'Impor Papan',
|
||||||
|
invalidCurrentPassword: 'Kata sandi saat ini tidak valid',
|
||||||
|
labels: 'Label',
|
||||||
|
language: 'Bahasa',
|
||||||
|
leaveBoard_title: 'Keluar dari Papan',
|
||||||
|
leaveProject_title: 'Keluar dari Proyek',
|
||||||
|
list: 'Daftar',
|
||||||
|
listActions_title: 'Aksi Daftar',
|
||||||
|
managers: 'Manager',
|
||||||
|
members: 'Anggota',
|
||||||
|
minutes: 'Menit',
|
||||||
|
moveCard_title: 'Pindahkan Kartu',
|
||||||
|
name: 'Nama',
|
||||||
|
newEmail: 'E-mail baru',
|
||||||
|
newPassword: 'Kata sandi baru',
|
||||||
|
newUsername: 'Username baru',
|
||||||
|
noConnectionToServer: 'Tidak ada koneksi ke server',
|
||||||
|
noBoards: 'Tidak ada papan',
|
||||||
|
noLists: 'Tidak ada daftar',
|
||||||
|
noProjects: 'Tidak ada projek',
|
||||||
|
notifications: 'Notifikasi',
|
||||||
|
noUnreadNotifications: 'Tiada notifikasi yang belum dibaca.',
|
||||||
|
openBoard_title: 'Buka Papan',
|
||||||
|
optional_inline: 'opsional',
|
||||||
|
organization: 'Organisasi',
|
||||||
|
phone: 'Ponsel',
|
||||||
|
preferences: 'Preferensi',
|
||||||
|
pressPasteShortcutToAddAttachmentFromClipboard:
|
||||||
|
'Tip: tekan Ctrl-V (Cmd-V di Mac) untuk menambahkan lampiran dari papan klip.',
|
||||||
|
project: 'Proyek',
|
||||||
|
projectNotFound_title: 'Proyek Tidak Ditemukan',
|
||||||
|
removeManager_title: 'Hapus Manager',
|
||||||
|
removeMember_title: 'Hapus Anggota',
|
||||||
|
searchLabels: 'Cari label...',
|
||||||
|
searchMembers: 'Cari anggota...',
|
||||||
|
searchUsers: 'Cari pengguna...',
|
||||||
|
seconds: 'Detik',
|
||||||
|
selectBoard: 'Pilih papan',
|
||||||
|
selectList: 'Pilih daftar',
|
||||||
|
selectPermissions_title: 'Pilih Izin',
|
||||||
|
selectProject: 'Pilih proyek',
|
||||||
|
settings: 'Setelan',
|
||||||
|
stopwatch: 'Stopwatch',
|
||||||
|
subscribeToMyOwnCardsByDefault: 'Berlangganan kartu saya sendiri secara default',
|
||||||
|
taskActions_title: 'Aksi Tugas',
|
||||||
|
tasks: 'Tugas',
|
||||||
|
thereIsNoPreviewAvailableForThisAttachment:
|
||||||
|
'Tidak ada pratinjau yang tersedia untuk lampiran ini.',
|
||||||
|
time: 'Waktu',
|
||||||
|
title: 'Judul',
|
||||||
|
userActions_title: 'Aksi Pengguna',
|
||||||
|
userAddedThisCardToList: '<0>{{user}}</0><1> menambahkan kartu ini ke {{list}}</1>',
|
||||||
|
userLeftNewCommentToCard: '{{user}} mengomentari «{{comment}}» di <2>{{card}}</2>',
|
||||||
|
userMovedCardFromListToList:
|
||||||
|
'{{user}} memindahkan <2>{{card}}</2> dari {{fromList}} ke {{toList}}',
|
||||||
|
userMovedThisCardFromListToList:
|
||||||
|
'<0>{{user}}</0><1> memindahkan kartu ini dari {{fromList}} ke {{toList}}</1>',
|
||||||
|
username: 'Username',
|
||||||
|
usernameAlreadyInUse: 'Username telah digunakan',
|
||||||
|
users: 'Pengguna',
|
||||||
|
version: 'Versi',
|
||||||
|
viewer: 'Penglihat',
|
||||||
|
writeComment: 'Tuliskan komentar...',
|
||||||
|
},
|
||||||
|
|
||||||
|
action: {
|
||||||
|
addAnotherCard: 'Tambahkan kartu lain',
|
||||||
|
addAnotherList: 'Tambahkan daftar lain',
|
||||||
|
addAnotherTask: 'Tambahkan aksi lain',
|
||||||
|
addCard: 'Tambah kartu',
|
||||||
|
addCard_title: 'Tambah Kartu',
|
||||||
|
addComment: 'Tambah komentar',
|
||||||
|
addList: 'Tambah daftar',
|
||||||
|
addMember: 'Tambah anggota',
|
||||||
|
addMoreDetailedDescription: 'Tambahkan deskripsi yang lebih detail',
|
||||||
|
addTask: 'Tambah tugas',
|
||||||
|
addToCard: 'Tambahkan ke kartu',
|
||||||
|
addUser: 'Tambah pengguna',
|
||||||
|
createBoard: 'Tambah papan',
|
||||||
|
createFile: 'Tambah berkas',
|
||||||
|
createLabel: 'Tambah label',
|
||||||
|
createNewLabel: 'Tambah label baru',
|
||||||
|
createProject: 'Tambah proyek',
|
||||||
|
delete: 'Hapus',
|
||||||
|
deleteAttachment: 'Hapus lampiran',
|
||||||
|
deleteAvatar: 'Hapus avatar',
|
||||||
|
deleteBoard: 'Hapus papan',
|
||||||
|
deleteCard: 'Hapus kartu',
|
||||||
|
deleteCard_title: 'Hapus Kartu',
|
||||||
|
deleteComment: 'Hapus komentar',
|
||||||
|
deleteImage: 'Hapus gambar',
|
||||||
|
deleteLabel: 'Hapus labek',
|
||||||
|
deleteList: 'Hapus daftar',
|
||||||
|
deleteList_title: 'Hapus Daftar',
|
||||||
|
deleteProject: 'Hapus proyek',
|
||||||
|
deleteProject_title: 'Hapus Proyek',
|
||||||
|
deleteTask: 'Hapus tugas',
|
||||||
|
deleteTask_title: 'Hapus Tugas',
|
||||||
|
deleteUser: 'Hapus pengguna',
|
||||||
|
edit: 'Ubah',
|
||||||
|
editDueDate_title: 'Ubah Tenggat Waktu',
|
||||||
|
editDescription_title: 'Ubdah Deskripsi',
|
||||||
|
editEmail_title: 'Ubah E-mail',
|
||||||
|
editInformation_title: 'Ubah Informasi',
|
||||||
|
editPassword_title: 'Ubah Kata Sandi',
|
||||||
|
editPermissions: 'Ubah izin',
|
||||||
|
editStopwatch_title: 'Ubah Stopwatch',
|
||||||
|
editTitle_title: 'Ubah Judul',
|
||||||
|
editUsername_title: 'Ubah Username',
|
||||||
|
hideDetails: 'Sembunyikan detail',
|
||||||
|
import: 'Impor',
|
||||||
|
leaveBoard: 'Keluar dari papan',
|
||||||
|
leaveProject: 'Keluar dari proyek',
|
||||||
|
logOut_title: 'Keluar',
|
||||||
|
makeCover_title: 'Buat Cover',
|
||||||
|
move: 'Pindah',
|
||||||
|
moveCard_title: 'Pindahkan Kartu',
|
||||||
|
remove: 'Hapus',
|
||||||
|
removeBackground: 'Hapus latar belakang',
|
||||||
|
removeCover_title: 'Hapus Cover',
|
||||||
|
removeFromBoard: 'Hapus dari papan',
|
||||||
|
removeFromProject: 'Hapus dari proyek',
|
||||||
|
removeManager: 'Hapus manager',
|
||||||
|
removeMember: 'Hapus papan',
|
||||||
|
save: 'Simpan',
|
||||||
|
showAllAttachments: 'Tampilkan semua lampiran ({{hidden}} tersembunyi)',
|
||||||
|
showDetails: 'Tampilkan detail',
|
||||||
|
showFewerAttachments: 'Tampilkan lampiran lebih sedikit',
|
||||||
|
start: 'Mulai',
|
||||||
|
stop: 'Berhenti',
|
||||||
|
subscribe: 'Berlanggan',
|
||||||
|
unsubscribe: 'Berhenti berlangganan',
|
||||||
|
uploadNewAvatar: 'Unggah avatar baru',
|
||||||
|
uploadNewImage: 'Unggah gambar baru',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
import login from './login';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
language: 'id',
|
||||||
|
country: 'id',
|
||||||
|
name: 'Bahasa Indonesia',
|
||||||
|
embeddedLocale: login,
|
||||||
|
};
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
export default {
|
||||||
|
translation: {
|
||||||
|
common: {
|
||||||
|
emailOrUsername: 'E-mail atau username',
|
||||||
|
invalidEmailOrUsername: 'E-mail atau username salah',
|
||||||
|
invalidPassword: 'Kata sandi salah',
|
||||||
|
logInToPlanka: 'Masuk ke Planka',
|
||||||
|
noInternetConnection: 'Tidak ada koneksi internet',
|
||||||
|
pageNotFound_title: 'Halaman Tidak Ditemukan',
|
||||||
|
password: 'Kata sandi',
|
||||||
|
projectManagement: 'Manajemen projek',
|
||||||
|
serverConnectionFailed: 'Koneksi server gagal',
|
||||||
|
unknownError: 'Kesalahan tidak diketahui, coba lagi nanti.',
|
||||||
|
useSingleSignOn: 'Gunakan single sign-on',
|
||||||
|
},
|
||||||
|
|
||||||
|
action: {
|
||||||
|
logIn: 'Masuk',
|
||||||
|
logInWithSSO: 'Masuk dengan SSO',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,242 @@
|
|||||||
|
import dateFns from 'date-fns/locale/nl';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
dateFns,
|
||||||
|
|
||||||
|
format: {
|
||||||
|
date: 'd-M-yyyy',
|
||||||
|
time: 'p',
|
||||||
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
|
longDate: 'd MMM',
|
||||||
|
longDateTime: "d MMMM 'om' p",
|
||||||
|
fullDate: 'd MMM y',
|
||||||
|
fullDateTime: "d MMMM y 'om' p",
|
||||||
|
},
|
||||||
|
|
||||||
|
translation: {
|
||||||
|
common: {
|
||||||
|
aboutPlanka: 'Over Planka',
|
||||||
|
account: 'Account',
|
||||||
|
actions: 'Acties',
|
||||||
|
addAttachment_title: 'Bijlage toevoegen',
|
||||||
|
addComment: 'Opmerking toevoegen',
|
||||||
|
addManager_title: 'Manager toevoegen',
|
||||||
|
addMember_title: 'Lid toevoegen',
|
||||||
|
addUser_title: 'Gebruiker toevoegen',
|
||||||
|
administrator: 'Beheerder',
|
||||||
|
all: 'Alle',
|
||||||
|
allChangesWillBeAutomaticallySavedAfterConnectionRestored:
|
||||||
|
'Alle wijzigingen worden automatisch opgeslagen<br />nadat de verbinding is hersteld.',
|
||||||
|
areYouSureYouWantToDeleteThisAttachment: 'Weet u zeker dat u deze bijlage wilt verwijderen?',
|
||||||
|
areYouSureYouWantToDeleteThisBoard: 'Weet u zeker dat u dit bord wilt verwijderen?',
|
||||||
|
areYouSureYouWantToDeleteThisCard: 'Weet u zeker dat u deze kaart wilt verwijderen?',
|
||||||
|
areYouSureYouWantToDeleteThisComment: 'Weet u zeker dat u deze opmerking wilt verwijderen?',
|
||||||
|
areYouSureYouWantToDeleteThisLabel: 'Weet u zeker dat u dit label wilt verwijderen?',
|
||||||
|
areYouSureYouWantToDeleteThisList: 'Weet u zeker dat u deze lijst wilt verwijderen?',
|
||||||
|
areYouSureYouWantToDeleteThisProject: 'Weet u zeker dat u dit project wilt verwijderen?',
|
||||||
|
areYouSureYouWantToDeleteThisTask: 'Weet u zeker dat u deze taak wilt verwijderen?',
|
||||||
|
areYouSureYouWantToDeleteThisUser: 'Weet u zeker dat u deze gebruiker wilt verwijderen?',
|
||||||
|
areYouSureYouWantToLeaveBoard: 'Weet u zeker dat u het bord wilt verlaten?',
|
||||||
|
areYouSureYouWantToLeaveProject: 'Weet u zeker dat u het project wilt verlaten?',
|
||||||
|
areYouSureYouWantToRemoveThisManagerFromProject:
|
||||||
|
'Weet u zeker dat u deze manager uit het project wilt verwijderen?',
|
||||||
|
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||||
|
'Weet u zeker dat u dit lid uit het bord wilt verwijderen?',
|
||||||
|
attachment: 'Bijlage',
|
||||||
|
attachments: 'Bijlagen',
|
||||||
|
authentication: 'Authenticatie',
|
||||||
|
background: 'Achtergrond',
|
||||||
|
board: 'Bord',
|
||||||
|
boardNotFound_title: 'Bord niet gevonden',
|
||||||
|
canComment: 'Kan opmerking plaatsen',
|
||||||
|
canEditContentOfBoard: 'Kan de inhoud van het bord bewerken.',
|
||||||
|
canOnlyViewBoard: 'Kan alleen het bord bekijken.',
|
||||||
|
cardActions_title: 'Kaartacties',
|
||||||
|
cardNotFound_title: 'Kaart niet gevonden',
|
||||||
|
cardOrActionAreDeleted: 'Kaart of actie zijn verwijderd.',
|
||||||
|
color: 'Kleur',
|
||||||
|
createBoard_title: 'Bord aanmaken',
|
||||||
|
createLabel_title: 'Label aanmaken',
|
||||||
|
createNewOneOrSelectExistingOne: 'Maak een nieuwe of selecteer een bestaande.',
|
||||||
|
createProject_title: 'Project aanmaken',
|
||||||
|
createTextFile_title: 'Tekstbestand aanmaken',
|
||||||
|
currentPassword: 'Huidig wachtwoord',
|
||||||
|
dangerZone_title: 'Gevaarlijke zone',
|
||||||
|
date: 'Datum',
|
||||||
|
dueDate_title: 'Vervaldatum',
|
||||||
|
deleteAttachment_title: 'Bijlage verwijderen',
|
||||||
|
deleteBoard_title: 'Bord verwijderen',
|
||||||
|
deleteCard_title: 'Kaart verwijderen',
|
||||||
|
deleteComment_title: 'Opmerking verwijderen',
|
||||||
|
deleteLabel_title: 'Label verwijderen',
|
||||||
|
deleteList_title: 'Lijst verwijderen',
|
||||||
|
deleteProject_title: 'Project verwijderen',
|
||||||
|
deleteTask_title: 'Taak verwijderen',
|
||||||
|
deleteUser_title: 'Gebruiker verwijderen',
|
||||||
|
description: 'Beschrijving',
|
||||||
|
detectAutomatically: 'Automatisch detecteren',
|
||||||
|
dropFileToUpload: 'Sleep bestand om te uploaden',
|
||||||
|
editor: 'Editor',
|
||||||
|
editAttachment_title: 'Bijlage bewerken',
|
||||||
|
editAvatar_title: 'Avatar bewerken',
|
||||||
|
editBoard_title: 'Bord bewerken',
|
||||||
|
editDueDate_title: 'Vervaldatum bewerken',
|
||||||
|
editEmail_title: 'E-mail bewerken',
|
||||||
|
editInformation_title: 'Informatie bewerken',
|
||||||
|
editLabel_title: 'Label bewerken',
|
||||||
|
editPassword_title: 'Wachtwoord bewerken',
|
||||||
|
editPermissions_title: 'Machtigingen bewerken',
|
||||||
|
editStopwatch_title: 'Stopwatch bewerken',
|
||||||
|
editUsername_title: 'Gebruikersnaam bewerken',
|
||||||
|
email: 'E-mail',
|
||||||
|
emailAlreadyInUse: 'E-mail is al in gebruik',
|
||||||
|
enterCardTitle: 'Voer kaarttitel in... [Ctrl+Enter] om automatisch te openen.',
|
||||||
|
enterDescription: 'Beschrijving invoeren...',
|
||||||
|
enterFilename: 'Bestandsnaam invoeren',
|
||||||
|
enterListTitle: 'Voer lijsttitel in...',
|
||||||
|
enterProjectTitle: 'Voer projecttitel in',
|
||||||
|
enterTaskDescription: 'Taakbeschrijving invoeren...',
|
||||||
|
filterByLabels_title: 'Filteren op labels',
|
||||||
|
filterByMembers_title: 'Filteren op leden',
|
||||||
|
fromComputer_title: 'Van computer',
|
||||||
|
fromTrello: 'Van Trello',
|
||||||
|
general: 'Algemeen',
|
||||||
|
hours: 'Uren',
|
||||||
|
importBoard_title: 'Bord importeren',
|
||||||
|
invalidCurrentPassword: 'Ongeldig huidig wachtwoord',
|
||||||
|
labels: 'Labels',
|
||||||
|
language: 'Taal',
|
||||||
|
leaveBoard_title: 'Bord verlaten',
|
||||||
|
leaveProject_title: 'Project verlaten',
|
||||||
|
list: 'Lijst',
|
||||||
|
listActions_title: 'Lijstacties',
|
||||||
|
managers: 'Managers',
|
||||||
|
members: 'Leden',
|
||||||
|
minutes: 'Minuten',
|
||||||
|
moveCard_title: 'Kaart verplaatsen',
|
||||||
|
name: 'Naam',
|
||||||
|
newEmail: 'Nieuwe e-mail',
|
||||||
|
newPassword: 'Nieuw wachtwoord',
|
||||||
|
newUsername: 'Nieuwe gebruikersnaam',
|
||||||
|
noConnectionToServer: 'Geen verbinding met server',
|
||||||
|
noBoards: 'Geen borden',
|
||||||
|
noLists: 'Geen lijsten',
|
||||||
|
noProjects: 'Geen projecten',
|
||||||
|
notifications: 'Meldingen',
|
||||||
|
noUnreadNotifications: 'Geen ongelezen meldingen.',
|
||||||
|
openBoard_title: 'Bord openen',
|
||||||
|
optional_inline: 'optioneel',
|
||||||
|
organization: 'Organisatie',
|
||||||
|
phone: 'Telefoon',
|
||||||
|
preferences: 'Voorkeuren',
|
||||||
|
pressPasteShortcutToAddAttachmentFromClipboard:
|
||||||
|
'Tip: druk op Ctrl-V (Cmd-V op Mac) om een bijlage van het klembord toe te voegen.',
|
||||||
|
project: 'Project',
|
||||||
|
projectNotFound_title: 'Project niet gevonden',
|
||||||
|
removeManager_title: 'Manager verwijderen',
|
||||||
|
removeMember_title: 'Lid verwijderen',
|
||||||
|
searchLabels: 'Labels zoeken...',
|
||||||
|
searchMembers: 'Leden zoeken...',
|
||||||
|
searchUsers: 'Gebruikers zoeken...',
|
||||||
|
seconds: 'Seconden',
|
||||||
|
selectBoard: 'Bord selecteren',
|
||||||
|
selectList: 'Lijst selecteren',
|
||||||
|
selectPermissions_title: 'Machtigingen selecteren',
|
||||||
|
selectProject: 'Project selecteren',
|
||||||
|
settings: 'Instellingen',
|
||||||
|
stopwatch: 'Stopwatch',
|
||||||
|
subscribeToMyOwnCardsByDefault: 'Standaard abonneren op mijn eigen kaarten',
|
||||||
|
taskActions_title: 'Takenacties',
|
||||||
|
tasks: 'Taken',
|
||||||
|
thereIsNoPreviewAvailableForThisAttachment:
|
||||||
|
'Er is geen voorbeeld beschikbaar voor deze bijlage.',
|
||||||
|
time: 'Tijd',
|
||||||
|
title: 'Titel',
|
||||||
|
userActions_title: 'Gebruikersacties',
|
||||||
|
userAddedThisCardToList: '<0>{{user}}</0><1> heeft deze kaart toegevoegd aan {{list}}</1>',
|
||||||
|
userLeftNewCommentToCard:
|
||||||
|
'{{user}} heeft een nieuwe opmerking achtergelaten «{{comment}}» bij <2>{{card}}</2>',
|
||||||
|
userMovedCardFromListToList:
|
||||||
|
'{{user}} heeft <2>{{card}}</2> verplaatst van {{fromList}} naar {{toList}}',
|
||||||
|
userMovedThisCardFromListToList:
|
||||||
|
'<0>{{user}}</0><1> heeft deze kaart verplaatst van {{fromList}} naar {{toList}}</1>',
|
||||||
|
username: 'Gebruikersnaam',
|
||||||
|
usernameAlreadyInUse: 'Gebruikersnaam is al in gebruik',
|
||||||
|
users: 'Gebruikers',
|
||||||
|
version: 'Versie',
|
||||||
|
viewer: 'Kijker',
|
||||||
|
writeComment: 'Schrijf een opmerking...',
|
||||||
|
},
|
||||||
|
|
||||||
|
action: {
|
||||||
|
addAnotherCard: 'Voeg nog een kaart toe',
|
||||||
|
addAnotherList: 'Voeg nog een lijst toe',
|
||||||
|
addAnotherTask: 'Voeg nog een taak toe',
|
||||||
|
addCard: 'Kaart toevoegen',
|
||||||
|
addCard_title: 'Kaart toevoegen',
|
||||||
|
addComment: 'Opmerking toevoegen',
|
||||||
|
addList: 'Lijst toevoegen',
|
||||||
|
addMember: 'Lid toevoegen',
|
||||||
|
addMoreDetailedDescription: 'Meer gedetailleerde beschrijving toevoegen',
|
||||||
|
addTask: 'Taak toevoegen',
|
||||||
|
addToCard: 'Toevoegen aan kaart',
|
||||||
|
addUser: 'Gebruiker toevoegen',
|
||||||
|
createBoard: 'Bord aanmaken',
|
||||||
|
createFile: 'Bestand aanmaken',
|
||||||
|
createLabel: 'Label aanmaken',
|
||||||
|
createNewLabel: 'Nieuw label aanmaken',
|
||||||
|
createProject: 'Project aanmaken',
|
||||||
|
delete: 'Verwijderen',
|
||||||
|
deleteAttachment: 'Bijlage verwijderen',
|
||||||
|
deleteAvatar: 'Avatar verwijderen',
|
||||||
|
deleteBoard: 'Bord verwijderen',
|
||||||
|
deleteCard: 'Kaart verwijderen',
|
||||||
|
deleteCard_title: 'Kaart verwijderen',
|
||||||
|
deleteComment: 'Opmerking verwijderen',
|
||||||
|
deleteImage: 'Afbeelding verwijderen',
|
||||||
|
deleteLabel: 'Label verwijderen',
|
||||||
|
deleteList: 'Lijst verwijderen',
|
||||||
|
deleteList_title: 'Lijst verwijderen',
|
||||||
|
deleteProject: 'Project verwijderen',
|
||||||
|
deleteProject_title: 'Project verwijderen',
|
||||||
|
deleteTask: 'Taak verwijderen',
|
||||||
|
deleteTask_title: 'Taak verwijderen',
|
||||||
|
deleteUser: 'Gebruiker verwijderen',
|
||||||
|
edit: 'Bewerken',
|
||||||
|
editDueDate_title: 'Vervaldatum bewerken',
|
||||||
|
editDescription_title: 'Beschrijving bewerken',
|
||||||
|
editEmail_title: 'E-mail bewerken',
|
||||||
|
editInformation_title: 'Informatie bewerken',
|
||||||
|
editPassword_title: 'Wachtwoord bewerken',
|
||||||
|
editPermissions: 'Machtigingen bewerken',
|
||||||
|
editStopwatch_title: 'Stopwatch bewerken',
|
||||||
|
editTitle_title: 'Titel bewerken',
|
||||||
|
editUsername_title: 'Gebruikersnaam bewerken',
|
||||||
|
hideDetails: 'Details verbergen',
|
||||||
|
import: 'Importeren',
|
||||||
|
leaveBoard: 'Bord verlaten',
|
||||||
|
leaveProject: 'Project verlaten',
|
||||||
|
logOut_title: 'Uitloggen',
|
||||||
|
makeCover_title: 'Omslag maken',
|
||||||
|
move: 'Verplaatsen',
|
||||||
|
moveCard_title: 'Kaart verplaatsen',
|
||||||
|
remove: 'Verwijderen',
|
||||||
|
removeBackground: 'Achtergrond verwijderen',
|
||||||
|
removeCover_title: 'Omslag verwijderen',
|
||||||
|
removeFromBoard: 'Verwijderen van bord',
|
||||||
|
removeFromProject: 'Verwijderen van project',
|
||||||
|
removeManager: 'Manager verwijderen',
|
||||||
|
removeMember: 'Lid verwijderen',
|
||||||
|
save: 'Opslaan',
|
||||||
|
showAllAttachments: 'Alle bijlagen weergeven ({{hidden}} verbergen)',
|
||||||
|
showDetails: 'Details weergeven',
|
||||||
|
showFewerAttachments: 'Minder bijlagen weergeven',
|
||||||
|
start: 'Start',
|
||||||
|
stop: 'Stop',
|
||||||
|
subscribe: 'Abonneren',
|
||||||
|
unsubscribe: 'Afmelden',
|
||||||
|
uploadNewAvatar: 'Nieuwe avatar uploaden',
|
||||||
|
uploadNewImage: 'Nieuwe afbeelding uploaden',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
import login from './login';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
language: 'nl',
|
||||||
|
country: 'nl',
|
||||||
|
name: 'Nederlands',
|
||||||
|
embeddedLocale: login,
|
||||||
|
};
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
export default {
|
||||||
|
translation: {
|
||||||
|
common: {
|
||||||
|
emailOrUsername: 'E-mail of gebruikersnaam',
|
||||||
|
invalidEmailOrUsername: 'Ongeldig e-mailadres of gebruikersnaam',
|
||||||
|
invalidPassword: 'Ongeldig wachtwoord',
|
||||||
|
logInToPlanka: 'Inloggen bij Planka',
|
||||||
|
noInternetConnection: 'Geen internetverbinding',
|
||||||
|
pageNotFound_title: 'Pagina niet gevonden',
|
||||||
|
password: 'Wachtwoord',
|
||||||
|
projectManagement: 'Projectbeheer',
|
||||||
|
serverConnectionFailed: 'Verbinding met de server mislukt',
|
||||||
|
unknownError: 'Onbekende fout, probeer het later opnieuw',
|
||||||
|
useSingleSignOn: 'Gebruik single sign-on',
|
||||||
|
},
|
||||||
|
|
||||||
|
action: {
|
||||||
|
logIn: 'Inloggen',
|
||||||
|
logInWithSSO: 'Inloggen met SSO',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,241 @@
|
|||||||
|
import dateFns from 'date-fns/locale/pt-BR';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
dateFns,
|
||||||
|
|
||||||
|
format: {
|
||||||
|
date: 'dd/MM/yyyy',
|
||||||
|
time: 'p',
|
||||||
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
|
longDate: 'd MMM',
|
||||||
|
longDateTime: "d 'de' MMMM 'às' p",
|
||||||
|
fullDate: 'd MMM, y',
|
||||||
|
fullDateTime: "d 'de' MMMM, y 'às' p",
|
||||||
|
},
|
||||||
|
|
||||||
|
translation: {
|
||||||
|
common: {
|
||||||
|
aboutPlanka: 'Sobre o Planka',
|
||||||
|
account: 'Conta',
|
||||||
|
actions: 'Ações',
|
||||||
|
addAttachment_title: 'Adicionar Anexo',
|
||||||
|
addComment: 'Adicionar comentário',
|
||||||
|
addManager_title: 'Adicionar Gerente',
|
||||||
|
addMember_title: 'Adicionar Membro',
|
||||||
|
addUser_title: 'Adicionar Usuário',
|
||||||
|
administrator: 'Administrador',
|
||||||
|
all: 'Todos',
|
||||||
|
allChangesWillBeAutomaticallySavedAfterConnectionRestored:
|
||||||
|
'Todas as alterações serão salvas automaticamente<br />após a conexão ser restaurada.',
|
||||||
|
areYouSureYouWantToDeleteThisAttachment: 'Tem certeza de que deseja excluir este anexo?',
|
||||||
|
areYouSureYouWantToDeleteThisBoard: 'Tem certeza de que deseja excluir este quadro?',
|
||||||
|
areYouSureYouWantToDeleteThisCard: 'Tem certeza de que deseja excluir este cartão?',
|
||||||
|
areYouSureYouWantToDeleteThisComment: 'Tem certeza de que deseja excluir este comentário?',
|
||||||
|
areYouSureYouWantToDeleteThisLabel: 'Tem certeza de que deseja excluir este rótulo?',
|
||||||
|
areYouSureYouWantToDeleteThisList: 'Tem certeza de que deseja excluir esta lista?',
|
||||||
|
areYouSureYouWantToDeleteThisProject: 'Tem certeza de que deseja excluir este projeto?',
|
||||||
|
areYouSureYouWantToDeleteThisTask: 'Tem certeza de que deseja excluir esta tarefa?',
|
||||||
|
areYouSureYouWantToDeleteThisUser: 'Tem certeza de que deseja excluir este usuário?',
|
||||||
|
areYouSureYouWantToLeaveBoard: 'Tem certeza de que deseja sair do quadro?',
|
||||||
|
areYouSureYouWantToLeaveProject: 'Tem certeza de que deseja sair do projeto?',
|
||||||
|
areYouSureYouWantToRemoveThisManagerFromProject:
|
||||||
|
'Tem certeza de que deseja remover este gerente do projeto?',
|
||||||
|
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||||
|
'Tem certeza de que deseja remover este membro do quadro?',
|
||||||
|
attachment: 'Anexo',
|
||||||
|
attachments: 'Anexos',
|
||||||
|
authentication: 'Autenticação',
|
||||||
|
background: 'Fundo',
|
||||||
|
board: 'Quadro',
|
||||||
|
boardNotFound_title: 'Quadro não encontrado',
|
||||||
|
canComment: 'Pode comentar',
|
||||||
|
canEditContentOfBoard: 'Pode editar o conteúdo do quadro.',
|
||||||
|
canOnlyViewBoard: 'Só pode visualizar o quadro.',
|
||||||
|
cardActions_title: 'Ações do Cartão',
|
||||||
|
cardNotFound_title: 'Cartão não encontrado',
|
||||||
|
cardOrActionAreDeleted: 'Cartão ou ação foram excluídos.',
|
||||||
|
color: 'Cor',
|
||||||
|
createBoard_title: 'Criar Quadro',
|
||||||
|
createLabel_title: 'Criar Rótulo',
|
||||||
|
createNewOneOrSelectExistingOne: 'Criar um novo ou selecionar<br />um existente.',
|
||||||
|
createProject_title: 'Criar Projeto',
|
||||||
|
createTextFile_title: 'Criar Arquivo de Texto',
|
||||||
|
currentPassword: 'Senha atual',
|
||||||
|
dangerZone_title: 'Zona de Perigo',
|
||||||
|
date: 'Data',
|
||||||
|
dueDate_title: 'Data de Vencimento',
|
||||||
|
deleteAttachment_title: 'Excluir Anexo',
|
||||||
|
deleteBoard_title: 'Excluir Quadro',
|
||||||
|
deleteCard_title: 'Excluir Cartão',
|
||||||
|
deleteComment_title: 'Excluir Comentário',
|
||||||
|
deleteLabel_title: 'Excluir Rótulo',
|
||||||
|
deleteList_title: 'Excluir Lista',
|
||||||
|
deleteProject_title: 'Excluir Projeto',
|
||||||
|
deleteTask_title: 'Excluir Tarefa',
|
||||||
|
deleteUser_title: 'Excluir Usuário',
|
||||||
|
description: 'Descrição',
|
||||||
|
detectAutomatically: 'Detectar automaticamente',
|
||||||
|
dropFileToUpload: 'Solte o arquivo para enviar',
|
||||||
|
editor: 'Editor',
|
||||||
|
editAttachment_title: 'Editar Anexo',
|
||||||
|
editAvatar_title: 'Editar Avatar',
|
||||||
|
editBoard_title: 'Editar Quadro',
|
||||||
|
editDueDate_title: 'Editar Data de Vencimento',
|
||||||
|
editEmail_title: 'Editar E-mail',
|
||||||
|
editInformation_title: 'Editar Informações',
|
||||||
|
editLabel_title: 'Editar Rótulo',
|
||||||
|
editPassword_title: 'Editar Senha',
|
||||||
|
editPermissions_title: 'Editar Permissões',
|
||||||
|
editStopwatch_title: 'Editar Cronômetro',
|
||||||
|
editUsername_title: 'Editar Nome de Usuário',
|
||||||
|
email: 'E-mail',
|
||||||
|
emailAlreadyInUse: 'E-mail já está em uso',
|
||||||
|
enterCardTitle: 'Digite o título do cartão... [Ctrl+Enter] para abrir automaticamente.',
|
||||||
|
enterDescription: 'Digite a descrição...',
|
||||||
|
enterFilename: 'Digite o nome do arquivo',
|
||||||
|
enterListTitle: 'Digite o título da lista...',
|
||||||
|
enterProjectTitle: 'Digite o título do projeto',
|
||||||
|
enterTaskDescription: 'Digite a descrição da tarefa...',
|
||||||
|
filterByLabels_title: 'Filtrar por Rótulos',
|
||||||
|
filterByMembers_title: 'Filtrar por Membros',
|
||||||
|
fromComputer_title: 'Do Computador',
|
||||||
|
fromTrello: 'Do Trello',
|
||||||
|
general: 'Geral',
|
||||||
|
hours: 'Horas',
|
||||||
|
importBoard_title: 'Importar Quadro',
|
||||||
|
invalidCurrentPassword: 'Senha atual inválida',
|
||||||
|
labels: 'Rótulos',
|
||||||
|
language: 'Idioma',
|
||||||
|
leaveBoard_title: 'Sair do Quadro',
|
||||||
|
leaveProject_title: 'Sair do Projeto',
|
||||||
|
list: 'Lista',
|
||||||
|
listActions_title: 'Ações da Lista',
|
||||||
|
managers: 'Gerentes',
|
||||||
|
members: 'Membros',
|
||||||
|
minutes: 'Minutos',
|
||||||
|
moveCard_title: 'Mover Cartão',
|
||||||
|
name: 'Nome',
|
||||||
|
newEmail: 'Novo e-mail',
|
||||||
|
newPassword: 'Nova senha',
|
||||||
|
newUsername: 'Novo nome de usuário',
|
||||||
|
noConnectionToServer: 'Sem conexão com o servidor',
|
||||||
|
noBoards: 'Sem quadros',
|
||||||
|
noLists: 'Sem listas',
|
||||||
|
noProjects: 'Sem projetos',
|
||||||
|
notifications: 'Notificações',
|
||||||
|
noUnreadNotifications: 'Nenhuma notificação não lida.',
|
||||||
|
openBoard_title: 'Abrir Quadro',
|
||||||
|
optional_inline: 'opcional',
|
||||||
|
organization: 'Organização',
|
||||||
|
phone: 'Telefone',
|
||||||
|
preferences: 'Preferências',
|
||||||
|
pressPasteShortcutToAddAttachmentFromClipboard:
|
||||||
|
'Dica: pressione Ctrl-V (Cmd-V no Mac) para adicionar um anexo da área de transferência.',
|
||||||
|
project: 'Projeto',
|
||||||
|
projectNotFound_title: 'Projeto não encontrado',
|
||||||
|
removeManager_title: 'Remover Gerente',
|
||||||
|
removeMember_title: 'Remover Membro',
|
||||||
|
searchLabels: 'Pesquisar rótulos...',
|
||||||
|
searchMembers: 'Pesquisar membros...',
|
||||||
|
searchUsers: 'Pesquisar usuários...',
|
||||||
|
seconds: 'Segundos',
|
||||||
|
selectBoard: 'Selecionar quadro',
|
||||||
|
selectList: 'Selecionar lista',
|
||||||
|
selectPermissions_title: 'Selecionar Permissões',
|
||||||
|
selectProject: 'Selecionar projeto',
|
||||||
|
settings: 'Configurações',
|
||||||
|
stopwatch: 'Cronômetro',
|
||||||
|
subscribeToMyOwnCardsByDefault: 'Inscrever-se automaticamente em meus próprios cartões',
|
||||||
|
taskActions_title: 'Ações da Tarefa',
|
||||||
|
tasks: 'Tarefas',
|
||||||
|
thereIsNoPreviewAvailableForThisAttachment:
|
||||||
|
'Não há pré-visualização disponível para este anexo.',
|
||||||
|
time: 'Tempo',
|
||||||
|
title: 'Título',
|
||||||
|
userActions_title: 'Ações do Usuário',
|
||||||
|
userAddedThisCardToList: '<0>{{user}}</0><1> adicionou este cartão a {{list}}</1>',
|
||||||
|
userLeftNewCommentToCard:
|
||||||
|
'{{user}} deixou um novo comentário «{{comment}}» em <2>{{card}}</2>',
|
||||||
|
userMovedCardFromListToList: '{{user}} moveu <2>{{card}}</2> de {{fromList}} para {{toList}}',
|
||||||
|
userMovedThisCardFromListToList:
|
||||||
|
'<0>{{user}}</0><1> moveu este cartão de {{fromList}} para {{toList}}</1>',
|
||||||
|
username: 'Nome de usuário',
|
||||||
|
usernameAlreadyInUse: 'Nome de usuário já está em uso',
|
||||||
|
users: 'Usuários',
|
||||||
|
version: 'Versão',
|
||||||
|
viewer: 'Visualizador',
|
||||||
|
writeComment: 'Escreva um comentário...',
|
||||||
|
},
|
||||||
|
|
||||||
|
action: {
|
||||||
|
addAnotherCard: 'Adicionar outro cartão',
|
||||||
|
addAnotherList: 'Adicionar outra lista',
|
||||||
|
addAnotherTask: 'Adicionar outra tarefa',
|
||||||
|
addCard: 'Adicionar cartão',
|
||||||
|
addCard_title: 'Adicionar Cartão',
|
||||||
|
addComment: 'Adicionar comentário',
|
||||||
|
addList: 'Adicionar lista',
|
||||||
|
addMember: 'Adicionar membro',
|
||||||
|
addMoreDetailedDescription: 'Adicionar descrição mais detalhada',
|
||||||
|
addTask: 'Adicionar tarefa',
|
||||||
|
addToCard: 'Adicionar ao cartão',
|
||||||
|
addUser: 'Adicionar usuário',
|
||||||
|
createBoard: 'Criar quadro',
|
||||||
|
createFile: 'Criar arquivo',
|
||||||
|
createLabel: 'Criar rótulo',
|
||||||
|
createNewLabel: 'Criar novo rótulo',
|
||||||
|
createProject: 'Criar projeto',
|
||||||
|
delete: 'Excluir',
|
||||||
|
deleteAttachment: 'Excluir anexo',
|
||||||
|
deleteAvatar: 'Excluir avatar',
|
||||||
|
deleteBoard: 'Excluir quadro',
|
||||||
|
deleteCard: 'Excluir cartão',
|
||||||
|
deleteCard_title: 'Excluir Cartão',
|
||||||
|
deleteComment: 'Excluir comentário',
|
||||||
|
deleteImage: 'Excluir imagem',
|
||||||
|
deleteLabel: 'Excluir rótulo',
|
||||||
|
deleteList: 'Excluir lista',
|
||||||
|
deleteList_title: 'Excluir Lista',
|
||||||
|
deleteProject: 'Excluir projeto',
|
||||||
|
deleteProject_title: 'Excluir Projeto',
|
||||||
|
deleteTask: 'Excluir tarefa',
|
||||||
|
deleteTask_title: 'Excluir Tarefa',
|
||||||
|
deleteUser: 'Excluir usuário',
|
||||||
|
edit: 'Editar',
|
||||||
|
editDueDate_title: 'Editar Data de Vencimento',
|
||||||
|
editDescription_title: 'Editar Descrição',
|
||||||
|
editEmail_title: 'Editar E-mail',
|
||||||
|
editInformation_title: 'Editar Informações',
|
||||||
|
editPassword_title: 'Editar Senha',
|
||||||
|
editPermissions: 'Editar permissões',
|
||||||
|
editStopwatch_title: 'Editar Cronômetro',
|
||||||
|
editTitle_title: 'Editar Título',
|
||||||
|
editUsername_title: 'Editar Nome de Usuário',
|
||||||
|
hideDetails: 'Ocultar detalhes',
|
||||||
|
import: 'Importar',
|
||||||
|
leaveBoard: 'Sair do quadro',
|
||||||
|
leaveProject: 'Sair do projeto',
|
||||||
|
logOut_title: 'Sair',
|
||||||
|
makeCover_title: 'Tornar Capa',
|
||||||
|
move: 'Mover',
|
||||||
|
moveCard_title: 'Mover Cartão',
|
||||||
|
remove: 'Remover',
|
||||||
|
removeBackground: 'Remover fundo',
|
||||||
|
removeCover_title: 'Remover Capa',
|
||||||
|
removeFromBoard: 'Remover do quadro',
|
||||||
|
removeFromProject: 'Remover do projeto',
|
||||||
|
removeManager: 'Remover gerente',
|
||||||
|
removeMember: 'Remover membro',
|
||||||
|
save: 'Salvar',
|
||||||
|
showAllAttachments: 'Mostrar todos os anexos ({{hidden}} ocultos)',
|
||||||
|
showDetails: 'Mostrar detalhes',
|
||||||
|
showFewerAttachments: 'Mostrar menos anexos',
|
||||||
|
start: 'Iniciar',
|
||||||
|
stop: 'Parar',
|
||||||
|
subscribe: 'Inscrever-se',
|
||||||
|
unsubscribe: 'Cancelar inscrição',
|
||||||
|
uploadNewAvatar: 'Enviar novo avatar',
|
||||||
|
uploadNewImage: 'Enviar nova imagem',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
import login from './login';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
language: 'pt',
|
||||||
|
country: 'br',
|
||||||
|
name: 'Português',
|
||||||
|
embeddedLocale: login,
|
||||||
|
};
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
export default {
|
||||||
|
translation: {
|
||||||
|
common: {
|
||||||
|
emailOrUsername: 'E-mail ou nome de usuário',
|
||||||
|
invalidEmailOrUsername: 'E-mail ou nome de usuário inválido',
|
||||||
|
invalidPassword: 'Senha inválida',
|
||||||
|
logInToPlanka: 'Entrar no Planka',
|
||||||
|
noInternetConnection: 'Sem conexão com a internet',
|
||||||
|
pageNotFound_title: 'Página não encontrada',
|
||||||
|
password: 'Senha',
|
||||||
|
projectManagement: 'Gerenciamento de projetos',
|
||||||
|
serverConnectionFailed: 'Falha na conexão com o servidor',
|
||||||
|
unknownError: 'Erro desconhecido, tente novamente mais tarde',
|
||||||
|
useSingleSignOn: 'Usar login único',
|
||||||
|
},
|
||||||
|
|
||||||
|
action: {
|
||||||
|
logIn: 'Entrar',
|
||||||
|
logInWithSSO: 'Entrar com SSO',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
FROM node:18-alpine as server-dependencies
|
||||||
|
|
||||||
|
RUN apk -U upgrade \
|
||||||
|
&& apk add build-base python3 \
|
||||||
|
--no-cache
|
||||||
|
|
||||||
|
WORKDIR /app/client
|
||||||
|
COPY package.json package-lock.json /app/client/
|
||||||
|
RUN npm install npm@latest --global \
|
||||||
|
&& npm install pnpm --global \
|
||||||
|
&& pnpm import \
|
||||||
|
&& pnpm install
|
||||||
|
|
||||||
|
|
||||||
|
WORKDIR /app/
|
||||||
|
COPY ../../package.json ../../package-lock.json /app/
|
||||||
|
RUN pnpm import \
|
||||||
|
&& pnpm install
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
FROM node:18-alpine as server-dependencies
|
||||||
|
|
||||||
|
RUN apk -U upgrade \
|
||||||
|
&& apk add build-base python3 \
|
||||||
|
--no-cache
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package.json package-lock.json ./
|
||||||
|
|
||||||
|
RUN npm install npm@latest --global \
|
||||||
|
&& npm install pnpm --global \
|
||||||
|
&& pnpm import \
|
||||||
|
&& pnpm install
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
user nginx;
|
||||||
|
worker_processes 1;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
location /api/ {
|
||||||
|
proxy_pass http://server:1337;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /socket.io {
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_pass http://server:1337/socket.io;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://client:3000;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection 'upgrade';
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_cache_bypass $http_upgrade;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
const http = require('http');
|
||||||
|
const options = {
|
||||||
|
host: 'localhost',
|
||||||
|
port: 1337,
|
||||||
|
timeout: 2000
|
||||||
|
};
|
||||||
|
|
||||||
|
const healthCheck = http.request(options, (res) => {
|
||||||
|
console.log(`HEALTHCHECK STATUS: ${res.statusCode}`);
|
||||||
|
if (res.statusCode == 200) {
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
healthCheck.on('error', function (err) {
|
||||||
|
console.error('ERROR');
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
healthCheck.end();
|
||||||
@ -0,0 +1,82 @@
|
|||||||
|
const Errors = {
|
||||||
|
NOT_ENOUGH_RIGHTS: {
|
||||||
|
notEnoughRights: 'Not enough rights',
|
||||||
|
},
|
||||||
|
CARD_NOT_FOUND: {
|
||||||
|
cardNotFound: 'Card not found',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
inputs: {
|
||||||
|
id: {
|
||||||
|
type: 'string',
|
||||||
|
regex: /^[0-9]+$/,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
position: {
|
||||||
|
type: 'number',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
type: 'string',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
exits: {
|
||||||
|
notEnoughRights: {
|
||||||
|
responseType: 'forbidden',
|
||||||
|
},
|
||||||
|
cardNotFound: {
|
||||||
|
responseType: 'notFound',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
async fn(inputs) {
|
||||||
|
const { currentUser } = this.req;
|
||||||
|
|
||||||
|
const { card, list, board } = await sails.helpers.cards
|
||||||
|
.getProjectPath(inputs.id)
|
||||||
|
.intercept('pathNotFound', () => Errors.CARD_NOT_FOUND);
|
||||||
|
|
||||||
|
const boardMembership = await BoardMembership.findOne({
|
||||||
|
boardId: card.boardId,
|
||||||
|
userId: currentUser.id,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!boardMembership) {
|
||||||
|
throw Errors.CARD_NOT_FOUND; // Forbidden
|
||||||
|
}
|
||||||
|
|
||||||
|
if (boardMembership.role !== BoardMembership.Roles.EDITOR) {
|
||||||
|
throw Errors.NOT_ENOUGH_RIGHTS;
|
||||||
|
}
|
||||||
|
|
||||||
|
const values = _.pick(inputs, ['position', 'name']);
|
||||||
|
|
||||||
|
const {
|
||||||
|
card: nextCard,
|
||||||
|
cardMemberships,
|
||||||
|
cardLabels,
|
||||||
|
tasks,
|
||||||
|
} = await sails.helpers.cards.duplicateOne.with({
|
||||||
|
board,
|
||||||
|
list,
|
||||||
|
record: card,
|
||||||
|
values: {
|
||||||
|
...values,
|
||||||
|
creatorUser: currentUser,
|
||||||
|
},
|
||||||
|
request: this.req,
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
item: nextCard,
|
||||||
|
included: {
|
||||||
|
cardMemberships,
|
||||||
|
cardLabels,
|
||||||
|
tasks,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
@ -0,0 +1,144 @@
|
|||||||
|
const valuesValidator = (value) => {
|
||||||
|
if (!_.isPlainObject(value)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_.isUndefined(value.position) && !_.isFinite(value.position)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_.isPlainObject(value.creatorUser)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
inputs: {
|
||||||
|
record: {
|
||||||
|
type: 'ref',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
values: {
|
||||||
|
type: 'ref',
|
||||||
|
custom: valuesValidator,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
board: {
|
||||||
|
type: 'ref',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
type: 'ref',
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
request: {
|
||||||
|
type: 'ref',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
async fn(inputs) {
|
||||||
|
const { values } = inputs;
|
||||||
|
|
||||||
|
const cards = await sails.helpers.lists.getCards(inputs.record.listId);
|
||||||
|
|
||||||
|
const { position, repositions } = sails.helpers.utils.insertToPositionables(
|
||||||
|
values.position,
|
||||||
|
cards,
|
||||||
|
);
|
||||||
|
|
||||||
|
repositions.forEach(async ({ id, position: nextPosition }) => {
|
||||||
|
await Card.update({
|
||||||
|
id,
|
||||||
|
listId: inputs.record.listId,
|
||||||
|
}).set({
|
||||||
|
position: nextPosition,
|
||||||
|
});
|
||||||
|
|
||||||
|
sails.sockets.broadcast(`board:${inputs.record.boardId}`, 'cardUpdate', {
|
||||||
|
item: {
|
||||||
|
id,
|
||||||
|
position: nextPosition,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const card = await Card.create({
|
||||||
|
..._.pick(inputs.record, [
|
||||||
|
'boardId',
|
||||||
|
'listId',
|
||||||
|
'name',
|
||||||
|
'description',
|
||||||
|
'dueDate',
|
||||||
|
'stopwatch',
|
||||||
|
]),
|
||||||
|
...values,
|
||||||
|
position,
|
||||||
|
creatorUserId: values.creatorUser.id,
|
||||||
|
}).fetch();
|
||||||
|
|
||||||
|
const cardMemberships = await sails.helpers.cards.getCardMemberships(inputs.record.id);
|
||||||
|
const cardMembershipsValues = cardMemberships.map((cardMembership) => ({
|
||||||
|
..._.pick(cardMembership, ['userId']),
|
||||||
|
cardId: card.id,
|
||||||
|
}));
|
||||||
|
const nextCardMemberships = await CardMembership.createEach(cardMembershipsValues).fetch();
|
||||||
|
|
||||||
|
const cardLabels = await sails.helpers.cards.getCardLabels(inputs.record.id);
|
||||||
|
const cardLabelsValues = cardLabels.map((cardLabel) => ({
|
||||||
|
..._.pick(cardLabel, ['labelId']),
|
||||||
|
cardId: card.id,
|
||||||
|
}));
|
||||||
|
const nextCardLabels = await CardLabel.createEach(cardLabelsValues).fetch();
|
||||||
|
|
||||||
|
const tasks = await sails.helpers.cards.getTasks(inputs.record.id);
|
||||||
|
const tasksValues = tasks.map((task) => ({
|
||||||
|
..._.pick(task, ['position', 'name', 'isCompleted']),
|
||||||
|
cardId: card.id,
|
||||||
|
}));
|
||||||
|
const nextTasks = await Task.createEach(tasksValues).fetch();
|
||||||
|
|
||||||
|
sails.sockets.broadcast(
|
||||||
|
`board:${card.boardId}`,
|
||||||
|
'cardCreate',
|
||||||
|
{
|
||||||
|
item: card,
|
||||||
|
},
|
||||||
|
inputs.request,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (values.creatorUser.subscribeToOwnCards) {
|
||||||
|
await CardSubscription.create({
|
||||||
|
cardId: card.id,
|
||||||
|
userId: card.creatorUserId,
|
||||||
|
}).tolerate('E_UNIQUE');
|
||||||
|
|
||||||
|
sails.sockets.broadcast(`user:${card.creatorUserId}`, 'cardUpdate', {
|
||||||
|
item: {
|
||||||
|
id: card.id,
|
||||||
|
isSubscribed: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await sails.helpers.actions.createOne.with({
|
||||||
|
values: {
|
||||||
|
card,
|
||||||
|
type: Action.Types.CREATE_CARD, // TODO: introduce separate type?
|
||||||
|
data: {
|
||||||
|
list: _.pick(inputs.list, ['id', 'name']),
|
||||||
|
},
|
||||||
|
user: values.creatorUser,
|
||||||
|
},
|
||||||
|
board: inputs.board,
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
card,
|
||||||
|
cardMemberships: nextCardMemberships,
|
||||||
|
cardLabels: nextCardLabels,
|
||||||
|
tasks: nextTasks,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue