1
Fork 0

Further work on people section + refactor translations

This commit is contained in:
viktorstrate 2021-10-21 13:04:47 +02:00
parent 06fd166483
commit e27f653c2e
No known key found for this signature in database
GPG Key ID: 3F855605109C1E8A
30 changed files with 549 additions and 121 deletions

View File

@ -1,7 +1,20 @@
module.exports = {
skipDefaultValues: locale => locale != 'en',
sort: true,
locales: ['da', 'de', 'en', 'es', 'fr', 'it', 'pl', 'ru', 'sv'],
locales: [
'da',
'de',
'en',
'es',
'fr',
'it',
'pl',
'pt',
'ru',
'sv',
'zh-CN',
'zh-HK',
],
input: 'src/**/*.{js,ts,jsx,tsx}',
output: 'src/extractedTranslations/$LOCALE/$NAMESPACE.json',
}

14
ui/package-lock.json generated
View File

@ -12,7 +12,7 @@
"@apollo/client": "^3.3.21",
"@babel/preset-typescript": "^7.14.5",
"@craco/craco": "^6.2.0",
"@headlessui/react": "^1.3.0",
"@headlessui/react": "^1.4.1",
"@react-aria/focus": "^3.4.0",
"@rollup/plugin-babel": "^5.3.0",
"@types/geojson": "^7946.0.8",
@ -2103,9 +2103,9 @@
}
},
"node_modules/@headlessui/react": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.3.0.tgz",
"integrity": "sha512-2gqTO6BQ3Jr8vDX1B67n1gl6MGKTt6DBmR+H0qxwj0gTMnR2+Qpktj8alRWxsZBODyOiBb77QSQpE/6gG3MX4Q==",
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.4.1.tgz",
"integrity": "sha512-gL6Ns5xQM57cZBzX6IVv6L7nsam8rDEpRhs5fg28SN64ikfmuuMgunc+Rw5C1cMScnvFM+cz32ueVrlSFEVlSg==",
"engines": {
"node": ">=10"
},
@ -28802,9 +28802,9 @@
}
},
"@headlessui/react": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.3.0.tgz",
"integrity": "sha512-2gqTO6BQ3Jr8vDX1B67n1gl6MGKTt6DBmR+H0qxwj0gTMnR2+Qpktj8alRWxsZBODyOiBb77QSQpE/6gG3MX4Q==",
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.4.1.tgz",
"integrity": "sha512-gL6Ns5xQM57cZBzX6IVv6L7nsam8rDEpRhs5fg28SN64ikfmuuMgunc+Rw5C1cMScnvFM+cz32ueVrlSFEVlSg==",
"requires": {}
},
"@humanwhocodes/config-array": {

View File

@ -12,7 +12,7 @@
"@apollo/client": "^3.3.21",
"@babel/preset-typescript": "^7.14.5",
"@craco/craco": "^6.2.0",
"@headlessui/react": "^1.3.0",
"@headlessui/react": "^1.4.1",
"@react-aria/focus": "^3.4.0",
"@rollup/plugin-babel": "^5.3.0",
"@types/geojson": "^7946.0.8",

View File

@ -133,16 +133,24 @@ const FaceGroupTitle = ({ faceGroup }: FaceGroupTitleProps) => {
<div className="mb-2">{title}</div>
<ul className="flex gap-2 flex-wrap mb-6">
<li>
<Button onClick={() => setEditLabel(true)}>{t('people_page.action_label.change_label', 'Change label')}</Button>
<Button onClick={() => setEditLabel(true)}>
{t('people_page.action_label.change_label', 'Change label')}
</Button>
</li>
<li>
<Button onClick={() => setMergeModalOpen(true)}>{t('people_page.action_label.merge_face', 'Merge face')}</Button>
<Button onClick={() => setMergeModalOpen(true)}>
{t('people_page.action_label.merge_people', 'Merge people')}
</Button>
</li>
<li>
<Button onClick={() => setDetachModalOpen(true)}>{t('people_page.action_label.detach_face', 'Detach face')}</Button>
<Button onClick={() => setDetachModalOpen(true)}>
{t('people_page.action_label.detach_images', 'Detach images')}
</Button>
</li>
<li>
<Button onClick={() => setMoveModalOpen(true)}>{t('people_page.action_label.move_faces', 'Moves faces')}</Button>
<Button onClick={() => setMoveModalOpen(true)}>
{t('people_page.action_label.move_faces', 'Move faces')}
</Button>
</li>
</ul>
</div>

View File

@ -2,12 +2,76 @@ import React from 'react'
import { useTranslation } from 'react-i18next'
import { Link } from 'react-router-dom'
import FaceCircleImage from '../../../Pages/PeoplePage/FaceCircleImage'
import { Button } from '../../../primitives/form/Input'
import { SidebarSection, SidebarSectionTitle } from '../SidebarComponents'
import { MediaSidebarMedia } from './MediaSidebar'
import { sidebarMediaQuery_media_faces } from './__generated__/sidebarMediaQuery'
import { ReactComponent as PeopleDotsIcon } from './icons/peopleDotsIcon.svg'
import { Menu } from '@headlessui/react'
import { Button } from '../../../primitives/form/Input'
import { ArrowPopoverPanel } from '../Sharing'
import { tailwindClassNames } from '../../../helpers/utils'
type PersonMoreMenuItemProps = {
label: string
className?: string
}
const PersonMoreMenuItem = ({ label, className }: PersonMoreMenuItemProps) => {
return (
<Menu.Item>
{({ active }) => (
<a
className={tailwindClassNames(
`block py-1 cursor-pointer ${active && 'bg-gray-50 text-black'}`,
className
)}
>
{label}
</a>
)}
</Menu.Item>
)
}
type PersonMoreMenuProps = {
face: sidebarMediaQuery_media_faces
}
const PersonMoreMenu = ({ face }: PersonMoreMenuProps) => {
const { t } = useTranslation()
face
return (
<Menu as="div" className="relative inline-block">
<Menu.Button as={Button} className="px-1.5 py-1.5 align-middle ml-1">
<PeopleDotsIcon className="text-gray-500" />
</Menu.Button>
<Menu.Items className="">
<ArrowPopoverPanel width={120}>
<PersonMoreMenuItem
className="border-b"
label={t('people_page.action_label.change_label', 'Change label')}
/>
<PersonMoreMenuItem
className="border-b"
label={t('sidebar.people.action_label.merge_face', 'Merge face')}
/>
<PersonMoreMenuItem
className="border-b"
label={t(
'sidebar.people.action_label.detach_image',
'Detach image'
)}
/>
<PersonMoreMenuItem
label={t('sidebar.people.action_label.move_face', 'Move face')}
/>
</ArrowPopoverPanel>
</Menu.Items>
</Menu>
)
}
type MediaSidebarFaceProps = {
face: sidebarMediaQuery_media_faces
@ -19,18 +83,16 @@ const MediaSidebarPerson = ({ face }: MediaSidebarFaceProps) => {
return (
<li className="inline-block">
<Link to={`/people/${face.faceGroup.id}`}>
<FaceCircleImage imageFace={face} selectable={true} size="100px" />
<FaceCircleImage imageFace={face} selectable={true} size="92px" />
</Link>
<div
className={`text-center ${
className={`text-center text-sm mt-1 ${
face.faceGroup.label ? 'text-black' : 'text-gray-600'
}`}
>
{face.faceGroup.label ??
t('people_page.face_group.unlabeled', 'Unlabeled')}
<Button className="px-2 py-1.5 align-middle ml-1">
<PeopleDotsIcon className="text-gray-500" />
</Button>
<PersonMoreMenu face={face} />
</div>
</li>
)
@ -54,8 +116,12 @@ const MediaSidebarPeople = ({ media }: MediaSidebarFacesProps) => {
<SidebarSectionTitle>
{t('sidebar.people.title', 'People')}
</SidebarSectionTitle>
<div className="overflow-x-auto">
<div
className="overflow-x-auto mb-[-200px]"
style={{ scrollbarWidth: 'none' }}
>
<ul className="flex gap-4 mx-4">{faceElms}</ul>
<div className="h-[200px]"></div>
</div>
</SidebarSection>
)

View File

@ -106,10 +106,12 @@ const DELETE_SHARE_MUTATION = gql`
}
`
const ArrowPopoverPanel = styled.div.attrs({
export const ArrowPopoverPanel = styled.div.attrs({
className:
'absolute right-6 -top-3 bg-white rounded shadow-md border border-gray-200 w-[260px]',
})`
'absolute right-6 -top-3 bg-white rounded shadow-md border border-gray-200',
})<{ width: number }>`
width: ${({ width }) => width}px;
&::after {
content: '';
position: absolute;
@ -247,7 +249,7 @@ const MorePopover = ({ id, share, query }: MorePopoverProps) => {
</Popover.Button>
<Popover.Panel>
<ArrowPopoverPanel>
<ArrowPopoverPanel width={260}>
<MorePopoverSectionPassword id={id} share={share} query={query} />
<div className="px-4 py-2 border-t border-gray-200 mt-2 mb-2">
<Checkbox label="Expiration date" />

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "Ændre navn",
"detach_face": "Løsriv billeder",
"merge_face": "Sammenflet personer",
"detach_images": "Løsriv billeder",
"merge_people": "Sammenflet personer",
"move_faces": "Flyt ansigter"
},
"face_group": {
@ -263,7 +263,7 @@
"title": "Lokation"
},
"media": {
"album": "Album",
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Actionprogram",
@ -305,6 +305,11 @@
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": "Personer"
},
"sharing": {

View File

@ -42,6 +42,15 @@
"merge_face": null,
"detach_face": null,
"move_faces": null
},
"modal": {
"merge_people_groups": {
"description": "Alle billeder fra denne gruppe vil blive flettet sammen med den valgte gruppe",
"destination_table": {
"title": "Vælg destinationsgruppe"
},
"title": "Vælg gruppe at flette med"
}
}
},
"settings": {
@ -71,6 +80,9 @@
"mega_byte_plural": null,
"tera_byte_plural": null
}
},
"media": {
"album": "Album"
}
},
"timeline_filter": {

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "",
"detach_face": "",
"merge_face": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
@ -263,7 +263,7 @@
"title": ""
},
"media": {
"album": "",
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Action (kurze Verschlusszeit)",
@ -305,6 +305,11 @@
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {

View File

@ -61,6 +61,13 @@
"title": null
},
"title": null
},
"merge_people_groups": {
"description": "",
"destination_table": {
"title": ""
},
"title": ""
}
},
"table": {
@ -115,6 +122,9 @@
"mega_byte_plural": null,
"tera_byte_plural": null
}
},
"media": {
"album": ""
}
},
"album_filter": {

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "Change label",
"detach_face": "Detach face",
"merge_face": "Merge face",
"detach_images": "Detach face",
"merge_people": "Merge face",
"move_faces": "Move faces"
},
"face_group": {
@ -263,7 +263,7 @@
"title": "Location"
},
"media": {
"album": "Album",
"album_path": "Album path",
"exif": {
"exposure_program": {
"action_program": "Action program",
@ -305,6 +305,11 @@
}
},
"people": {
"action_label": {
"detach_image": "Detach image",
"merge_face": "Merge face",
"move_face": "Move face"
},
"title": "People"
},
"sharing": {

View File

@ -36,6 +36,15 @@
"select_image_faces": {
"search_images_placeholder": "Search images..."
}
},
"modal": {
"merge_people_groups": {
"description": "All images within this face group will be merged into the selected face group.",
"destination_table": {
"title": "Select the destination face"
},
"title": "Merge Face Groups"
}
}
},
"settings": {
@ -54,6 +63,9 @@
},
"sharing": {
"table_header": "Public shares"
},
"media": {
"album": "Album"
}
}
}

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "",
"detach_face": "",
"merge_face": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
@ -263,7 +263,7 @@
"title": ""
},
"media": {
"album": "",
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Programa de acción",
@ -305,6 +305,11 @@
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {

View File

@ -61,6 +61,13 @@
"title": null
},
"title": null
},
"merge_people_groups": {
"description": "",
"destination_table": {
"title": ""
},
"title": ""
}
},
"table": {
@ -120,6 +127,9 @@
"mega_byte_plural": null,
"tera_byte_plural": null
}
},
"media": {
"album": ""
}
},
"title": {

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "Changer le label",
"detach_face": "Détacher le visage",
"merge_face": "Fusionner le visage",
"detach_images": "Détacher le visage",
"merge_people": "Fusionner le visage",
"move_faces": "Déplacer les visages"
},
"face_group": {
@ -263,7 +263,7 @@
"title": ""
},
"media": {
"album": "",
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Programme d'action",
@ -305,6 +305,11 @@
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {

View File

@ -60,6 +60,13 @@
"title": null
},
"title": null
},
"merge_people_groups": {
"description": "Toutes les images de ce groupe de visages seront fusionnées dans le groupe de visages sélectionné.",
"destination_table": {
"title": "Sélectionner le visage de destination"
},
"title": "Fusionner des groupes de visages"
}
},
"table": {
@ -95,6 +102,9 @@
},
"sharing": {
"table_header": "Partages publics"
},
"media": {
"album": ""
}
},
"title": {

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "",
"detach_face": "",
"merge_face": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
@ -263,7 +263,7 @@
"title": ""
},
"media": {
"album": "",
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Programma sport",
@ -305,6 +305,11 @@
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {

View File

@ -49,6 +49,15 @@
},
"tableselect_image_faces": {
"search_images_placeholder": null
},
"modal": {
"merge_people_groups": {
"description": "Tutte le immagini di questo volto saranno unite alle immagini del volto selezionato",
"destination_table": {
"title": "Seleziona il volto di destinazione"
},
"title": "Unisci immagini volto"
}
}
},
"settings": {
@ -82,6 +91,9 @@
"mega_byte_plural": null,
"tera_byte_plural": null
}
},
"media": {
"album": ""
}
},
"album_filter": {

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "",
"detach_face": "",
"merge_face": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
@ -268,7 +268,7 @@
"title": ""
},
"media": {
"album": "",
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Program działania",
@ -310,6 +310,11 @@
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {

View File

@ -61,6 +61,13 @@
"title": null
},
"title": null
},
"merge_people_groups": {
"description": "",
"destination_table": {
"title": ""
},
"title": ""
}
},
"table": {
@ -137,6 +144,9 @@
"table_header": "Publiczne udostępnienia",
"delete": null,
"more": null
},
"media": {
"album": ""
}
},
"title": {

View File

@ -61,17 +61,17 @@
"description": "Galeria de fotos simples e fácil de usar para servidores pessoais"
},
"people_page": {
"action_label": {
"change_label": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
"label_placeholder": "Etiqueta",
"unlabeled": "Sem etiqueta",
"unlabeled_person": "Pessoa sem etiqueta"
},
"action_label": {
"change_label": null,
"merge_face": null,
"detach_face": null,
"move_faces": null
},
"modal": {
"action": {
"merge": "Juntar"
@ -215,6 +215,27 @@
},
"sidebar": {
"album": {
"album_cover": "",
"download": {
"high-resolutions": {
"description": "",
"title": ""
},
"originals": {
"description": "",
"title": ""
},
"thumbnails": {
"description": "",
"title": ""
},
"web-videos": {
"description": "",
"title": ""
}
},
"reset_cover": "",
"set_cover": "",
"title_placeholder": "Título do Álbum"
},
"download": {
@ -238,7 +259,11 @@
},
"title": "Descarregar"
},
"location": {
"title": ""
},
"media": {
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Programa de ação",
@ -267,6 +292,7 @@
"name": {
"aperture": "Abertura",
"camera": "Câmera",
"coordinates": "",
"date_shot": "Data da foto",
"exposure": "Exposição",
"exposure_program": "Programa",
@ -278,6 +304,14 @@
}
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {
"add_share": "Adicionar partilha",
"copy_link": "Copiar link",
@ -295,6 +329,13 @@
"places": "Locais",
"settings": "Configurações"
},
"timeline_filter": {
"date": {
"dropdown_all": "",
"dropdown_year": "",
"label": ""
}
},
"title": {
"loading_album": "Carregar Álbum",
"login": "Login",

View File

@ -0,0 +1,19 @@
{
"people_page": {
"action_label": {
"change_label": null,
"merge_people": null,
"detach_images": null,
"move_faces": null
},
"modal": {
"merge_people_groups": {
"description": "Todas as imagens neste grupo de caras serão juntas no grupo selecionado.",
"destination_table": {
"title": "Selecione a cara de destino"
},
"title": "Juntar grupos de cara"
}
}
}
}

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "",
"detach_face": "",
"merge_face": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
@ -268,7 +268,7 @@
"title": ""
},
"media": {
"album": "",
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Действие программа",
@ -310,6 +310,11 @@
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {

View File

@ -49,6 +49,15 @@
},
"tableselect_image_faces": {
"search_images_placeholder": null
},
"modal": {
"merge_people_groups": {
"description": "Все фотографии в этой группе лиц будут обьеденены с выбранной группой.",
"destination_table": {
"title": "Выберете конечное лицо"
},
"title": "Обьединить группы лиц"
}
}
},
"settings": {
@ -99,6 +108,9 @@
"table_header": "Общий доступ",
"delete": null,
"more": null
},
"media": {
"album": ""
}
},
"album_filter": {

View File

@ -63,8 +63,8 @@
"people_page": {
"action_label": {
"change_label": "",
"detach_face": "",
"merge_face": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
@ -263,7 +263,7 @@
"title": ""
},
"media": {
"album": "",
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "Actionprogram",
@ -305,6 +305,11 @@
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {

View File

@ -61,6 +61,13 @@
"title": null
},
"title": null
},
"merge_people_groups": {
"description": "",
"destination_table": {
"title": ""
},
"title": ""
}
},
"table": {
@ -123,6 +130,9 @@
"mega_byte_plural": null,
"tera_byte_plural": null
}
},
"media": {
"album": ""
}
},
"title": {

View File

@ -61,17 +61,17 @@
"description": "简单及易用的照片库给个人服务器"
},
"people_page": {
"action_label": {
"change_label": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
"label_placeholder": "名称",
"unlabeled": "未命名",
"unlabeled_person": "未命名人物"
},
"action_label": {
"change_label": null,
"merge_face": null,
"detach_face": null,
"move_faces": null
},
"modal": {
"action": {
"merge": "合并"
@ -215,30 +215,36 @@
},
"sidebar": {
"album": {
"album_cover": "",
"download": {
"high-resolutions": {
"description": "",
"title": ""
},
"originals": {
"description": "",
"title": ""
},
"thumbnails": {
"description": "",
"title": ""
},
"web-videos": {
"description": "",
"title": ""
}
},
"reset_cover": "",
"set_cover": "",
"title_placeholder": "相册名称"
},
"download": {
"filesize": {
"byte": null,
"giga_byte": null,
"kilo_byte": null,
"mega_byte": null,
"tera_byte": null,
"byte_0": null,
"byte_1": null,
"byte_2": null,
"giga_byte_0": null,
"giga_byte_1": null,
"giga_byte_2": null,
"kilo_byte_0": null,
"kilo_byte_1": null,
"kilo_byte_2": null,
"mega_byte_0": null,
"mega_byte_1": null,
"mega_byte_2": null,
"tera_byte_0": null,
"tera_byte_1": null,
"tera_byte_2": null
"byte": "",
"giga_byte": "",
"kilo_byte": "",
"mega_byte": "",
"tera_byte": ""
},
"table_columns": {
"dimensions": "尺寸",
@ -248,7 +254,11 @@
},
"title": "下载"
},
"location": {
"title": ""
},
"media": {
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "动态模式",
@ -264,19 +274,20 @@
},
"flash": {
"auto": "自动",
"did_not_fire": null,
"fired": null,
"no_flash": null,
"no_flash_function": null,
"did_not_fire": "",
"fired": "",
"no_flash": "",
"no_flash_function": "",
"off": "关闭",
"on": "使用",
"red_eye_reduction": "减轻红眼",
"return_detected": null,
"return_not_detected": null
"return_detected": "",
"return_not_detected": ""
},
"name": {
"aperture": "光圈",
"camera": "相机",
"coordinates": "",
"date_shot": "拍摄日期",
"exposure": "曝光",
"exposure_program": "模式",
@ -288,6 +299,14 @@
}
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {
"add_share": "新增分享",
"copy_link": "复制链接",
@ -305,6 +324,13 @@
"places": "地点",
"settings": "设置"
},
"timeline_filter": {
"date": {
"dropdown_all": "",
"dropdown_year": "",
"label": ""
}
},
"title": {
"loading_album": "载入相册",
"login": "登入",

View File

@ -0,0 +1,42 @@
{
"people_page": {
"action_label": {
"change_label": null,
"merge_people": null,
"detach_images": null,
"move_faces": null
},
"modal": {
"merge_people_groups": {
"description": "所有在此的脸孔群组将会合并到已选择的脸孔群组",
"destination_table": {
"title": "选择目标脸孔群组"
},
"title": "合并脸孔群组"
}
}
},
"sidebar": {
"download": {
"filesize": {
"byte": null,
"giga_byte": null,
"kilo_byte": null,
"mega_byte": null,
"tera_byte": null
}
},
"media": {
"exif": {
"flash": {
"did_not_fire": null,
"fired": null,
"no_flash": null,
"no_flash_function": null,
"return_detected": null,
"return_not_detected": null
}
}
}
}
}

View File

@ -61,17 +61,17 @@
"description": "簡單及易用的照片庫給個人伺服器"
},
"people_page": {
"action_label": {
"change_label": "",
"detach_images": "",
"merge_people": "",
"move_faces": ""
},
"face_group": {
"label_placeholder": "名稱",
"unlabeled": "未命名",
"unlabeled_person": "未命名人物"
},
"action_label": {
"change_label": null,
"merge_face": null,
"detach_face": null,
"move_faces": null
},
"modal": {
"action": {
"merge": "合併"
@ -215,30 +215,36 @@
},
"sidebar": {
"album": {
"album_cover": "",
"download": {
"high-resolutions": {
"description": "",
"title": ""
},
"originals": {
"description": "",
"title": ""
},
"thumbnails": {
"description": "",
"title": ""
},
"web-videos": {
"description": "",
"title": ""
}
},
"reset_cover": "",
"set_cover": "",
"title_placeholder": "相簿名稱"
},
"download": {
"filesize": {
"byte": null,
"giga_byte": null,
"kilo_byte": null,
"mega_byte": null,
"tera_byte": null,
"byte_0": null,
"byte_1": null,
"byte_2": null,
"giga_byte_0": null,
"giga_byte_1": null,
"giga_byte_2": null,
"kilo_byte_0": null,
"kilo_byte_1": null,
"kilo_byte_2": null,
"mega_byte_0": null,
"mega_byte_1": null,
"mega_byte_2": null,
"tera_byte_0": null,
"tera_byte_1": null,
"tera_byte_2": null
"byte": "",
"giga_byte": "",
"kilo_byte": "",
"mega_byte": "",
"tera_byte": ""
},
"table_columns": {
"dimensions": "尺寸",
@ -248,7 +254,11 @@
},
"title": "下載"
},
"location": {
"title": ""
},
"media": {
"album_path": "",
"exif": {
"exposure_program": {
"action_program": "動態模式",
@ -264,19 +274,20 @@
},
"flash": {
"auto": "自動",
"did_not_fire": null,
"fired": null,
"no_flash": null,
"no_flash_function": null,
"did_not_fire": "",
"fired": "",
"no_flash": "",
"no_flash_function": "",
"off": "關閉",
"on": "使用",
"red_eye_reduction": "減輕紅眼",
"return_detected": null,
"return_not_detected": null
"return_detected": "",
"return_not_detected": ""
},
"name": {
"aperture": "光圈",
"camera": "相機",
"coordinates": "",
"date_shot": "拍攝日期",
"exposure": "曝光",
"exposure_program": "模式",
@ -288,6 +299,14 @@
}
}
},
"people": {
"action_label": {
"detach_image": "",
"merge_face": "",
"move_face": ""
},
"title": ""
},
"sharing": {
"add_share": "新增分享",
"copy_link": "複製連結",
@ -305,6 +324,13 @@
"places": "地點",
"settings": "設定"
},
"timeline_filter": {
"date": {
"dropdown_all": "",
"dropdown_year": "",
"label": ""
}
},
"title": {
"loading_album": "載入相簿",
"login": "登入",

View File

@ -0,0 +1,42 @@
{
"people_page": {
"action_label": {
"change_label": null,
"merge_people": null,
"detach_images": null,
"move_faces": null
},
"modal": {
"merge_people_groups": {
"description": "所有在此的臉孔群組將會合併到已選擇的臉孔群組",
"destination_table": {
"title": "選擇目標臉孔群組"
},
"title": "合併臉孔群組"
}
}
},
"sidebar": {
"download": {
"filesize": {
"byte": null,
"giga_byte": null,
"kilo_byte": null,
"mega_byte": null,
"tera_byte": null
}
},
"media": {
"exif": {
"flash": {
"did_not_fire": null,
"fired": null,
"no_flash": null,
"no_flash_function": null,
"return_detected": null,
"return_not_detected": null
}
}
}
}
}