mirror of
https://github.com/plankanban/planka.git
synced 2025-07-19 13:19:44 +02:00
Merge branch 'master' into slack-bot-integration
This commit is contained in:
commit
a9c200cc3b
33 changed files with 450 additions and 31 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
# https://docs.docker.com/build/ci/github-actions/multi-platform/
|
||||||
name: Build and push Docker DEV image
|
name: Build and push Docker DEV image
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
@ -9,31 +10,98 @@ on:
|
||||||
- '*.md'
|
- '*.md'
|
||||||
branches: [master]
|
branches: [master]
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY_IMAGE: ghcr.io/plankanban/planka
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-push-docker-image-dev:
|
build:
|
||||||
runs-on: self-hosted
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: [self-hosted, x64]
|
||||||
|
platform: linux/amd64
|
||||||
|
- os: [self-hosted, arm64]
|
||||||
|
platform: linux/arm64
|
||||||
|
- os: [self-hosted, arm64]
|
||||||
|
platform: linux/arm/v7
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: ${{ env.REGISTRY_IMAGE }}
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v2
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
- name: Login to GitHub Container Registry
|
- name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.repository_owner }}
|
username: ${{ github.repository_owner }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Build and push by digest
|
||||||
- name: Build and push
|
id: build
|
||||||
uses: docker/build-push-action@v4
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
platforms: ${{ matrix.platform }}
|
||||||
push: true
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
tags: |
|
outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
|
||||||
ghcr.io/plankanban/planka:dev
|
- name: Export digest
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/digests
|
||||||
|
digest="${{ steps.build.outputs.digest }}"
|
||||||
|
touch "/tmp/digests/${digest#sha256:}"
|
||||||
|
- name: Upload digest
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: digests
|
||||||
|
path: /tmp/digests/*
|
||||||
|
if-no-files-found: error
|
||||||
|
retention-days: 1
|
||||||
|
|
||||||
|
merge:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
needs:
|
||||||
|
- build
|
||||||
|
steps:
|
||||||
|
- name: Download digests
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: digests
|
||||||
|
path: /tmp/digests
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v5
|
||||||
|
with:
|
||||||
|
images: ${{ env.REGISTRY_IMAGE }}
|
||||||
|
- name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Create manifest list and push
|
||||||
|
working-directory: /tmp/digests
|
||||||
|
run: |
|
||||||
|
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
|
||||||
|
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
|
||||||
|
- name: Inspect image
|
||||||
|
run: |
|
||||||
|
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}
|
||||||
|
rerun-failed-jobs:
|
||||||
|
runs-on: [self-hosted]
|
||||||
|
needs: [ build, merge]
|
||||||
|
if: failure()
|
||||||
|
steps:
|
||||||
|
- name: Rerun failed jobs in the current workflow
|
||||||
|
env:
|
||||||
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: gh run rerun ${{ github.run_id }} --failed
|
||||||
|
|
|
@ -15,13 +15,13 @@ type: application
|
||||||
# This is the chart version. This version number should be incremented each time you make changes
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
# to the chart and its templates, including the app version.
|
# to the chart and its templates, including the app version.
|
||||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
version: 0.1.13
|
version: 0.1.14
|
||||||
|
|
||||||
# This is the version number of the application being deployed. This version number should be
|
# This is the version number of the application being deployed. This version number should be
|
||||||
# incremented each time you make changes to the application. Versions are not expected to
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
# It is recommended to use it with quotes.
|
# It is recommended to use it with quotes.
|
||||||
appVersion: "1.15.2"
|
appVersion: "1.15.3"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
- alias: postgresql
|
- alias: postgresql
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
REACT_APP_VERSION=1.15.2
|
REACT_APP_VERSION=1.15.3
|
||||||
|
|
|
@ -4,6 +4,7 @@ import classNames from 'classnames';
|
||||||
import { useTranslation, Trans } from 'react-i18next';
|
import { useTranslation, Trans } from 'react-i18next';
|
||||||
import { Comment } from 'semantic-ui-react';
|
import { Comment } from 'semantic-ui-react';
|
||||||
|
|
||||||
|
import getDateFormat from '../../../utils/get-date-format';
|
||||||
import { ActivityTypes } from '../../../constants/Enums';
|
import { ActivityTypes } from '../../../constants/Enums';
|
||||||
import ItemComment from './ItemComment';
|
import ItemComment from './ItemComment';
|
||||||
import User from '../../User';
|
import User from '../../User';
|
||||||
|
@ -66,7 +67,7 @@ const Item = React.memo(({ type, data, createdAt, user }) => {
|
||||||
<div className={classNames(styles.content)}>
|
<div className={classNames(styles.content)}>
|
||||||
<div>{contentNode}</div>
|
<div>{contentNode}</div>
|
||||||
<span className={styles.date}>
|
<span className={styles.date}>
|
||||||
{t('format:longDateTime', {
|
{t(`format:${getDateFormat(createdAt)}`, {
|
||||||
postProcess: 'formatDate',
|
postProcess: 'formatDate',
|
||||||
value: createdAt,
|
value: createdAt,
|
||||||
})}
|
})}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import { Comment } from 'semantic-ui-react';
|
||||||
import { usePopup } from '../../../lib/popup';
|
import { usePopup } from '../../../lib/popup';
|
||||||
import { Markdown } from '../../../lib/custom-ui';
|
import { Markdown } from '../../../lib/custom-ui';
|
||||||
|
|
||||||
|
import getDateFormat from '../../../utils/get-date-format';
|
||||||
import CommentEdit from './CommentEdit';
|
import CommentEdit from './CommentEdit';
|
||||||
import User from '../../User';
|
import User from '../../User';
|
||||||
import DeleteStep from '../../DeleteStep';
|
import DeleteStep from '../../DeleteStep';
|
||||||
|
@ -33,7 +34,7 @@ const ItemComment = React.memo(
|
||||||
<div className={styles.title}>
|
<div className={styles.title}>
|
||||||
<span className={styles.author}>{user.name}</span>
|
<span className={styles.author}>{user.name}</span>
|
||||||
<span className={styles.date}>
|
<span className={styles.date}>
|
||||||
{t('format:longDateTime', {
|
{t(`format:${getDateFormat(createdAt)}`, {
|
||||||
postProcess: 'formatDate',
|
postProcess: 'formatDate',
|
||||||
value: createdAt,
|
value: createdAt,
|
||||||
})}
|
})}
|
||||||
|
|
|
@ -4,6 +4,8 @@ import PropTypes from 'prop-types';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
|
import getDateFormat from '../../utils/get-date-format';
|
||||||
|
|
||||||
import styles from './DueDate.module.scss';
|
import styles from './DueDate.module.scss';
|
||||||
|
|
||||||
const SIZES = {
|
const SIZES = {
|
||||||
|
@ -12,15 +14,27 @@ const SIZES = {
|
||||||
MEDIUM: 'medium',
|
MEDIUM: 'medium',
|
||||||
};
|
};
|
||||||
|
|
||||||
const FORMATS = {
|
const LONG_DATE_FORMAT_BY_SIZE = {
|
||||||
tiny: 'longDate',
|
tiny: 'longDate',
|
||||||
small: 'longDate',
|
small: 'longDate',
|
||||||
medium: 'longDateTime',
|
medium: 'longDateTime',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const FULL_DATE_FORMAT_BY_SIZE = {
|
||||||
|
tiny: 'fullDate',
|
||||||
|
small: 'fullDate',
|
||||||
|
medium: 'fullDateTime',
|
||||||
|
};
|
||||||
|
|
||||||
const DueDate = React.memo(({ value, size, isDisabled, onClick }) => {
|
const DueDate = React.memo(({ value, size, isDisabled, onClick }) => {
|
||||||
const [t] = useTranslation();
|
const [t] = useTranslation();
|
||||||
|
|
||||||
|
const dateFormat = getDateFormat(
|
||||||
|
value,
|
||||||
|
LONG_DATE_FORMAT_BY_SIZE[size],
|
||||||
|
FULL_DATE_FORMAT_BY_SIZE[size],
|
||||||
|
);
|
||||||
|
|
||||||
const contentNode = (
|
const contentNode = (
|
||||||
<span
|
<span
|
||||||
className={classNames(
|
className={classNames(
|
||||||
|
@ -29,7 +43,7 @@ const DueDate = React.memo(({ value, size, isDisabled, onClick }) => {
|
||||||
onClick && styles.wrapperHoverable,
|
onClick && styles.wrapperHoverable,
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{t(`format:${FORMATS[size]}`, {
|
{t(`format:${dateFormat}`, {
|
||||||
value,
|
value,
|
||||||
postProcess: 'formatDate',
|
postProcess: 'formatDate',
|
||||||
})}
|
})}
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'd MMM',
|
longDate: 'd MMM',
|
||||||
longDateTime: "d MMMM 'v' p",
|
longDateTime: "d MMMM 'v' p",
|
||||||
|
fullDate: 'd MMM, y',
|
||||||
|
fullDateTime: "d MMMM, y 'v' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'MMM d',
|
longDate: 'MMM d',
|
||||||
longDateTime: "MMMM d 'at' p",
|
longDateTime: "MMMM d 'at' p",
|
||||||
|
fullDate: 'MMM d, y',
|
||||||
|
fullDateTime: "MMMM d, y 'a' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'd. MMM',
|
longDate: 'd. MMM',
|
||||||
longDateTime: "d. MMMM 'um' p",
|
longDateTime: "d. MMMM 'um' p",
|
||||||
|
fullDate: 'd. MMM. y',
|
||||||
|
fullDateTime: "d. MMMM. y 'um' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -5,6 +5,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'MMM d',
|
longDate: 'MMM d',
|
||||||
longDateTime: "MMMM d 'at' p",
|
longDateTime: "MMMM d 'at' p",
|
||||||
|
fullDate: 'MMM d, y',
|
||||||
|
fullDateTime: "MMMM d, y 'at' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'MMM d',
|
longDate: 'MMM d',
|
||||||
longDateTime: "MMMM d 'a' p",
|
longDateTime: "MMMM d 'a' p",
|
||||||
|
fullDate: 'MMM d, y',
|
||||||
|
fullDateTime: "MMMM d, y 'a' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'd MMM',
|
longDate: 'd MMM',
|
||||||
longDateTime: "d MMMM 'à' p",
|
longDateTime: "d MMMM 'à' p",
|
||||||
|
fullDate: 'd MMM y',
|
||||||
|
fullDateTime: "d MMMM y 'à' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -13,10 +13,11 @@ import ru from './ru';
|
||||||
import sk from './sk';
|
import sk from './sk';
|
||||||
import sv from './sv';
|
import sv from './sv';
|
||||||
import tr from './tr';
|
import tr from './tr';
|
||||||
|
import ua from './ua';
|
||||||
import uz from './uz';
|
import uz from './uz';
|
||||||
import zh from './zh';
|
import zh from './zh';
|
||||||
|
|
||||||
const locales = [cs, da, de, en, es, fr, it, ja, ko, pl, ro, ru, sk, sv, tr, uz, zh];
|
const locales = [cs, da, de, en, es, fr, it, ja, ko, pl, ro, ru, sk, sv, tr, ua, uz, zh];
|
||||||
|
|
||||||
export default locales;
|
export default locales;
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'MMM d',
|
longDate: 'MMM d',
|
||||||
longDateTime: "MMMM d 'at' p",
|
longDateTime: "MMMM d 'at' p",
|
||||||
|
fullDate: 'MMM d, y',
|
||||||
|
fullDateTime: "MMMM d, y 'at' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'MMMMd日',
|
longDate: 'MMMMd日',
|
||||||
longDateTime: "MMMMd'日 ' HH:mm",
|
longDateTime: "MMMMd'日 ' HH:mm",
|
||||||
|
fullDate: 'yyyy年M月d日',
|
||||||
|
fullDateTime: 'yyyy年M月d日 HH:mm',
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: "MMMMd'일'",
|
longDate: "MMMMd'일'",
|
||||||
longDateTime: "MMMMd'일 ' a hh시 mm분",
|
longDateTime: "MMMMd'일 ' a hh시 mm분",
|
||||||
|
fullDate: 'yyyy년M월d일',
|
||||||
|
fullDateTime: 'yyyy년M월d일 a hh시 mm분',
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'd MMM',
|
longDate: 'd MMM',
|
||||||
longDateTime: "d MMMM 'o' p",
|
longDateTime: "d MMMM 'o' p",
|
||||||
|
fullDate: 'd MMM y',
|
||||||
|
fullDateTime: "d MMMM y 'o' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'd MMM',
|
longDate: 'd MMM',
|
||||||
longDateTime: "d MMMM 'в' p",
|
longDateTime: "d MMMM 'в' p",
|
||||||
|
fullDate: 'd MMM y',
|
||||||
|
fullDateTime: "d MMMM y 'в' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'd MMM',
|
longDate: 'd MMM',
|
||||||
longDateTime: "d MMMM 'в' p",
|
longDateTime: "d MMMM 'в' p",
|
||||||
|
fullDate: 'd MMM y',
|
||||||
|
fullDateTime: "d MMMM y 'в' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'd MMM',
|
longDate: 'd MMM',
|
||||||
longDateTime: "d MMMM 'v' p",
|
longDateTime: "d MMMM 'v' p",
|
||||||
|
fullDate: 'd MMM y',
|
||||||
|
fullDateTime: "d MMMM y 'v' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'MMM d',
|
longDate: 'MMM d',
|
||||||
longDateTime: "MMMM d 'at' p",
|
longDateTime: "MMMM d 'at' p",
|
||||||
|
fullDate: 'MMM d, y',
|
||||||
|
fullDateTime: "MMMM d, y 'at' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -9,6 +9,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'd. MMM',
|
longDate: 'd. MMM',
|
||||||
longDateTime: "d. MMMM 'Saat' p",
|
longDateTime: "d. MMMM 'Saat' p",
|
||||||
|
fullDate: 'd. MMM. y',
|
||||||
|
fullDateTime: "d. MMMM. y 'Saat' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
237
client/src/locales/ua/core.js
Normal file
237
client/src/locales/ua/core.js
Normal file
|
@ -0,0 +1,237 @@
|
||||||
|
export default {
|
||||||
|
format: {
|
||||||
|
date: 'd/M/yyyy',
|
||||||
|
time: 'p',
|
||||||
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
|
longDate: 'd MMMM',
|
||||||
|
longDateTime: "d MMMM 'о' p",
|
||||||
|
fullDate: 'd MMMM y',
|
||||||
|
fullDateTime: "d MMMM y 'о' p",
|
||||||
|
},
|
||||||
|
|
||||||
|
translation: {
|
||||||
|
common: {
|
||||||
|
aboutPlanka: 'Про Planka',
|
||||||
|
account: 'Обліковий запис',
|
||||||
|
actions: 'Дії',
|
||||||
|
addAttachment_title: 'Додати Вкладення',
|
||||||
|
addComment: 'Додати коментар',
|
||||||
|
addManager_title: 'Додати Менеджера',
|
||||||
|
addMember_title: 'Додати Учасника',
|
||||||
|
addUser_title: 'Додати Користувача',
|
||||||
|
administrator: 'Адміністратор',
|
||||||
|
all: 'Все',
|
||||||
|
allChangesWillBeAutomaticallySavedAfterConnectionRestored:
|
||||||
|
'Всі зміни будуть автоматично збережені<br />після відновлення підключення.',
|
||||||
|
areYouSureYouWantToDeleteThisAttachment: 'Ви впевнені, що хочете видалити це вкладення?',
|
||||||
|
areYouSureYouWantToDeleteThisBoard: 'Ви впевнені, що хочете видалити цю дошку?',
|
||||||
|
areYouSureYouWantToDeleteThisCard: 'Ви впевнені, що хочете видалити цю картку?',
|
||||||
|
areYouSureYouWantToDeleteThisComment: 'Ви впевнені, що хочете видалити цей коментар?',
|
||||||
|
areYouSureYouWantToDeleteThisLabel: 'Ви впевнені, що хочете видалити цю мітку?',
|
||||||
|
areYouSureYouWantToDeleteThisList: 'Ви впевнені, що хочете видалити цей список?',
|
||||||
|
areYouSureYouWantToDeleteThisProject: 'Ви впевнені, що хочете видалити цей проект?',
|
||||||
|
areYouSureYouWantToDeleteThisTask: 'Ви впевнені, що хочете видалити це завдання?',
|
||||||
|
areYouSureYouWantToDeleteThisUser: 'Ви впевнені, що хочете видалити цього користувача?',
|
||||||
|
areYouSureYouWantToLeaveBoard: 'Ви впевнені, що хочете залишити дошку?',
|
||||||
|
areYouSureYouWantToLeaveProject: 'Ви впевнені, що хочете залишити проект?',
|
||||||
|
areYouSureYouWantToRemoveThisManagerFromProject:
|
||||||
|
'Ви впевнені, що хочете видалити цього менеджера з проекту?',
|
||||||
|
areYouSureYouWantToRemoveThisMemberFromBoard:
|
||||||
|
'Ви впевнені, що хочете видалити цього учасника з дошки?',
|
||||||
|
attachment: 'Вкладення',
|
||||||
|
attachments: 'Вкладення',
|
||||||
|
authentication: 'Аутентифікація',
|
||||||
|
background: 'Фон',
|
||||||
|
board: 'Дошка',
|
||||||
|
boardNotFound_title: 'Дошку не знайдено',
|
||||||
|
canComment: 'Може коментувати',
|
||||||
|
canEditContentOfBoard: 'Має право редагувати вміст дошки.',
|
||||||
|
canOnlyViewBoard: 'Може лише переглядати дошку.',
|
||||||
|
cardActions_title: 'Дії з карткою',
|
||||||
|
cardNotFound_title: 'Картку не знайдено',
|
||||||
|
cardOrActionAreDeleted: 'Картка чи дія видалена.',
|
||||||
|
color: 'Колір',
|
||||||
|
createBoard_title: 'Створити Дошку',
|
||||||
|
createLabel_title: 'Створити Мітку',
|
||||||
|
createNewOneOrSelectExistingOne: 'Створіть нову або виберіть<br />існуючу.',
|
||||||
|
createProject_title: 'Створити Проект',
|
||||||
|
createTextFile_title: 'Створити Текстовий Файл',
|
||||||
|
currentPassword: 'Поточний пароль',
|
||||||
|
dangerZone_title: 'Небезпечна Зона',
|
||||||
|
date: 'Дата',
|
||||||
|
dueDate_title: 'Крайній Термін',
|
||||||
|
deleteAttachment_title: 'Видалити Вкладення',
|
||||||
|
deleteBoard_title: 'Видалити Дошку',
|
||||||
|
deleteCard_title: 'Видалити Картку',
|
||||||
|
deleteComment_title: 'Видалити Коментар',
|
||||||
|
deleteLabel_title: 'Видалити Мітку',
|
||||||
|
deleteList_title: 'Видалити Список',
|
||||||
|
deleteProject_title: 'Видалити Проект',
|
||||||
|
deleteTask_title: 'Видалити Завдання',
|
||||||
|
deleteUser_title: 'Видалити Користувача',
|
||||||
|
description: 'Опис',
|
||||||
|
detectAutomatically: 'Визначити автоматично',
|
||||||
|
dropFileToUpload: 'Перетягніть файл для завантаження',
|
||||||
|
editor: 'Редактор',
|
||||||
|
editAttachment_title: 'Редагувати Вкладення',
|
||||||
|
editAvatar_title: 'Редагувати Аватар',
|
||||||
|
editBoard_title: 'Редагувати Дошку',
|
||||||
|
editDueDate_title: 'Редагувати Крайній Термін',
|
||||||
|
editEmail_title: 'Редагувати Електронну пошту',
|
||||||
|
editInformation_title: 'Редагувати Інформацію',
|
||||||
|
editLabel_title: 'Редагувати Мітку',
|
||||||
|
editPassword_title: 'Редагувати Пароль',
|
||||||
|
editPermissions_title: 'Редагувати Дозволи',
|
||||||
|
editStopwatch_title: 'Редагувати Секундомір',
|
||||||
|
editUsername_title: "Редагувати Ім'я користувача",
|
||||||
|
email: 'Електронна пошта',
|
||||||
|
emailAlreadyInUse: 'Електронна пошта вже використовується',
|
||||||
|
enterCardTitle: 'Введіть назву картки... [Ctrl+Enter] для автоматичного відкриття.',
|
||||||
|
enterDescription: 'Введіть опис...',
|
||||||
|
enterFilename: "Введіть ім'я файлу",
|
||||||
|
enterListTitle: 'Введіть назву списку...',
|
||||||
|
enterProjectTitle: 'Введіть назву проекту',
|
||||||
|
enterTaskDescription: 'Введіть опис завдання...',
|
||||||
|
filterByLabels_title: 'Фільтрувати за Мітками',
|
||||||
|
filterByMembers_title: 'Фільтрувати за Учасниками',
|
||||||
|
fromComputer_title: "З комп'ютера",
|
||||||
|
fromTrello: 'З Trello',
|
||||||
|
general: 'Загальне',
|
||||||
|
hours: 'Години',
|
||||||
|
importBoard_title: 'Імпортувати Дошку',
|
||||||
|
invalidCurrentPassword: 'Невірний поточний пароль',
|
||||||
|
labels: 'Мітки',
|
||||||
|
language: 'Мова',
|
||||||
|
leaveBoard_title: 'Покинути Дошку',
|
||||||
|
leaveProject_title: 'Покинути Проект',
|
||||||
|
list: 'Список',
|
||||||
|
listActions_title: 'Дії зі Списком',
|
||||||
|
managers: 'Менеджери',
|
||||||
|
members: 'Учасники',
|
||||||
|
minutes: 'Хвилини',
|
||||||
|
moveCard_title: 'Перемістити Картку',
|
||||||
|
name: 'Назва',
|
||||||
|
newEmail: 'Нова електронна пошта',
|
||||||
|
newPassword: 'Новий пароль',
|
||||||
|
newUsername: "Нове ім'я користувача",
|
||||||
|
noConnectionToServer: 'Відсутнє підключення до сервера',
|
||||||
|
noBoards: 'Немає дошок',
|
||||||
|
noLists: 'Немає списків',
|
||||||
|
noProjects: 'Немає проектів',
|
||||||
|
notifications: 'Сповіщення',
|
||||||
|
noUnreadNotifications: 'Немає непрочитаних сповіщень.',
|
||||||
|
openBoard_title: 'Відкрити Дошку',
|
||||||
|
optional_inline: 'опціонально',
|
||||||
|
organization: 'Організація',
|
||||||
|
phone: 'Телефон',
|
||||||
|
preferences: 'Уподобання',
|
||||||
|
pressPasteShortcutToAddAttachmentFromClipboard:
|
||||||
|
'Порада: натисніть Ctrl-V (⌘V на Mac), щоб додати вкладення з буфера обміну.',
|
||||||
|
project: 'Проект',
|
||||||
|
projectNotFound_title: 'Проект не знайдено',
|
||||||
|
removeManager_title: 'Видалити Менеджера',
|
||||||
|
removeMember_title: 'Видалити Учасника',
|
||||||
|
searchLabels: 'Пошук міток...',
|
||||||
|
searchMembers: 'Пошук учасників...',
|
||||||
|
searchUsers: 'Пошук користувачів...',
|
||||||
|
seconds: 'Секунди',
|
||||||
|
selectBoard: 'Вибрати дошку',
|
||||||
|
selectList: 'Вибрати список',
|
||||||
|
selectPermissions_title: 'Вибрати Дозволи',
|
||||||
|
selectProject: 'Вибрати проект',
|
||||||
|
settings: 'Налаштування',
|
||||||
|
stopwatch: 'Секундомір',
|
||||||
|
subscribeToMyOwnCardsByDefault: 'Підписатися на свої картки за замовчуванням',
|
||||||
|
taskActions_title: 'Дії з завданням',
|
||||||
|
tasks: 'Завдання',
|
||||||
|
thereIsNoPreviewAvailableForThisAttachment: 'Для цього вкладення немає доступного перегляду.',
|
||||||
|
time: 'Час',
|
||||||
|
title: 'Назва',
|
||||||
|
userActions_title: 'Дії користувача',
|
||||||
|
userAddedThisCardToList: '<0>{{user}}</0><1> додав(ла) цю картку до {{list}}</1>',
|
||||||
|
userLeftNewCommentToCard:
|
||||||
|
'{{user}} залишив(ла) новий коментар «{{comment}}» до <2>{{card}}</2>',
|
||||||
|
userMovedCardFromListToList:
|
||||||
|
'{{user}} перемістив(ла) <2>{{card}}</2> з {{fromList}} в {{toList}}',
|
||||||
|
userMovedThisCardFromListToList:
|
||||||
|
'<0>{{user}}</0><1> перемістив(ла) цю картку з {{fromList}} в {{toList}}</1>',
|
||||||
|
username: "Ім'я користувача",
|
||||||
|
usernameAlreadyInUse: "Ім'я користувача вже використовується",
|
||||||
|
users: 'Користувачі',
|
||||||
|
version: 'Версія',
|
||||||
|
viewer: 'Переглядач',
|
||||||
|
writeComment: 'Написати коментар...',
|
||||||
|
},
|
||||||
|
|
||||||
|
action: {
|
||||||
|
addAnotherCard: 'Додати іншу картку',
|
||||||
|
addAnotherList: 'Додати інший список',
|
||||||
|
addAnotherTask: 'Додати інше завдання',
|
||||||
|
addCard: 'Додати картку',
|
||||||
|
addCard_title: 'Додати Картку',
|
||||||
|
addComment: 'Додати коментар',
|
||||||
|
addList: 'Додати список',
|
||||||
|
addMember: 'Додати учасника',
|
||||||
|
addMoreDetailedDescription: 'Додати більш детальний опис',
|
||||||
|
addTask: 'Додати завдання',
|
||||||
|
addToCard: 'Додати до картки',
|
||||||
|
addUser: 'Додати користувача',
|
||||||
|
createBoard: 'Створити дошку',
|
||||||
|
createFile: 'Створити файл',
|
||||||
|
createLabel: 'Створити мітку',
|
||||||
|
createNewLabel: 'Створити нову мітку',
|
||||||
|
createProject: 'Створити проект',
|
||||||
|
delete: 'Видалити',
|
||||||
|
deleteAttachment: 'Видалити вкладення',
|
||||||
|
deleteAvatar: 'Видалити аватар',
|
||||||
|
deleteBoard: 'Видалити дошку',
|
||||||
|
deleteCard: 'Видалити картку',
|
||||||
|
deleteCard_title: 'Видалити Картку',
|
||||||
|
deleteComment: 'Видалити коментар',
|
||||||
|
deleteImage: 'Видалити зображення',
|
||||||
|
deleteLabel: 'Видалити мітку',
|
||||||
|
deleteList: 'Видалити список',
|
||||||
|
deleteList_title: 'Видалити Список',
|
||||||
|
deleteProject: 'Видалити проект',
|
||||||
|
deleteProject_title: 'Видалити Проект',
|
||||||
|
deleteTask: 'Видалити завдання',
|
||||||
|
deleteTask_title: 'Видалити Завдання',
|
||||||
|
deleteUser: 'Видалити користувача',
|
||||||
|
edit: 'Редагувати',
|
||||||
|
editDueDate_title: 'Редагувати термін виконання',
|
||||||
|
editDescription_title: 'Редагувати опис',
|
||||||
|
editEmail_title: 'Редагувати E-mail',
|
||||||
|
editInformation_title: 'Редагувати інформацію',
|
||||||
|
editPassword_title: 'Редагувати пароль',
|
||||||
|
editPermissions: 'Редагувати дозволи',
|
||||||
|
editStopwatch_title: 'Редагувати секундомір',
|
||||||
|
editTitle_title: 'Редагувати Заголовок',
|
||||||
|
editUsername_title: "Редагувати Ім'я користувача",
|
||||||
|
hideDetails: 'Сховати деталі',
|
||||||
|
import: 'Імпортувати',
|
||||||
|
leaveBoard: 'Залишити дошку',
|
||||||
|
leaveProject: 'Залишити проект',
|
||||||
|
logOut_title: 'Вийти',
|
||||||
|
makeCover_title: 'Встановити обкладинку',
|
||||||
|
move: 'Перемістити',
|
||||||
|
moveCard_title: 'Перемістити Картку',
|
||||||
|
remove: 'Видалити',
|
||||||
|
removeBackground: 'Видалити фон',
|
||||||
|
removeCover_title: 'Видалити обкладинку',
|
||||||
|
removeFromBoard: 'Вилучити з дошки',
|
||||||
|
removeFromProject: 'Вилучити з проекту',
|
||||||
|
removeManager: 'Вилучити керівника',
|
||||||
|
removeMember: 'Вилучити учасника',
|
||||||
|
save: 'Зберегти',
|
||||||
|
showAllAttachments: 'Показати всі вкладення ({{hidden}} приховані)',
|
||||||
|
showDetails: 'Показати деталі',
|
||||||
|
showFewerAttachments: 'Показати менше вкладень',
|
||||||
|
start: 'Почати',
|
||||||
|
stop: 'Зупинити',
|
||||||
|
subscribe: 'Підписатися',
|
||||||
|
unsubscribe: 'Відписатися',
|
||||||
|
uploadNewAvatar: 'Завантажити новий аватар',
|
||||||
|
uploadNewImage: 'Завантажити нове зображення',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
8
client/src/locales/ua/index.js
Normal file
8
client/src/locales/ua/index.js
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import login from './login';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
language: 'ua',
|
||||||
|
country: 'ua',
|
||||||
|
name: 'Українська',
|
||||||
|
embeddedLocale: login,
|
||||||
|
};
|
22
client/src/locales/ua/login.js
Normal file
22
client/src/locales/ua/login.js
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
export default {
|
||||||
|
translation: {
|
||||||
|
common: {
|
||||||
|
emailOrUsername: "Електронна пошта або ім'я користувача",
|
||||||
|
invalidEmailOrUsername: "Неправильна електронна пошта або ім'я користувача",
|
||||||
|
invalidPassword: 'Неправильний пароль',
|
||||||
|
logInToPlanka: 'Увійти в Planka',
|
||||||
|
noInternetConnection: 'Відсутнє підключення до Інтернету',
|
||||||
|
pageNotFound_title: 'Сторінку не знайдено',
|
||||||
|
password: 'Пароль',
|
||||||
|
projectManagement: 'Управління проектами',
|
||||||
|
serverConnectionFailed: 'Не вдалося підключитися до сервера',
|
||||||
|
unknownError: 'Невідома помилка, спробуйте ще раз пізніше',
|
||||||
|
useSingleSignOn: 'Використовувати одночасний вхід',
|
||||||
|
},
|
||||||
|
|
||||||
|
action: {
|
||||||
|
logIn: 'Увійти',
|
||||||
|
logInWithSSO: 'Увійти за допомогою SSO',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
|
@ -5,6 +5,8 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'MMM d',
|
longDate: 'MMM d',
|
||||||
longDateTime: "MMMM d 'at' p",
|
longDateTime: "MMMM d 'at' p",
|
||||||
|
fullDate: 'MMM d, y',
|
||||||
|
fullDateTime: "MMMM d, y 'at' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
|
|
|
@ -5,10 +5,13 @@ export default {
|
||||||
dateTime: '$t(format:date) $t(format:time)',
|
dateTime: '$t(format:date) $t(format:time)',
|
||||||
longDate: 'MMM d',
|
longDate: 'MMM d',
|
||||||
longDateTime: "MMMM d 'at' p",
|
longDateTime: "MMMM d 'at' p",
|
||||||
|
fullDate: 'MMM d, y',
|
||||||
|
fullDateTime: "MMMM d, y 'at' p",
|
||||||
},
|
},
|
||||||
|
|
||||||
translation: {
|
translation: {
|
||||||
common: {
|
common: {
|
||||||
|
aboutPlanka: '关于 Planka',
|
||||||
account: '账号',
|
account: '账号',
|
||||||
actions: '操作',
|
actions: '操作',
|
||||||
addAttachment_title: '添加附件',
|
addAttachment_title: '添加附件',
|
||||||
|
@ -38,6 +41,9 @@ export default {
|
||||||
background: '背景',
|
background: '背景',
|
||||||
board: '面板',
|
board: '面板',
|
||||||
boardNotFound_title: '面板不存在',
|
boardNotFound_title: '面板不存在',
|
||||||
|
canComment: '可以评论',
|
||||||
|
canEditContentOfBoard: '可以编辑面板内容',
|
||||||
|
canOnlyViewBoard: '仅可查看面板',
|
||||||
cardActions_title: '卡片操作',
|
cardActions_title: '卡片操作',
|
||||||
cardNotFound_title: '卡片不存在',
|
cardNotFound_title: '卡片不存在',
|
||||||
cardOrActionAreDeleted: '卡片或操作已经被删除',
|
cardOrActionAreDeleted: '卡片或操作已经被删除',
|
||||||
|
@ -61,14 +67,18 @@ export default {
|
||||||
deleteTask_title: '删除任务',
|
deleteTask_title: '删除任务',
|
||||||
deleteUser_title: '删除用户',
|
deleteUser_title: '删除用户',
|
||||||
description: '描述',
|
description: '描述',
|
||||||
|
detectAutomatically: '自动删除',
|
||||||
dropFileToUpload: '拖放文件以上传',
|
dropFileToUpload: '拖放文件以上传',
|
||||||
|
editor: '编辑器',
|
||||||
editAttachment_title: '编辑附件',
|
editAttachment_title: '编辑附件',
|
||||||
editAvatar_title: '编辑头像',
|
editAvatar_title: '编辑头像',
|
||||||
editBoard_title: '编辑面板',
|
editBoard_title: '编辑面板',
|
||||||
editDueDate_title: '编辑截止时间',
|
editDueDate_title: '编辑截止时间',
|
||||||
editEmail_title: '编辑邮箱',
|
editEmail_title: '编辑邮箱',
|
||||||
|
editInformation_title: '编辑信息',
|
||||||
editLabel_title: '编辑标签',
|
editLabel_title: '编辑标签',
|
||||||
editPassword_title: '修改密码',
|
editPassword_title: '修改密码',
|
||||||
|
editPermissions_title: '修改权限',
|
||||||
editStopwatch_title: '修改时间',
|
editStopwatch_title: '修改时间',
|
||||||
editUsername_title: '修改用户名',
|
editUsername_title: '修改用户名',
|
||||||
email: '邮箱',
|
email: '邮箱',
|
||||||
|
@ -81,11 +91,14 @@ export default {
|
||||||
enterTaskDescription: '输入任务描述...',
|
enterTaskDescription: '输入任务描述...',
|
||||||
filterByLabels_title: '通过标签筛选',
|
filterByLabels_title: '通过标签筛选',
|
||||||
filterByMembers_title: '通过成员筛选',
|
filterByMembers_title: '通过成员筛选',
|
||||||
fromComputer_title: '从本机',
|
fromComputer_title: '来自计算机',
|
||||||
|
fromTrello: '来自 Trello',
|
||||||
general: '全体',
|
general: '全体',
|
||||||
hours: '小时',
|
hours: '小时',
|
||||||
|
importBoard_title: '导入面板',
|
||||||
invalidCurrentPassword: '当前密码错误',
|
invalidCurrentPassword: '当前密码错误',
|
||||||
labels: '标签',
|
labels: '标签',
|
||||||
|
language: '语言',
|
||||||
leaveBoard_title: '离开面板',
|
leaveBoard_title: '离开面板',
|
||||||
leaveProject_title: '离开项目',
|
leaveProject_title: '离开项目',
|
||||||
list: '列表',
|
list: '列表',
|
||||||
|
@ -115,15 +128,20 @@ export default {
|
||||||
projectNotFound_title: '项目未找到',
|
projectNotFound_title: '项目未找到',
|
||||||
removeManager_title: '删除管理员',
|
removeManager_title: '删除管理员',
|
||||||
removeMember_title: '删除成员',
|
removeMember_title: '删除成员',
|
||||||
|
searchLabels: '搜索标签...',
|
||||||
|
searchMembers: '搜索成员...',
|
||||||
|
searchUsers: '搜索用户...',
|
||||||
seconds: '秒',
|
seconds: '秒',
|
||||||
selectBoard: '选择面板',
|
selectBoard: '选择面板',
|
||||||
selectList: '选择列表',
|
selectList: '选择列表',
|
||||||
|
selectPermissions_title: '选择权限',
|
||||||
selectProject: '选择项目',
|
selectProject: '选择项目',
|
||||||
settings: '设置',
|
settings: '设置',
|
||||||
stopwatch: '计时器',
|
stopwatch: '计时器',
|
||||||
subscribeToMyOwnCardsByDefault: '默认关注自己创建的卡片',
|
subscribeToMyOwnCardsByDefault: '默认关注自己创建的卡片',
|
||||||
taskActions_title: '任务操作',
|
taskActions_title: '任务操作',
|
||||||
tasks: '任务',
|
tasks: '任务',
|
||||||
|
thereIsNoPreviewAvailableForThisAttachment: '此附件无法预览',
|
||||||
time: '时间',
|
time: '时间',
|
||||||
title: '标题',
|
title: '标题',
|
||||||
userActions_title: '用户操作',
|
userActions_title: '用户操作',
|
||||||
|
@ -136,6 +154,8 @@ export default {
|
||||||
username: '用户名',
|
username: '用户名',
|
||||||
usernameAlreadyInUse: '用户名已被占用',
|
usernameAlreadyInUse: '用户名已被占用',
|
||||||
users: '用户',
|
users: '用户',
|
||||||
|
version: '版本',
|
||||||
|
viewer: '视图',
|
||||||
writeComment: '编写评论...',
|
writeComment: '编写评论...',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -147,6 +167,7 @@ export default {
|
||||||
addCard_title: '添加卡片',
|
addCard_title: '添加卡片',
|
||||||
addComment: '添加评论',
|
addComment: '添加评论',
|
||||||
addList: '添加列表',
|
addList: '添加列表',
|
||||||
|
addMember: 'Add member',
|
||||||
addMoreDetailedDescription: '添加更多详细描述',
|
addMoreDetailedDescription: '添加更多详细描述',
|
||||||
addTask: '添加任务',
|
addTask: '添加任务',
|
||||||
addToCard: '添加到卡片',
|
addToCard: '添加到卡片',
|
||||||
|
@ -176,10 +197,14 @@ export default {
|
||||||
editDueDate_title: '编辑到期时间',
|
editDueDate_title: '编辑到期时间',
|
||||||
editDescription_title: '编辑描述',
|
editDescription_title: '编辑描述',
|
||||||
editEmail_title: '编辑邮箱',
|
editEmail_title: '编辑邮箱',
|
||||||
|
editInformation_title: '编辑信息',
|
||||||
editPassword_title: '编辑密码',
|
editPassword_title: '编辑密码',
|
||||||
|
editPermissions: '编辑权限',
|
||||||
editStopwatch_title: '编辑时间',
|
editStopwatch_title: '编辑时间',
|
||||||
editTitle_title: '编辑标题',
|
editTitle_title: '编辑标题',
|
||||||
editUsername_title: '编辑用户名',
|
editUsername_title: '编辑用户名',
|
||||||
|
hideDetails: '隐藏详情',
|
||||||
|
import: '导入',
|
||||||
leaveBoard: '离开面板',
|
leaveBoard: '离开面板',
|
||||||
leaveProject: '离开项目',
|
leaveProject: '离开项目',
|
||||||
logOut_title: '退出',
|
logOut_title: '退出',
|
||||||
|
@ -195,6 +220,7 @@ export default {
|
||||||
removeMember: '删除成员',
|
removeMember: '删除成员',
|
||||||
save: '保存',
|
save: '保存',
|
||||||
showAllAttachments: '显示所有的附件 ({{hidden}} 隐藏)',
|
showAllAttachments: '显示所有的附件 ({{hidden}} 隐藏)',
|
||||||
|
showDetails: '显示详情',
|
||||||
showFewerAttachments: '显示较少的附件',
|
showFewerAttachments: '显示较少的附件',
|
||||||
start: '开始',
|
start: '开始',
|
||||||
stop: '结束',
|
stop: '结束',
|
||||||
|
|
|
@ -2,19 +2,21 @@ export default {
|
||||||
translation: {
|
translation: {
|
||||||
common: {
|
common: {
|
||||||
emailOrUsername: '邮箱或用户名',
|
emailOrUsername: '邮箱或用户名',
|
||||||
invalidEmailOrUsername: '错误的邮箱或用户名',
|
invalidEmailOrUsername: '无效的邮箱或用户名',
|
||||||
invalidPassword: '密码错误',
|
invalidPassword: '密码错误',
|
||||||
logInToPlanka: '登录至 Planka',
|
logInToPlanka: '登录至 Planka',
|
||||||
noInternetConnection: '没有网络连接',
|
noInternetConnection: '没有网络连接',
|
||||||
pageNotFound_title: '页面找不到',
|
pageNotFound_title: '找不到页面',
|
||||||
password: '密码',
|
password: '密码',
|
||||||
projectManagement: '项目管理',
|
projectManagement: '项目管理',
|
||||||
serverConnectionFailed: '服务连接失败',
|
serverConnectionFailed: '服务器连接失败',
|
||||||
unknownError: '未知错误,请稍后重试',
|
unknownError: '未知错误,请稍后重试',
|
||||||
|
useSingleSignOn: '使用单点登录',
|
||||||
},
|
},
|
||||||
|
|
||||||
action: {
|
action: {
|
||||||
logIn: '登录',
|
logIn: '登录',
|
||||||
|
logInWithSSO: '使用SSO登录',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
6
client/src/utils/get-date-format.js
Normal file
6
client/src/utils/get-date-format.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
export default (value, longDateFormat = 'longDateTime', fullDateFormat = 'fullDateTime') => {
|
||||||
|
const year = value.getFullYear();
|
||||||
|
const currentYear = new Date().getFullYear();
|
||||||
|
|
||||||
|
return year === currentYear ? longDateFormat : fullDateFormat;
|
||||||
|
};
|
|
@ -2,7 +2,7 @@ version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
planka:
|
planka:
|
||||||
image: ghcr.io/plankanban/planka:dev
|
image: ghcr.io/plankanban/planka:master
|
||||||
command: >
|
command: >
|
||||||
bash -c
|
bash -c
|
||||||
"for i in `seq 1 30`; do
|
"for i in `seq 1 30`; do
|
||||||
|
|
4
package-lock.json
generated
4
package-lock.json
generated
|
@ -1,12 +1,12 @@
|
||||||
{
|
{
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.15.2",
|
"version": "1.15.3",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.15.2",
|
"version": "1.15.3",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "planka",
|
"name": "planka",
|
||||||
"version": "1.15.2",
|
"version": "1.15.3",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://plankanban.github.io/planka",
|
"homepage": "https://plankanban.github.io/planka",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
1
temp
Normal file
1
temp
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Just a file to trigger the build workflow.
|
Loading…
Add table
Add a link
Reference in a new issue