├── .gitignore ├── .travis.yml ├── .tx └── config ├── CHANGELOG.md ├── EXIF-XMP-IPTC.md ├── LICENSE ├── README.md ├── appinfo ├── info.xml └── routes.php ├── composer.json ├── css └── tabview.css ├── js └── tabview.js ├── l10n ├── af.js ├── af.json ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── az.js ├── az.json ├── bg.js ├── bg.json ├── bn_BD.js ├── bn_BD.json ├── br.js ├── br.json ├── bs.js ├── bs.json ├── ca.js ├── ca.json ├── cs.js ├── cs.json ├── cy_GB.js ├── cy_GB.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── eo.js ├── eo.json ├── es.js ├── es.json ├── es_419.js ├── es_419.json ├── es_AR.js ├── es_AR.json ├── es_CL.js ├── es_CL.json ├── es_CO.js ├── es_CO.json ├── es_CR.js ├── es_CR.json ├── es_DO.js ├── es_DO.json ├── es_EC.js ├── es_EC.json ├── es_GT.js ├── es_GT.json ├── es_HN.js ├── es_HN.json ├── es_MX.js ├── es_MX.json ├── es_NI.js ├── es_NI.json ├── es_PA.js ├── es_PA.json ├── es_PE.js ├── es_PE.json ├── es_PR.js ├── es_PR.json ├── es_PY.js ├── es_PY.json ├── es_SV.js ├── es_SV.json ├── es_UY.js ├── es_UY.json ├── et_EE.js ├── et_EE.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi.js ├── fi.json ├── fr.js ├── fr.json ├── ga.js ├── ga.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hr.js ├── hr.json ├── hu.js ├── hu.json ├── hy.js ├── hy.json ├── ia.js ├── ia.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ka.js ├── ka.json ├── ka_GE.js ├── ka_GE.json ├── kab.js ├── kab.json ├── km.js ├── km.json ├── ko.js ├── ko.json ├── lb.js ├── lb.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── mn.js ├── mn.json ├── ms_MY.js ├── ms_MY.json ├── nb.js ├── nb.json ├── nl.js ├── nl.json ├── nn_NO.js ├── nn_NO.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── sc.js ├── sc.json ├── si.js ├── si.json ├── sk.js ├── sk.json ├── sl.js ├── sl.json ├── sq.js ├── sq.json ├── sr.js ├── sr.json ├── sr@latin.js ├── sr@latin.json ├── sv.js ├── sv.json ├── ta.js ├── ta.json ├── th.js ├── th.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── uz.js ├── uz.json ├── vi.js ├── vi.json ├── zh_CN.js ├── zh_CN.json ├── zh_HK.js ├── zh_HK.json ├── zh_TW.js └── zh_TW.json ├── lib ├── AppInfo │ └── Application.php ├── Controller │ └── MetadataController.php ├── Fpdi │ ├── FpdiException.php │ └── PdfParser │ │ ├── CrossReference │ │ ├── AbstractReader.php │ │ ├── CompressedReader.php │ │ ├── CrossReference.php │ │ ├── CrossReferenceException.php │ │ ├── FixedReader.php │ │ ├── LineReader.php │ │ └── ReaderInterface.php │ │ ├── Filter │ │ ├── Ascii85.php │ │ ├── Ascii85Exception.php │ │ ├── AsciiHex.php │ │ ├── FilterException.php │ │ ├── FilterInterface.php │ │ ├── Flate.php │ │ ├── FlateException.php │ │ ├── Lzw.php │ │ ├── LzwException.php │ │ └── Predictor.php │ │ ├── PdfParser.php │ │ ├── PdfParserException.php │ │ ├── StreamReader.php │ │ ├── Tokenizer.php │ │ └── Type │ │ ├── PdfArray.php │ │ ├── PdfBoolean.php │ │ ├── PdfDictionary.php │ │ ├── PdfHexString.php │ │ ├── PdfIndirectObject.php │ │ ├── PdfIndirectObjectReference.php │ │ ├── PdfName.php │ │ ├── PdfNull.php │ │ ├── PdfNumeric.php │ │ ├── PdfStream.php │ │ ├── PdfString.php │ │ ├── PdfToken.php │ │ ├── PdfType.php │ │ └── PdfTypeException.php ├── GetID3 │ ├── Audio │ │ ├── getid3_ac3.php │ │ ├── getid3_dts.php │ │ ├── getid3_flac.php │ │ ├── getid3_mp3.php │ │ └── getid3_ogg.php │ ├── AudioVideo │ │ ├── getid3_flv.php │ │ ├── getid3_matroska.php │ │ ├── getid3_mpeg.php │ │ ├── getid3_quicktime.php │ │ └── getid3_riff.php │ ├── Tags │ │ ├── getid3_apetag.php │ │ ├── getid3_id3v1.php │ │ ├── getid3_id3v2.php │ │ ├── getid3_lyrics3.php │ │ └── getid3_tag_nikon_nctg.php │ ├── getID3.php │ ├── getid3_exception.php │ ├── getid3_handler.php │ └── getid3_lib.php ├── Listener │ └── LoadSidebarListener.php └── Service │ ├── AcdsCategories.php │ ├── BmffParser.php │ ├── FileReader.php │ ├── HeicMetadata.php │ ├── IptcMetadata.php │ ├── JpegMetadata.php │ ├── Metadata.php │ ├── MetadataService.php │ ├── PdfMetadata.php │ ├── TiffMetadata.php │ ├── TiffParser.php │ └── XmpMetadata.php ├── screenshots └── jpg-metadata.png └── tests ├── Controller └── MetadataControllerTest.php ├── files ├── IMG_20170626_181110.heic ├── IMG_20170626_181110.jpg ├── IMG_20170626_181110_XMP.jpg ├── IMG_20170626_181110_XMP.tif ├── acdsee.jpg ├── canon.jpg ├── iptc.jpg ├── sample.flac ├── sample.ogg ├── sample.wav ├── sample.zip ├── sample_id3v1_id3v23.mp3 ├── sampleunsecuredpdf.pdf └── viagem.jpg ├── phpunit.xml └── travis_nextcloud_install.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | *.iml 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | os: linux 3 | dist: jammy 4 | php: 5 | - 8.1 6 | - 8.2 7 | - 8.3 8 | - 8.4 9 | 10 | services: 11 | - postgresql 12 | 13 | cache: 14 | directories: 15 | - $HOME/.composer/cache 16 | 17 | env: 18 | global: 19 | - APP_NAME=metadata 20 | jobs: 21 | - CLOUD=nextcloud CORE_BRANCH=stable29 22 | - CLOUD=nextcloud CORE_BRANCH=stable30 23 | - CLOUD=nextcloud CORE_BRANCH=stable31 24 | - CLOUD=nextcloud CORE_BRANCH=master 25 | 26 | jobs: 27 | exclude: 28 | - php: 8.4 29 | env: CLOUD=nextcloud CORE_BRANCH=stable29 30 | - php: 8.4 31 | env: CLOUD=nextcloud CORE_BRANCH=stable30 32 | allow_failures: 33 | - php: 8.4 34 | - env: CLOUD=nextcloud CORE_BRANCH=master 35 | 36 | before_install: 37 | - if [ $CLOUD = 'nextcloud' ]; then wget -O before_install.sh https://raw.githubusercontent.com/gino0631/nextcloud-metadata/master/tests/travis_nextcloud_install.sh; fi 38 | - . ./before_install.sh $APP_NAME $CORE_BRANCH pgsql 39 | 40 | before_script: 41 | - cd apps/$APP_NAME/ 42 | - composer install --prefer-dist --no-interaction 43 | 44 | script: 45 | # Run phpunit tests 46 | - ./vendor/bin/phpunit --version 47 | - ./vendor/bin/phpunit --configuration tests/phpunit.xml 48 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb 4 | 5 | [o:nextcloud:p:nextcloud:r:metadata] 6 | file_filter = translationfiles//metadata.po 7 | source_file = translationfiles/templates/metadata.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /EXIF-XMP-IPTC.md: -------------------------------------------------------------------------------- 1 | | Metadata UI | EXIF | XMP | IPTC | 2 | | ------------------- | ----------------- | ------------------------------------ | ----- | 3 | | Title | | dc:title | 2#005 | 4 | | Keywords | | dc:subject | 2#025 | 5 | | Instructions | | photoshop:Instructions | 2#040 | 6 | | Date created | DateTimeOriginal | photoshop:DateCreated | 2#055 | 7 | | Author | Artist | dc:creator | 2#080 | 8 | | Job title | | photoshop:AuthorsPosition | 2#085 | 9 | | Location | | photoshop:City | 2#090 | 10 | | Location | | photoshop:State | 2#095 | 11 | | Location | | photoshop:Country | 2#101 | 12 | | Headline | | photoshop:Headline | 2#105 | 13 | | Credits | | photoshop:Credit | 2#110 | 14 | | Source | | photoshop:Source | 2#115 | 15 | | Copyright | Copyright | dc:rights | 2#116 | 16 | | Description | | dc:description, acdsee:caption | 2#120 | 17 | | Description writer | | photoshop:CaptionWriter | 2#122 | 18 | | Tags | | digiKam:TagsList, acdsee:categories | | 19 | 20 | [IPTC Core schema 1.2 specifications](https://iptc.org/std/photometadata/specification/IPTC-PhotoMetadata#iptc-core-schema-1-2-specifications) 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Metadata 2 | [![Build Status](https://api.travis-ci.com/gino0631/nextcloud-metadata.svg?branch=master)](https://app.travis-ci.com/gino0631/nextcloud-metadata) 3 | [![Last Commit](https://img.shields.io/github/last-commit/gino0631/nextcloud-metadata)](https://github.com/gino0631/nextcloud-metadata/commits/master) 4 | [![Repo Size](https://img.shields.io/github/repo-size/gino0631/nextcloud-metadata)](https://github.com/gino0631/nextcloud-metadata) 5 | [![Buy Me a Coffee](https://shields.io/badge/buy_me-a_coffee-ffdd00?logo=buymeacoffee)](https://www.buymeacoffee.com/gino0631) 6 | 7 | A [Nextcloud](https://nextcloud.com/) plugin which displays file metadata in the file details sidebar. Currently, the supported file types include: 8 | - application/pdf (Document information dictionary) 9 | - application/zip (Comment, number of files) 10 | - audio/flac (VorbisComment) 11 | - audio/mp4 (QuickTime) 12 | - audio/mpeg (ID3v1 and ID3v2) 13 | - audio/ogg (VorbisComment) 14 | - audio/wav (RIFF) 15 | - image/heic (EXIF) 16 | - image/jpeg (EXIF, IPTC, XMP-dc, XMP-photoshop, XMP-mwg-rs, XMP-digiKam TagsList) 17 | - image/tiff (EXIF, IPTC, XMP-dc, XMP-photoshop, XMP-mwg-rs, XMP-digiKam TagsList) 18 | - image/x-dcraw (EXIF, XMP sidecar files) 19 | - video/mp4 (QuickTime) 20 | - video/quicktime (QuickTime) 21 | - video/webm (Matroska) 22 | - video/x-matroska (Matroska) 23 | 24 | Support for other formats may be implemented in future releases (feel free to make feature requests). 25 | 26 |
27 | 28 | ## Localization 29 | The plugin makes use of [Transifex](https://www.transifex.com/), so you can contribute [here](https://www.transifex.com/nextcloud/nextcloud/metadata/). 30 | 31 | ## Requirements 32 | * PHP 8.0 or later (tested successfully with 8.1, 8.2, and 8.3; other versions may or may not work) 33 | * EXIF support for PHP (if `php --ri exif` returns `Extension 'exif' not present`, you might need to install an appropriate package for your system, e.g. by running `pkg install php81-exif` on FreeBSD/NAS4Free) 34 | -------------------------------------------------------------------------------- /appinfo/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | metadata 5 | Metadata 6 | A plugin for displaying file metadata 7 | 10 | 11 | 0.23.0 12 | agpl 13 | gino0631 14 | files 15 | tools 16 | https://github.com/gino0631/nextcloud-metadata 17 | https://github.com/gino0631/nextcloud-metadata/issues 18 | https://raw.githubusercontent.com/gino0631/nextcloud-metadata/master/screenshots/jpg-metadata.png 19 | 20 | 21 | exif 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /appinfo/routes.php: -------------------------------------------------------------------------------- 1 | [ 4 | ['name' => 'metadata#get', 'url' => '/get', 'verb' => 'GET'] 5 | ]]; 6 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gino0631/nextcloud-metadata", 3 | "require-dev": { 4 | "phpunit/phpunit": "^9.5" 5 | }, 6 | "require": {} 7 | } 8 | -------------------------------------------------------------------------------- /css/tabview.css: -------------------------------------------------------------------------------- 1 | .metadata-tab-view table { 2 | margin-left: .5em; 3 | } 4 | 5 | .metadata-tab-view tr:hover { 6 | background-color: transparent; 7 | } 8 | 9 | .metadata-tab-view td { 10 | border: none; 11 | padding: 0; 12 | } 13 | 14 | .metadata-tab-view .key { 15 | color: #999; 16 | padding-right: .5em; 17 | vertical-align: top; 18 | } 19 | 20 | .metadata-tab-view .value { 21 | width: 100%; 22 | text-overflow: ellipsis; 23 | overflow: hidden; 24 | max-width: 1px; 25 | } 26 | 27 | .metadata-tab-view .value:hover { 28 | white-space: pre-wrap; 29 | } 30 | -------------------------------------------------------------------------------- /l10n/af.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ligging", 5 | "Title" : "Titel", 6 | "Date" : "Datum", 7 | "Comment" : "Kommentaar", 8 | "Description" : "Beskrywing", 9 | "Tags" : "Etikette", 10 | "Subject" : "Onderwerp", 11 | "Created" : "Geskep", 12 | "Modified" : "Gewysig", 13 | "Manual" : "Handmatig", 14 | "Unknown" : "Onbekend", 15 | "Other" : "Ander" 16 | }, 17 | "nplurals=2; plural=(n != 1);"); 18 | -------------------------------------------------------------------------------- /l10n/af.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ligging", 3 | "Title" : "Titel", 4 | "Date" : "Datum", 5 | "Comment" : "Kommentaar", 6 | "Description" : "Beskrywing", 7 | "Tags" : "Etikette", 8 | "Subject" : "Onderwerp", 9 | "Created" : "Geskep", 10 | "Modified" : "Gewysig", 11 | "Manual" : "Handmatig", 12 | "Unknown" : "Onbekend", 13 | "Other" : "Ander" 14 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 15 | } -------------------------------------------------------------------------------- /l10n/ast.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Reading metadata …" : "Lleendo los metadatos…", 5 | "Location" : "Llocalización", 6 | "Location could not be determined" : "Nun se pudo determinar la llocalización", 7 | "Nominatim service unavailable" : "El serviciu de Nominatim nun ta disponible", 8 | "Metadata" : "Metadatos", 9 | "No metadata found." : "Nun s'atopó nengún metadatu.", 10 | "File not found." : "Nun s'atopó'l ficheru.", 11 | "Title" : "Tñitulu", 12 | "Artist" : "Artista", 13 | "Date created" : "Data de creación", 14 | "Date modified" : "Data de modificación", 15 | "Length" : "Llargura", 16 | "Dimensions" : "Dimensiones", 17 | "Author" : "Autoría", 18 | "Copyright" : "Copyright", 19 | "Camera used" : "Cámara usada", 20 | "Android version" : "Versión d'Android", 21 | "Video codec" : "Códec del videu", 22 | "Audio codec" : "Códec del audiu", 23 | "Audio channels" : "Canales d'audiu", 24 | "Album" : "Álbum", 25 | "Track #" : "Pista #", 26 | "Year" : "Añu", 27 | "Date" : "Data", 28 | "Genre" : "Xéneru", 29 | "Comment" : "Comentariu", 30 | "Encoding tool" : "Ferramienta de codificación", 31 | "GPS coordinates" : "Coordenaes GPS", 32 | "Headline" : "Titular", 33 | "Description" : "Descripción", 34 | "Rating" : "Valoración", 35 | "People" : "Persones", 36 | "Tags" : "Etiquetes", 37 | "Keywords" : "Pallabres clave", 38 | "Instructions" : "Instrucciones", 39 | "Credits" : "Creitos", 40 | "Source" : "Orixe", 41 | "Software" : "Software", 42 | "Exposure" : "Esposición", 43 | "ISO-%s" : "ISO-%s", 44 | "Exposure program" : "Programa d'esposición", 45 | "Exposure mode" : "Mou d'esposición", 46 | "Focal length" : "Llongura focal", 47 | "%g mm" : "%g mm", 48 | "Max aperture" : "Apertura máxima", 49 | "Flash mode" : "Mou del flax", 50 | "Subject" : "Asuntu", 51 | "Modified" : "Modificóse", 52 | "Application" : "Aplicación", 53 | "Number of pages" : "Númberu de páxines", 54 | "Number of files" : "Númberu de ficheros", 55 | "Not defined" : "Nun se definió", 56 | "Manual" : "Manual", 57 | "Normal program" : "Programa normal", 58 | "Portrait mode" : "Mou vertical", 59 | "Landscape mode" : "Mou horizontal", 60 | "Auto exposure" : "Esposición automática", 61 | "Manual exposure" : "Esposición manual", 62 | "Pattern" : "Patrón", 63 | "Partial" : "Parcial", 64 | "Flash" : "Flax", 65 | "A plugin for displaying file metadata" : "Un plugin p'amosar metadatos de ficheros" 66 | }, 67 | "nplurals=2; plural=(n != 1);"); 68 | -------------------------------------------------------------------------------- /l10n/ast.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "Lleendo los metadatos…", 3 | "Location" : "Llocalización", 4 | "Location could not be determined" : "Nun se pudo determinar la llocalización", 5 | "Nominatim service unavailable" : "El serviciu de Nominatim nun ta disponible", 6 | "Metadata" : "Metadatos", 7 | "No metadata found." : "Nun s'atopó nengún metadatu.", 8 | "File not found." : "Nun s'atopó'l ficheru.", 9 | "Title" : "Tñitulu", 10 | "Artist" : "Artista", 11 | "Date created" : "Data de creación", 12 | "Date modified" : "Data de modificación", 13 | "Length" : "Llargura", 14 | "Dimensions" : "Dimensiones", 15 | "Author" : "Autoría", 16 | "Copyright" : "Copyright", 17 | "Camera used" : "Cámara usada", 18 | "Android version" : "Versión d'Android", 19 | "Video codec" : "Códec del videu", 20 | "Audio codec" : "Códec del audiu", 21 | "Audio channels" : "Canales d'audiu", 22 | "Album" : "Álbum", 23 | "Track #" : "Pista #", 24 | "Year" : "Añu", 25 | "Date" : "Data", 26 | "Genre" : "Xéneru", 27 | "Comment" : "Comentariu", 28 | "Encoding tool" : "Ferramienta de codificación", 29 | "GPS coordinates" : "Coordenaes GPS", 30 | "Headline" : "Titular", 31 | "Description" : "Descripción", 32 | "Rating" : "Valoración", 33 | "People" : "Persones", 34 | "Tags" : "Etiquetes", 35 | "Keywords" : "Pallabres clave", 36 | "Instructions" : "Instrucciones", 37 | "Credits" : "Creitos", 38 | "Source" : "Orixe", 39 | "Software" : "Software", 40 | "Exposure" : "Esposición", 41 | "ISO-%s" : "ISO-%s", 42 | "Exposure program" : "Programa d'esposición", 43 | "Exposure mode" : "Mou d'esposición", 44 | "Focal length" : "Llongura focal", 45 | "%g mm" : "%g mm", 46 | "Max aperture" : "Apertura máxima", 47 | "Flash mode" : "Mou del flax", 48 | "Subject" : "Asuntu", 49 | "Modified" : "Modificóse", 50 | "Application" : "Aplicación", 51 | "Number of pages" : "Númberu de páxines", 52 | "Number of files" : "Númberu de ficheros", 53 | "Not defined" : "Nun se definió", 54 | "Manual" : "Manual", 55 | "Normal program" : "Programa normal", 56 | "Portrait mode" : "Mou vertical", 57 | "Landscape mode" : "Mou horizontal", 58 | "Auto exposure" : "Esposición automática", 59 | "Manual exposure" : "Esposición manual", 60 | "Pattern" : "Patrón", 61 | "Partial" : "Parcial", 62 | "Flash" : "Flax", 63 | "A plugin for displaying file metadata" : "Un plugin p'amosar metadatos de ficheros" 64 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 65 | } -------------------------------------------------------------------------------- /l10n/az.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Yerləşdiyiniz ünvan", 5 | "Title" : "Başlıq", 6 | "Date" : "Date", 7 | "Comment" : "Komentariya", 8 | "Description" : "Açıqlanma", 9 | "Rating" : "Reytinq", 10 | "Tags" : "Işarələr", 11 | "Subject" : "Mövzu", 12 | "Modified" : "Dəyişdirildi", 13 | "Other" : "Digər" 14 | }, 15 | "nplurals=2; plural=(n != 1);"); 16 | -------------------------------------------------------------------------------- /l10n/az.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Yerləşdiyiniz ünvan", 3 | "Title" : "Başlıq", 4 | "Date" : "Date", 5 | "Comment" : "Komentariya", 6 | "Description" : "Açıqlanma", 7 | "Rating" : "Reytinq", 8 | "Tags" : "Işarələr", 9 | "Subject" : "Mövzu", 10 | "Modified" : "Dəyişdirildi", 11 | "Other" : "Digər" 12 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 13 | } -------------------------------------------------------------------------------- /l10n/bn_BD.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "অবস্থান", 5 | "Title" : "শিরোনাম", 6 | "Date" : "Date", 7 | "Comment" : "মন্তব্য", 8 | "Description" : "বিবরণ", 9 | "Tags" : "ট্যাগ", 10 | "Modified" : "পরিবর্তিত", 11 | "Unknown" : "অজানা", 12 | "Other" : "অন্যান্য" 13 | }, 14 | "nplurals=2; plural=(n != 1);"); 15 | -------------------------------------------------------------------------------- /l10n/bn_BD.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "অবস্থান", 3 | "Title" : "শিরোনাম", 4 | "Date" : "Date", 5 | "Comment" : "মন্তব্য", 6 | "Description" : "বিবরণ", 7 | "Tags" : "ট্যাগ", 8 | "Modified" : "পরিবর্তিত", 9 | "Unknown" : "অজানা", 10 | "Other" : "অন্যান্য" 11 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 12 | } -------------------------------------------------------------------------------- /l10n/br.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Lec'hiadur", 5 | "Title" : "Titl", 6 | "Copyright" : "Copyright", 7 | "Date" : "Deizat", 8 | "Comment" : "Displegadenn", 9 | "Description" : "Diskrivadur", 10 | "People" : "Tud", 11 | "Tags" : "Klavioù", 12 | "ISO-%s" : "ISO-%s", 13 | "Created" : "Krouet", 14 | "Modified" : "Cheñchet", 15 | "Unknown" : "Dianv", 16 | "Pattern" : "Pattern", 17 | "Other" : "All" 18 | }, 19 | "nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"); 20 | -------------------------------------------------------------------------------- /l10n/br.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Lec'hiadur", 3 | "Title" : "Titl", 4 | "Copyright" : "Copyright", 5 | "Date" : "Deizat", 6 | "Comment" : "Displegadenn", 7 | "Description" : "Diskrivadur", 8 | "People" : "Tud", 9 | "Tags" : "Klavioù", 10 | "ISO-%s" : "ISO-%s", 11 | "Created" : "Krouet", 12 | "Modified" : "Cheñchet", 13 | "Unknown" : "Dianv", 14 | "Pattern" : "Pattern", 15 | "Other" : "All" 16 | },"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);" 17 | } -------------------------------------------------------------------------------- /l10n/bs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Lokacija", 5 | "Title" : "Naslov", 6 | "Date" : "Date", 7 | "Comment" : "Komentar", 8 | "Description" : "Opis", 9 | "Modified" : "Izmijenjeno", 10 | "Unknown" : "Nepoznato", 11 | "Other" : "Ostali" 12 | }, 13 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 14 | -------------------------------------------------------------------------------- /l10n/bs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Lokacija", 3 | "Title" : "Naslov", 4 | "Date" : "Date", 5 | "Comment" : "Komentar", 6 | "Description" : "Opis", 7 | "Modified" : "Izmijenjeno", 8 | "Unknown" : "Nepoznato", 9 | "Other" : "Ostali" 10 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 11 | } -------------------------------------------------------------------------------- /l10n/cy_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Lleoliad", 5 | "Title" : "Teitl", 6 | "Year" : "Blwyddyn", 7 | "Date" : "Date", 8 | "Comment" : "Sylw", 9 | "Description" : "Disgrifiad", 10 | "Rating" : "Graddio", 11 | "Tags" : "Tagiau", 12 | "Credits" : "Diolchiadau", 13 | "Subject" : "Pwnc", 14 | "Modified" : "Addaswyd", 15 | "Manual" : "Â Llaw", 16 | "Unknown" : "Anhysbys", 17 | "Other" : "Arall" 18 | }, 19 | "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); 20 | -------------------------------------------------------------------------------- /l10n/cy_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Lleoliad", 3 | "Title" : "Teitl", 4 | "Year" : "Blwyddyn", 5 | "Date" : "Date", 6 | "Comment" : "Sylw", 7 | "Description" : "Disgrifiad", 8 | "Rating" : "Graddio", 9 | "Tags" : "Tagiau", 10 | "Credits" : "Diolchiadau", 11 | "Subject" : "Pwnc", 12 | "Modified" : "Addaswyd", 13 | "Manual" : "Â Llaw", 14 | "Unknown" : "Anhysbys", 15 | "Other" : "Arall" 16 | },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" 17 | } -------------------------------------------------------------------------------- /l10n/da.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Placering", 5 | "Metadata" : "Metadata", 6 | "File not found." : "Fil ikke fundet.", 7 | "Title" : "Titel", 8 | "Artist" : "Kunster", 9 | "Date created" : "Oprettet den", 10 | "Length" : "Længde", 11 | "Author" : "Forfatter", 12 | "Copyright" : "Ophavsret", 13 | "Android version" : "Android version", 14 | "Album" : "Album", 15 | "Year" : "År", 16 | "Date" : "Dato", 17 | "Genre" : "Genre", 18 | "Comment" : "Kommentar", 19 | "Headline" : "Overskrift", 20 | "Description" : "Beskrivelse", 21 | "Rating" : "Bedømmelse", 22 | "People" : "Personer", 23 | "Tags" : "Tags", 24 | "Keywords" : "Nøgleord", 25 | "Instructions" : "Instruktioner", 26 | "Credits" : "Krediteringer", 27 | "Source" : "Kilde", 28 | "Subject" : "Emne", 29 | "Created" : "Oprettet", 30 | "Modified" : "Ændret", 31 | "Application" : "Applikation", 32 | "Manual" : "Manuel", 33 | "Unknown" : "Ukendt", 34 | "Pattern" : "Mønster", 35 | "Other" : "Andet" 36 | }, 37 | "nplurals=2; plural=(n != 1);"); 38 | -------------------------------------------------------------------------------- /l10n/da.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Placering", 3 | "Metadata" : "Metadata", 4 | "File not found." : "Fil ikke fundet.", 5 | "Title" : "Titel", 6 | "Artist" : "Kunster", 7 | "Date created" : "Oprettet den", 8 | "Length" : "Længde", 9 | "Author" : "Forfatter", 10 | "Copyright" : "Ophavsret", 11 | "Android version" : "Android version", 12 | "Album" : "Album", 13 | "Year" : "År", 14 | "Date" : "Dato", 15 | "Genre" : "Genre", 16 | "Comment" : "Kommentar", 17 | "Headline" : "Overskrift", 18 | "Description" : "Beskrivelse", 19 | "Rating" : "Bedømmelse", 20 | "People" : "Personer", 21 | "Tags" : "Tags", 22 | "Keywords" : "Nøgleord", 23 | "Instructions" : "Instruktioner", 24 | "Credits" : "Krediteringer", 25 | "Source" : "Kilde", 26 | "Subject" : "Emne", 27 | "Created" : "Oprettet", 28 | "Modified" : "Ændret", 29 | "Application" : "Applikation", 30 | "Manual" : "Manuel", 31 | "Unknown" : "Ukendt", 32 | "Pattern" : "Mønster", 33 | "Other" : "Andet" 34 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 35 | } -------------------------------------------------------------------------------- /l10n/eo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Loko", 5 | "Title" : "Titolo", 6 | "Copyright" : "Kopirajto", 7 | "Date" : "Date", 8 | "Comment" : "Komento", 9 | "Description" : "Priskribo", 10 | "Rating" : "Pritakso", 11 | "People" : "Homoj", 12 | "Tags" : "Etikedoj", 13 | "Keywords" : "Ŝlosilvortoj", 14 | "Subject" : "Temo", 15 | "Created" : "Kreita", 16 | "Modified" : "Modifita", 17 | "Manual" : "Permane", 18 | "Unknown" : "Nekonata", 19 | "Other" : "Alia" 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/eo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Loko", 3 | "Title" : "Titolo", 4 | "Copyright" : "Kopirajto", 5 | "Date" : "Date", 6 | "Comment" : "Komento", 7 | "Description" : "Priskribo", 8 | "Rating" : "Pritakso", 9 | "People" : "Homoj", 10 | "Tags" : "Etikedoj", 11 | "Keywords" : "Ŝlosilvortoj", 12 | "Subject" : "Temo", 13 | "Created" : "Kreita", 14 | "Modified" : "Modifita", 15 | "Manual" : "Permane", 16 | "Unknown" : "Nekonata", 17 | "Other" : "Alia" 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/es_419.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_419.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_AR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Year" : "Año", 8 | "Date" : "Fecha", 9 | "Comment" : "Comentario", 10 | "Headline" : "Títular", 11 | "Description" : "Descripción", 12 | "Rating" : "Calificación", 13 | "Tags" : "Etiquetas", 14 | "Credits" : "Créditos", 15 | "Subject" : "Asunto", 16 | "Created" : "Creado", 17 | "Modified" : "Modificado", 18 | "Unknown" : "Desconocido", 19 | "Pattern" : "Patrón", 20 | "Other" : "Otro" 21 | }, 22 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 23 | -------------------------------------------------------------------------------- /l10n/es_AR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Year" : "Año", 6 | "Date" : "Fecha", 7 | "Comment" : "Comentario", 8 | "Headline" : "Títular", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 20 | } -------------------------------------------------------------------------------- /l10n/es_CL.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_CL.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_CO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_CO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_CR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_CR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_DO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_DO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_GT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Manual" : "Manual", 17 | "Unknown" : "Desconocido", 18 | "Pattern" : "Patrón", 19 | "Other" : "Otro" 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es_GT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Manual" : "Manual", 15 | "Unknown" : "Desconocido", 16 | "Pattern" : "Patrón", 17 | "Other" : "Otro" 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_HN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_HN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_MX.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Author" : "Autor", 7 | "Copyright" : "Derechos de autor", 8 | "Album" : "Álbum", 9 | "Year" : "Año", 10 | "Date" : "Fecha", 11 | "Comment" : "Comentario", 12 | "Headline" : "Título", 13 | "Description" : "Descripción", 14 | "Rating" : "Calificación", 15 | "People" : "Personas", 16 | "Tags" : "Etiquetas", 17 | "Credits" : "Créditos", 18 | "Subject" : "Asunto", 19 | "Created" : "Creado", 20 | "Modified" : "Modificado", 21 | "Application" : "Aplicación", 22 | "Manual" : "Manual", 23 | "Unknown" : "Desconocido", 24 | "Pattern" : "Patrón", 25 | "Other" : "Otro" 26 | }, 27 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 28 | -------------------------------------------------------------------------------- /l10n/es_MX.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Author" : "Autor", 5 | "Copyright" : "Derechos de autor", 6 | "Album" : "Álbum", 7 | "Year" : "Año", 8 | "Date" : "Fecha", 9 | "Comment" : "Comentario", 10 | "Headline" : "Título", 11 | "Description" : "Descripción", 12 | "Rating" : "Calificación", 13 | "People" : "Personas", 14 | "Tags" : "Etiquetas", 15 | "Credits" : "Créditos", 16 | "Subject" : "Asunto", 17 | "Created" : "Creado", 18 | "Modified" : "Modificado", 19 | "Application" : "Aplicación", 20 | "Manual" : "Manual", 21 | "Unknown" : "Desconocido", 22 | "Pattern" : "Patrón", 23 | "Other" : "Otro" 24 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 25 | } -------------------------------------------------------------------------------- /l10n/es_NI.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_NI.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_PA.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_PA.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_PE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_PE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_PR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_PR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_PY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_PY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_SV.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_SV.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/es_UY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Ubicación", 5 | "Title" : "Título", 6 | "Copyright" : "Derechos de autor", 7 | "Date" : "Fecha", 8 | "Comment" : "Comentario", 9 | "Description" : "Descripción", 10 | "Rating" : "Calificación", 11 | "Tags" : "Etiquetas", 12 | "Credits" : "Créditos", 13 | "Subject" : "Asunto", 14 | "Created" : "Creado", 15 | "Modified" : "Modificado", 16 | "Unknown" : "Desconocido", 17 | "Pattern" : "Patrón", 18 | "Other" : "Otro" 19 | }, 20 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 21 | -------------------------------------------------------------------------------- /l10n/es_UY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Ubicación", 3 | "Title" : "Título", 4 | "Copyright" : "Derechos de autor", 5 | "Date" : "Fecha", 6 | "Comment" : "Comentario", 7 | "Description" : "Descripción", 8 | "Rating" : "Calificación", 9 | "Tags" : "Etiquetas", 10 | "Credits" : "Créditos", 11 | "Subject" : "Asunto", 12 | "Created" : "Creado", 13 | "Modified" : "Modificado", 14 | "Unknown" : "Desconocido", 15 | "Pattern" : "Patrón", 16 | "Other" : "Otro" 17 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 18 | } -------------------------------------------------------------------------------- /l10n/et_EE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Reading metadata …" : "Loen metaandmeid…", 5 | "Nominatim service unavailable, click here to view on map" : "Nominatimi teenus pole saadaval, klõpsi siin vaatamiseks kaardil", 6 | "Location" : "Asukoht", 7 | "Location could not be determined" : "Asukoha tuvastamine ei õnnestunud", 8 | "Nominatim service unavailable" : "Nominatimi teenus pole saadaval", 9 | "Metadata" : "Metaandmed", 10 | "No metadata found." : "Metateavet ei leidu.", 11 | "File not found." : "Faili ei leitud", 12 | "Unsupported MIME type \"%s\"." : "„%s“ MIME tüüp ehk vorming pole toetatud.", 13 | "Title" : "Pealkiri", 14 | "Artist" : "Esitaja", 15 | "Date created" : "Koostamise kuupäev", 16 | "Date modified" : "Muutmise kuupäev", 17 | "Length" : "Kestus", 18 | "Dimensions" : "Mõõdud", 19 | "Frame rate" : "Kaadrisagedus", 20 | "%g fps" : "%g kaadrit sekundis", 21 | "Bit rate" : "Bitikiirus", 22 | "%s kbps" : "%s kbps", 23 | "Author" : "Autor", 24 | "Copyright" : "Autoriõigused", 25 | "Camera used" : "Kasutatud kaamera", 26 | "Android version" : "Androidi versioon", 27 | "Video codec" : "Videokoodek", 28 | "%s bit" : "%s bitti", 29 | "Audio codec" : "Helikoodek", 30 | "Audio sample rate" : "Heli diskreetimissagedus", 31 | "%s kHz" : "%s kHz", 32 | "Album" : "Album", 33 | "Year" : "Aasta", 34 | "Date" : "Kuupäev", 35 | "Genre" : "Žanr", 36 | "Comment" : "Kommentaar", 37 | "Encoded by" : "Kodeerija", 38 | "Encoding tool" : "Kodeerimistarkvara", 39 | "GPS coordinates" : "GPS-koodinaadid", 40 | "Headline" : "Alapealkiri", 41 | "Description" : "Kirjeldus", 42 | "Rating" : "Hinnang", 43 | "People" : "Inimese", 44 | "Tags" : "Sildid", 45 | "Keywords" : "Märksõnad", 46 | "Instructions" : "Juhend", 47 | "Credits" : "Tänuavaldused", 48 | "Source" : "Allikas", 49 | "Software" : "Tarkvara", 50 | "Exposure" : "Säriaeg", 51 | "%s sec." : "%s sek.", 52 | "ISO-%s" : "ISO-%s", 53 | "Focal length" : "Fookuskaugus", 54 | "%g mm" : "%g mm", 55 | "GPS altitude" : "Kõrgus GPS-i alusel", 56 | "Subject" : "Teema", 57 | "Created" : "Loodud", 58 | "Modified" : "Muudetud", 59 | "Application" : "Rakendus", 60 | "Number of pages" : "Lehti", 61 | "PDF producer" : "PDF-faili valmistaja", 62 | "PDF version" : "PDF-i versioon", 63 | "Number of files" : "Failide arv", 64 | "Unknown" : "Teadmata", 65 | "Average" : "Keskmine", 66 | "Pattern" : "Muster", 67 | "Other" : "Muu", 68 | "H.264 - MPEG-4 AVC (part 10)" : "H.264 - MPEG-4 AVC (part 10)", 69 | "A plugin for displaying file metadata" : "Lisamoodul faili metateabe kuvamiseks" 70 | }, 71 | "nplurals=2; plural=(n != 1);"); 72 | -------------------------------------------------------------------------------- /l10n/et_EE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "Loen metaandmeid…", 3 | "Nominatim service unavailable, click here to view on map" : "Nominatimi teenus pole saadaval, klõpsi siin vaatamiseks kaardil", 4 | "Location" : "Asukoht", 5 | "Location could not be determined" : "Asukoha tuvastamine ei õnnestunud", 6 | "Nominatim service unavailable" : "Nominatimi teenus pole saadaval", 7 | "Metadata" : "Metaandmed", 8 | "No metadata found." : "Metateavet ei leidu.", 9 | "File not found." : "Faili ei leitud", 10 | "Unsupported MIME type \"%s\"." : "„%s“ MIME tüüp ehk vorming pole toetatud.", 11 | "Title" : "Pealkiri", 12 | "Artist" : "Esitaja", 13 | "Date created" : "Koostamise kuupäev", 14 | "Date modified" : "Muutmise kuupäev", 15 | "Length" : "Kestus", 16 | "Dimensions" : "Mõõdud", 17 | "Frame rate" : "Kaadrisagedus", 18 | "%g fps" : "%g kaadrit sekundis", 19 | "Bit rate" : "Bitikiirus", 20 | "%s kbps" : "%s kbps", 21 | "Author" : "Autor", 22 | "Copyright" : "Autoriõigused", 23 | "Camera used" : "Kasutatud kaamera", 24 | "Android version" : "Androidi versioon", 25 | "Video codec" : "Videokoodek", 26 | "%s bit" : "%s bitti", 27 | "Audio codec" : "Helikoodek", 28 | "Audio sample rate" : "Heli diskreetimissagedus", 29 | "%s kHz" : "%s kHz", 30 | "Album" : "Album", 31 | "Year" : "Aasta", 32 | "Date" : "Kuupäev", 33 | "Genre" : "Žanr", 34 | "Comment" : "Kommentaar", 35 | "Encoded by" : "Kodeerija", 36 | "Encoding tool" : "Kodeerimistarkvara", 37 | "GPS coordinates" : "GPS-koodinaadid", 38 | "Headline" : "Alapealkiri", 39 | "Description" : "Kirjeldus", 40 | "Rating" : "Hinnang", 41 | "People" : "Inimese", 42 | "Tags" : "Sildid", 43 | "Keywords" : "Märksõnad", 44 | "Instructions" : "Juhend", 45 | "Credits" : "Tänuavaldused", 46 | "Source" : "Allikas", 47 | "Software" : "Tarkvara", 48 | "Exposure" : "Säriaeg", 49 | "%s sec." : "%s sek.", 50 | "ISO-%s" : "ISO-%s", 51 | "Focal length" : "Fookuskaugus", 52 | "%g mm" : "%g mm", 53 | "GPS altitude" : "Kõrgus GPS-i alusel", 54 | "Subject" : "Teema", 55 | "Created" : "Loodud", 56 | "Modified" : "Muudetud", 57 | "Application" : "Rakendus", 58 | "Number of pages" : "Lehti", 59 | "PDF producer" : "PDF-faili valmistaja", 60 | "PDF version" : "PDF-i versioon", 61 | "Number of files" : "Failide arv", 62 | "Unknown" : "Teadmata", 63 | "Average" : "Keskmine", 64 | "Pattern" : "Muster", 65 | "Other" : "Muu", 66 | "H.264 - MPEG-4 AVC (part 10)" : "H.264 - MPEG-4 AVC (part 10)", 67 | "A plugin for displaying file metadata" : "Lisamoodul faili metateabe kuvamiseks" 68 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 69 | } -------------------------------------------------------------------------------- /l10n/he.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Nominatim service unavailable, click here to view on map" : "שירות ה־Nominatim אינו זמין, יש ללחוץ כאן כדי לראות על המפה", 5 | "Location" : "מיקום", 6 | "Location could not be determined" : "לא ניתן לאתר את המיקום", 7 | "Nominatim service unavailable" : "שירות ה־Nominatim אינו זמין", 8 | "Metadata" : "נתוני על", 9 | "No metadata found." : "לא נמצאו נתוני על.", 10 | "File not found." : "הקובץ לא נמצא.", 11 | "Unsupported MIME type \"%s\"." : "סוג ה־MIME ‏„%s” אינו נתמך.", 12 | "EXIF support is missing; you might need to install an appropriate package for your system." : "התמיכה ב־EXIF חסרה, יתכן שיהיה עליך להתקין את החבילה המתאימה עבור המערכת שלך.", 13 | "Title" : "תפקיד", 14 | "Length" : "אורך", 15 | "Copyright" : "זכויות יוצרים", 16 | "Year" : "שנה", 17 | "Date" : "תאריך", 18 | "Comment" : "הערה", 19 | "Description" : "תיאור", 20 | "Rating" : "דירוג", 21 | "Tags" : "תגיות", 22 | "Instructions" : "הנחיות", 23 | "Credits" : "תודות", 24 | "Source" : "מקור", 25 | "Subject" : "נושא", 26 | "Created" : "מועד היצירה", 27 | "Modified" : "מועד שינוי", 28 | "Manual" : "ידני", 29 | "Unknown" : "לא ידוע", 30 | "Pattern" : "תבנית", 31 | "Other" : "אחר", 32 | "No flash function" : "אין תכונת מבזק", 33 | "Flash" : "מבזק", 34 | "A plugin for displaying file metadata" : "תוסף להצגת נתוני על של קובץ", 35 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "תוסף שמציג נתוני על של קובץ בסרגל הפירוט הצדי על הקובץ.\n\nניתן לעיין ב־[README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) לצפייה בסוגי הקבצים הנתמכים ובמגבלות." 36 | }, 37 | "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); 38 | -------------------------------------------------------------------------------- /l10n/he.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Nominatim service unavailable, click here to view on map" : "שירות ה־Nominatim אינו זמין, יש ללחוץ כאן כדי לראות על המפה", 3 | "Location" : "מיקום", 4 | "Location could not be determined" : "לא ניתן לאתר את המיקום", 5 | "Nominatim service unavailable" : "שירות ה־Nominatim אינו זמין", 6 | "Metadata" : "נתוני על", 7 | "No metadata found." : "לא נמצאו נתוני על.", 8 | "File not found." : "הקובץ לא נמצא.", 9 | "Unsupported MIME type \"%s\"." : "סוג ה־MIME ‏„%s” אינו נתמך.", 10 | "EXIF support is missing; you might need to install an appropriate package for your system." : "התמיכה ב־EXIF חסרה, יתכן שיהיה עליך להתקין את החבילה המתאימה עבור המערכת שלך.", 11 | "Title" : "תפקיד", 12 | "Length" : "אורך", 13 | "Copyright" : "זכויות יוצרים", 14 | "Year" : "שנה", 15 | "Date" : "תאריך", 16 | "Comment" : "הערה", 17 | "Description" : "תיאור", 18 | "Rating" : "דירוג", 19 | "Tags" : "תגיות", 20 | "Instructions" : "הנחיות", 21 | "Credits" : "תודות", 22 | "Source" : "מקור", 23 | "Subject" : "נושא", 24 | "Created" : "מועד היצירה", 25 | "Modified" : "מועד שינוי", 26 | "Manual" : "ידני", 27 | "Unknown" : "לא ידוע", 28 | "Pattern" : "תבנית", 29 | "Other" : "אחר", 30 | "No flash function" : "אין תכונת מבזק", 31 | "Flash" : "מבזק", 32 | "A plugin for displaying file metadata" : "תוסף להצגת נתוני על של קובץ", 33 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "תוסף שמציג נתוני על של קובץ בסרגל הפירוט הצדי על הקובץ.\n\nניתן לעיין ב־[README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) לצפייה בסוגי הקבצים הנתמכים ובמגבלות." 34 | },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" 35 | } -------------------------------------------------------------------------------- /l10n/hy.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Տեղակայություն", 5 | "Title" : "Վերնագիր", 6 | "Date" : "Date", 7 | "Comment" : "Մեկնաբանել", 8 | "Description" : "Նկարագրություն", 9 | "Credits" : "անվանացանկ", 10 | "Modified" : "Փոփոխված", 11 | "Unknown" : "Անհայտ", 12 | "Other" : "Այլ" 13 | }, 14 | "nplurals=2; plural=(n != 1);"); 15 | -------------------------------------------------------------------------------- /l10n/hy.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Տեղակայություն", 3 | "Title" : "Վերնագիր", 4 | "Date" : "Date", 5 | "Comment" : "Մեկնաբանել", 6 | "Description" : "Նկարագրություն", 7 | "Credits" : "անվանացանկ", 8 | "Modified" : "Փոփոխված", 9 | "Unknown" : "Անհայտ", 10 | "Other" : "Այլ" 11 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 12 | } -------------------------------------------------------------------------------- /l10n/ia.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Loco", 5 | "Title" : "Titulo", 6 | "Copyright" : "Copyright", 7 | "Date" : "Date", 8 | "Comment" : "Commentario", 9 | "Description" : "Description", 10 | "Tags" : "Etiquettas", 11 | "Modified" : "Modificate", 12 | "Unknown" : "Incognite", 13 | "Other" : "Altere" 14 | }, 15 | "nplurals=2; plural=(n != 1);"); 16 | -------------------------------------------------------------------------------- /l10n/ia.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Loco", 3 | "Title" : "Titulo", 4 | "Copyright" : "Copyright", 5 | "Date" : "Date", 6 | "Comment" : "Commentario", 7 | "Description" : "Description", 8 | "Tags" : "Etiquettas", 9 | "Modified" : "Modificate", 10 | "Unknown" : "Incognite", 11 | "Other" : "Altere" 12 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 13 | } -------------------------------------------------------------------------------- /l10n/id.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Lokasi", 5 | "File not found." : "Berkas tidak ditemukan.", 6 | "Title" : "Judul", 7 | "Author" : "Penulis", 8 | "Copyright" : "Hak cipta", 9 | "Year" : "Tahun", 10 | "Date" : "Date", 11 | "Comment" : "Komentar", 12 | "Description" : "Deskrisi", 13 | "Rating" : "Nilai", 14 | "People" : "Orang", 15 | "Tags" : "Tag", 16 | "Credits" : "Kredit", 17 | "Subject" : "Subjek", 18 | "Created" : "Dibuat", 19 | "Modified" : "Dimodifikasi", 20 | "Unknown" : "Tidak diketahui", 21 | "Other" : "Lainnya" 22 | }, 23 | "nplurals=1; plural=0;"); 24 | -------------------------------------------------------------------------------- /l10n/id.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Lokasi", 3 | "File not found." : "Berkas tidak ditemukan.", 4 | "Title" : "Judul", 5 | "Author" : "Penulis", 6 | "Copyright" : "Hak cipta", 7 | "Year" : "Tahun", 8 | "Date" : "Date", 9 | "Comment" : "Komentar", 10 | "Description" : "Deskrisi", 11 | "Rating" : "Nilai", 12 | "People" : "Orang", 13 | "Tags" : "Tag", 14 | "Credits" : "Kredit", 15 | "Subject" : "Subjek", 16 | "Created" : "Dibuat", 17 | "Modified" : "Dimodifikasi", 18 | "Unknown" : "Tidak diketahui", 19 | "Other" : "Lainnya" 20 | },"pluralForm" :"nplurals=1; plural=0;" 21 | } -------------------------------------------------------------------------------- /l10n/ja.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Reading metadata …" : "メタデータを読込中...", 5 | "Location" : "場所", 6 | "Metadata" : "メタデータ", 7 | "No metadata found." : "メタデータが見つかりません。", 8 | "File not found." : "ファイルが見つかりません", 9 | "Unsupported MIME type \"%s\"." : "\"%s\" はサポートされていないMIMEタイプです。", 10 | "Title" : "タイトル", 11 | "Artist" : "アーティスト", 12 | "Date created" : "作成日時", 13 | "Length" : "長さ", 14 | "Dimensions" : "画像サイズ", 15 | "Frame rate" : "フレームレート", 16 | "%g fps" : "%g fps", 17 | "Bit rate" : "ビットレート", 18 | "%s kbps" : "%s kbps", 19 | "Author" : "作者", 20 | "Copyright" : "著作権", 21 | "Camera used" : "使ったカメラ", 22 | "Android version" : "Androidバージョン", 23 | "%s bit" : "%s bit", 24 | "Audio channels" : "オーディオ・チャンネル", 25 | "%s kHz" : "%s kHz", 26 | "Album" : "アルバム", 27 | "Year" : "年", 28 | "Date" : "日付", 29 | "Genre" : "ジャンル", 30 | "Comment" : "コメント", 31 | "Headline" : "見出し", 32 | "Description" : "説明", 33 | "Rating" : "評価", 34 | "People" : "人間", 35 | "Tags" : "タグ", 36 | "Keywords" : "キーワード", 37 | "Instructions" : "手順", 38 | "Credits" : "クレジット", 39 | "Source" : "出典", 40 | "Software" : "ソフトウェア", 41 | "%s sec." : "%s sec.", 42 | "Subject" : "件名", 43 | "Created" : "作成時刻", 44 | "Modified" : "更新日時", 45 | "Application" : "アプリケーション", 46 | "Number of files" : "ファイル数", 47 | "Manual" : "手動", 48 | "Unknown" : "不明", 49 | "Pattern" : "パターン", 50 | "Other" : "その他" 51 | }, 52 | "nplurals=1; plural=0;"); 53 | -------------------------------------------------------------------------------- /l10n/ja.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "メタデータを読込中...", 3 | "Location" : "場所", 4 | "Metadata" : "メタデータ", 5 | "No metadata found." : "メタデータが見つかりません。", 6 | "File not found." : "ファイルが見つかりません", 7 | "Unsupported MIME type \"%s\"." : "\"%s\" はサポートされていないMIMEタイプです。", 8 | "Title" : "タイトル", 9 | "Artist" : "アーティスト", 10 | "Date created" : "作成日時", 11 | "Length" : "長さ", 12 | "Dimensions" : "画像サイズ", 13 | "Frame rate" : "フレームレート", 14 | "%g fps" : "%g fps", 15 | "Bit rate" : "ビットレート", 16 | "%s kbps" : "%s kbps", 17 | "Author" : "作者", 18 | "Copyright" : "著作権", 19 | "Camera used" : "使ったカメラ", 20 | "Android version" : "Androidバージョン", 21 | "%s bit" : "%s bit", 22 | "Audio channels" : "オーディオ・チャンネル", 23 | "%s kHz" : "%s kHz", 24 | "Album" : "アルバム", 25 | "Year" : "年", 26 | "Date" : "日付", 27 | "Genre" : "ジャンル", 28 | "Comment" : "コメント", 29 | "Headline" : "見出し", 30 | "Description" : "説明", 31 | "Rating" : "評価", 32 | "People" : "人間", 33 | "Tags" : "タグ", 34 | "Keywords" : "キーワード", 35 | "Instructions" : "手順", 36 | "Credits" : "クレジット", 37 | "Source" : "出典", 38 | "Software" : "ソフトウェア", 39 | "%s sec." : "%s sec.", 40 | "Subject" : "件名", 41 | "Created" : "作成時刻", 42 | "Modified" : "更新日時", 43 | "Application" : "アプリケーション", 44 | "Number of files" : "ファイル数", 45 | "Manual" : "手動", 46 | "Unknown" : "不明", 47 | "Pattern" : "パターン", 48 | "Other" : "その他" 49 | },"pluralForm" :"nplurals=1; plural=0;" 50 | } -------------------------------------------------------------------------------- /l10n/ka.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Location", 5 | "Metadata" : "Metadata", 6 | "Author" : "Author", 7 | "Year" : "Year", 8 | "Date" : "Date", 9 | "Comment" : "Comment", 10 | "Headline" : "Headline", 11 | "Description" : "Description", 12 | "Rating" : "Rating", 13 | "People" : "People", 14 | "Tags" : "Tags", 15 | "Credits" : "Credits", 16 | "Subject" : "Subject", 17 | "Created" : "Created", 18 | "Modified" : "Modified", 19 | "Application" : "Application", 20 | "Manual" : "Manual", 21 | "Unknown" : "Unknown", 22 | "Pattern" : "Pattern", 23 | "Other" : "Other" 24 | }, 25 | "nplurals=2; plural=(n!=1);"); 26 | -------------------------------------------------------------------------------- /l10n/ka.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Location", 3 | "Metadata" : "Metadata", 4 | "Author" : "Author", 5 | "Year" : "Year", 6 | "Date" : "Date", 7 | "Comment" : "Comment", 8 | "Headline" : "Headline", 9 | "Description" : "Description", 10 | "Rating" : "Rating", 11 | "People" : "People", 12 | "Tags" : "Tags", 13 | "Credits" : "Credits", 14 | "Subject" : "Subject", 15 | "Created" : "Created", 16 | "Modified" : "Modified", 17 | "Application" : "Application", 18 | "Manual" : "Manual", 19 | "Unknown" : "Unknown", 20 | "Pattern" : "Pattern", 21 | "Other" : "Other" 22 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 23 | } -------------------------------------------------------------------------------- /l10n/ka_GE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "ადგილმდებარეობა", 5 | "Title" : "სათაური", 6 | "Copyright" : "საავტორო უფლებები", 7 | "Date" : "თარიღი", 8 | "Comment" : "კომენტარი", 9 | "Description" : "აღწერილობა", 10 | "Rating" : "რეიტინგი", 11 | "Tags" : "ტეგები", 12 | "Credits" : "კრედიტები", 13 | "Subject" : "სათაური", 14 | "Created" : "შექმნილია", 15 | "Modified" : "შეიცვალა", 16 | "Unknown" : "ამოუცნობი", 17 | "Pattern" : "ნიმუში", 18 | "Other" : "სხვა" 19 | }, 20 | "nplurals=2; plural=(n!=1);"); 21 | -------------------------------------------------------------------------------- /l10n/ka_GE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "ადგილმდებარეობა", 3 | "Title" : "სათაური", 4 | "Copyright" : "საავტორო უფლებები", 5 | "Date" : "თარიღი", 6 | "Comment" : "კომენტარი", 7 | "Description" : "აღწერილობა", 8 | "Rating" : "რეიტინგი", 9 | "Tags" : "ტეგები", 10 | "Credits" : "კრედიტები", 11 | "Subject" : "სათაური", 12 | "Created" : "შექმნილია", 13 | "Modified" : "შეიცვალა", 14 | "Unknown" : "ამოუცნობი", 15 | "Pattern" : "ნიმუში", 16 | "Other" : "სხვა" 17 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 18 | } -------------------------------------------------------------------------------- /l10n/kab.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Adig", 5 | "Title" : "Azwel", 6 | "Comment" : "Commentaire", 7 | "Tags" : "Tibzimin", 8 | "Created" : "Yettwarna.", 9 | "Modified" : "Yettwabeddel", 10 | "Unknown" : "Arussin", 11 | "Other" : "Wayeḍ" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/kab.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Adig", 3 | "Title" : "Azwel", 4 | "Comment" : "Commentaire", 5 | "Tags" : "Tibzimin", 6 | "Created" : "Yettwarna.", 7 | "Modified" : "Yettwabeddel", 8 | "Unknown" : "Arussin", 9 | "Other" : "Wayeḍ" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/km.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "ទីតាំង", 5 | "Title" : "ចំណងជើង", 6 | "Artist" : "តន្ត្រីករណ៍", 7 | "Length" : "រយៈពេល", 8 | "Copyright" : "រក្សាសិទ្ធិ", 9 | "Year" : "ឆ្នាំ", 10 | "Date" : "Date", 11 | "Comment" : "មតិ", 12 | "Description" : "ការ​អធិប្បាយ", 13 | "Tags" : "ស្លាក", 14 | "Modified" : "បាន​កែ​ប្រែ", 15 | "Other" : "ផ្សេងៗ" 16 | }, 17 | "nplurals=1; plural=0;"); 18 | -------------------------------------------------------------------------------- /l10n/km.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "ទីតាំង", 3 | "Title" : "ចំណងជើង", 4 | "Artist" : "តន្ត្រីករណ៍", 5 | "Length" : "រយៈពេល", 6 | "Copyright" : "រក្សាសិទ្ធិ", 7 | "Year" : "ឆ្នាំ", 8 | "Date" : "Date", 9 | "Comment" : "មតិ", 10 | "Description" : "ការ​អធិប្បាយ", 11 | "Tags" : "ស្លាក", 12 | "Modified" : "បាន​កែ​ប្រែ", 13 | "Other" : "ផ្សេងៗ" 14 | },"pluralForm" :"nplurals=1; plural=0;" 15 | } -------------------------------------------------------------------------------- /l10n/ko.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Reading metadata …" : "메타데이터를 읽는 중....", 5 | "Resolving, click here to view on map …" : "분석중, 지도에서 보려면 클릭해 주세요 ...", 6 | "Nominatim service unavailable, click here to view on map" : "Nominatim 서비스 이용 불가, 지도에서 보려면 클릭해 주세요.", 7 | "Location" : "위치", 8 | "Location could not be determined" : "위치를 결정할 수 없습니다.", 9 | "Nominatim service unavailable" : "Nominatim 서비스 이용불능", 10 | "Metadata" : "메타데이터", 11 | "No metadata found." : "메타데이터를 찾을 수 없습니다.", 12 | "File not found." : "파일을 찾을 수 없습니다.", 13 | "Unsupported MIME type \"%s\"." : "\"%s\" MIME 타입은 지원하지 않습니다.", 14 | "EXIF support is missing; you might need to install an appropriate package for your system." : "해당 시스템은 EXIF를 지원하지 않습니다. 이를 위해서는 해당하는 패키지를 설치하여야 합니다.", 15 | "Title" : "제목", 16 | "Artist" : "음악가", 17 | "Date created" : "생성 일자", 18 | "Length" : "길이", 19 | "Dimensions" : "해상도", 20 | "Frame rate" : "프레임률", 21 | "%g fps" : "%g fps", 22 | "Bit rate" : "비트레이트", 23 | "%s kbps" : "%s kbps", 24 | "Author" : "저자", 25 | "Copyright" : "저작권", 26 | "Camera used" : "촬영한 카메라", 27 | "Android version" : "안드로이드 버전", 28 | "Video codec" : "영상 코덱", 29 | "%s bit" : "%s 비트", 30 | "Audio codec" : "오디오 코덱", 31 | "Audio channels" : "오디오 채널", 32 | "Audio sample rate" : "오디오 샘플레이트", 33 | "%s kHz" : "%s kHz", 34 | "Album" : "앨범", 35 | "Track #" : "트랙 #", 36 | "Year" : "년", 37 | "Date" : "날짜", 38 | "Genre" : "장르", 39 | "Comment" : "설명", 40 | "GPS coordinates" : "GPS 좌표", 41 | "Headline" : "표제", 42 | "Description" : "설명", 43 | "Rating" : "평가", 44 | "People" : "사람들", 45 | "Tags" : "태그", 46 | "Keywords" : "키워드", 47 | "Instructions" : "지침", 48 | "Credits" : "크레딧", 49 | "Source" : "원본", 50 | "Exposure" : "노출", 51 | "%s sec." : "%s 초.", 52 | "ISO-%s" : "ISO-%s", 53 | "%s EV" : "%s EV", 54 | "Exposure mode" : "노출 모드", 55 | "Focal length" : "초점 거리", 56 | "%g mm" : "%g mm", 57 | "(35 mm equivalent: %g mm)" : "(35 mm equivalent: %g mm)", 58 | "Max aperture" : "최대 조리개 값", 59 | "Metering mode" : "측광 모드", 60 | "Flash mode" : "플래시 모드", 61 | "Subject" : "제목", 62 | "Created" : "생성됨", 63 | "Modified" : "수정한 날짜", 64 | "Application" : "애플리케이션", 65 | "Number of files" : "파일 개수", 66 | "Not defined" : "정의되지 않음", 67 | "Manual" : "수동", 68 | "Aperture priority" : "조리개 우선", 69 | "Shutter priority" : "셔터 우선", 70 | "Portrait mode" : "인물 모드", 71 | "Landscape mode" : "풍경 모드", 72 | "Auto exposure" : "자동 노출", 73 | "Manual exposure" : "수동 노출", 74 | "Unknown" : "알 수 없음", 75 | "Pattern" : "패턴", 76 | "Other" : "기타", 77 | "Flash" : "플래시", 78 | "red-eye" : "적목 현상", 79 | "A plugin for displaying file metadata" : "메타데이터를 표시하는 플러그인", 80 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "사이드바에 파일의 메타데이터를 표시하는 플러그인입니다.\n\n[README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md)를 읽어 지원되는 파일 형식과 제한점을 확인하십시오." 81 | }, 82 | "nplurals=1; plural=0;"); 83 | -------------------------------------------------------------------------------- /l10n/ko.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "메타데이터를 읽는 중....", 3 | "Resolving, click here to view on map …" : "분석중, 지도에서 보려면 클릭해 주세요 ...", 4 | "Nominatim service unavailable, click here to view on map" : "Nominatim 서비스 이용 불가, 지도에서 보려면 클릭해 주세요.", 5 | "Location" : "위치", 6 | "Location could not be determined" : "위치를 결정할 수 없습니다.", 7 | "Nominatim service unavailable" : "Nominatim 서비스 이용불능", 8 | "Metadata" : "메타데이터", 9 | "No metadata found." : "메타데이터를 찾을 수 없습니다.", 10 | "File not found." : "파일을 찾을 수 없습니다.", 11 | "Unsupported MIME type \"%s\"." : "\"%s\" MIME 타입은 지원하지 않습니다.", 12 | "EXIF support is missing; you might need to install an appropriate package for your system." : "해당 시스템은 EXIF를 지원하지 않습니다. 이를 위해서는 해당하는 패키지를 설치하여야 합니다.", 13 | "Title" : "제목", 14 | "Artist" : "음악가", 15 | "Date created" : "생성 일자", 16 | "Length" : "길이", 17 | "Dimensions" : "해상도", 18 | "Frame rate" : "프레임률", 19 | "%g fps" : "%g fps", 20 | "Bit rate" : "비트레이트", 21 | "%s kbps" : "%s kbps", 22 | "Author" : "저자", 23 | "Copyright" : "저작권", 24 | "Camera used" : "촬영한 카메라", 25 | "Android version" : "안드로이드 버전", 26 | "Video codec" : "영상 코덱", 27 | "%s bit" : "%s 비트", 28 | "Audio codec" : "오디오 코덱", 29 | "Audio channels" : "오디오 채널", 30 | "Audio sample rate" : "오디오 샘플레이트", 31 | "%s kHz" : "%s kHz", 32 | "Album" : "앨범", 33 | "Track #" : "트랙 #", 34 | "Year" : "년", 35 | "Date" : "날짜", 36 | "Genre" : "장르", 37 | "Comment" : "설명", 38 | "GPS coordinates" : "GPS 좌표", 39 | "Headline" : "표제", 40 | "Description" : "설명", 41 | "Rating" : "평가", 42 | "People" : "사람들", 43 | "Tags" : "태그", 44 | "Keywords" : "키워드", 45 | "Instructions" : "지침", 46 | "Credits" : "크레딧", 47 | "Source" : "원본", 48 | "Exposure" : "노출", 49 | "%s sec." : "%s 초.", 50 | "ISO-%s" : "ISO-%s", 51 | "%s EV" : "%s EV", 52 | "Exposure mode" : "노출 모드", 53 | "Focal length" : "초점 거리", 54 | "%g mm" : "%g mm", 55 | "(35 mm equivalent: %g mm)" : "(35 mm equivalent: %g mm)", 56 | "Max aperture" : "최대 조리개 값", 57 | "Metering mode" : "측광 모드", 58 | "Flash mode" : "플래시 모드", 59 | "Subject" : "제목", 60 | "Created" : "생성됨", 61 | "Modified" : "수정한 날짜", 62 | "Application" : "애플리케이션", 63 | "Number of files" : "파일 개수", 64 | "Not defined" : "정의되지 않음", 65 | "Manual" : "수동", 66 | "Aperture priority" : "조리개 우선", 67 | "Shutter priority" : "셔터 우선", 68 | "Portrait mode" : "인물 모드", 69 | "Landscape mode" : "풍경 모드", 70 | "Auto exposure" : "자동 노출", 71 | "Manual exposure" : "수동 노출", 72 | "Unknown" : "알 수 없음", 73 | "Pattern" : "패턴", 74 | "Other" : "기타", 75 | "Flash" : "플래시", 76 | "red-eye" : "적목 현상", 77 | "A plugin for displaying file metadata" : "메타데이터를 표시하는 플러그인", 78 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "사이드바에 파일의 메타데이터를 표시하는 플러그인입니다.\n\n[README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md)를 읽어 지원되는 파일 형식과 제한점을 확인하십시오." 79 | },"pluralForm" :"nplurals=1; plural=0;" 80 | } -------------------------------------------------------------------------------- /l10n/lb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Uert", 5 | "Title" : "Titel", 6 | "Date" : "Date", 7 | "Comment" : "Kommentar", 8 | "Description" : "Beschreiwung", 9 | "Tags" : "Tags", 10 | "Modified" : "Geännert", 11 | "Unknown" : "Onbekannt", 12 | "Other" : "Aner" 13 | }, 14 | "nplurals=2; plural=(n != 1);"); 15 | -------------------------------------------------------------------------------- /l10n/lb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Uert", 3 | "Title" : "Titel", 4 | "Date" : "Date", 5 | "Comment" : "Kommentar", 6 | "Description" : "Beschreiwung", 7 | "Tags" : "Tags", 8 | "Modified" : "Geännert", 9 | "Unknown" : "Onbekannt", 10 | "Other" : "Aner" 11 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 12 | } -------------------------------------------------------------------------------- /l10n/lt_LT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Reading metadata …" : "Skaitomi metaduomenys…", 5 | "Location" : "Vieta", 6 | "Location could not be determined" : "Nepavyko nustatyti vietos", 7 | "Metadata" : "Metaduomenys", 8 | "No metadata found." : "Nerasta jokių metaduomenų.", 9 | "File not found." : "Failas nerastas.", 10 | "Unsupported MIME type \"%s\"." : "Nepalaikomas MIME tipas \"%s\".", 11 | "EXIF support is missing; you might need to install an appropriate package for your system." : "Trūksta EXIF palaikymo; jums gali tekti įdiegti savo sistemai tinkamą paketą.", 12 | "Title" : "Pavadinimas", 13 | "Artist" : "Atlikėjas", 14 | "Date created" : "Sukūrimo data", 15 | "Length" : "Trukmė", 16 | "Dimensions" : "Matmenys", 17 | "Frame rate" : "Kadrų dažnis", 18 | "%g fps" : "%g kadr./sek.", 19 | "Bit rate" : "Pralaidumas", 20 | "%s kbps" : "%s kbps", 21 | "Author" : "Autorius", 22 | "Copyright" : "Autorių teisės", 23 | "Android version" : "Android versija", 24 | "Video codec" : "Vaizdo kodekas", 25 | "Audio codec" : "Garso kodekas", 26 | "Audio channels" : "Garso kanalai", 27 | "Audio sample rate" : "Garso skaitmeninimo dažnis", 28 | "%s kHz" : "%s kHz", 29 | "Album" : "Albumas", 30 | "Track #" : "Takelio nr.", 31 | "Year" : "Metai", 32 | "Date" : "Data", 33 | "Genre" : "Žanras", 34 | "Comment" : "Komentaras", 35 | "GPS coordinates" : "GPS koordinatės", 36 | "Headline" : "Antraštė", 37 | "Description" : "Aprašas", 38 | "Rating" : "Įvertinimas", 39 | "People" : "Žmonės", 40 | "Tags" : "Žymos", 41 | "Keywords" : "Raktažodžiai", 42 | "Instructions" : "Instrukcija", 43 | "Credits" : "Padėkos", 44 | "Source" : "Šaltinis", 45 | "Software" : "Programinė įranga", 46 | "%s sec." : "%s sek.", 47 | "ISO-%s" : "ISO-%s", 48 | "%g mm" : "%g mm", 49 | "Subject" : "Tema", 50 | "Created" : "Sukurta", 51 | "Modified" : "Pakeistas", 52 | "PDF version" : "PDF versija", 53 | "Number of files" : "Failų skaičius", 54 | "Not defined" : "Neapibrėžta", 55 | "Manual" : "Rankiniu būdu", 56 | "Unknown" : "Nežinoma", 57 | "Pattern" : "Šablonas", 58 | "Other" : "Kita", 59 | "A plugin for displaying file metadata" : "Failo metaduomenų atvaizdavimo įskiepis" 60 | }, 61 | "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); 62 | -------------------------------------------------------------------------------- /l10n/lt_LT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "Skaitomi metaduomenys…", 3 | "Location" : "Vieta", 4 | "Location could not be determined" : "Nepavyko nustatyti vietos", 5 | "Metadata" : "Metaduomenys", 6 | "No metadata found." : "Nerasta jokių metaduomenų.", 7 | "File not found." : "Failas nerastas.", 8 | "Unsupported MIME type \"%s\"." : "Nepalaikomas MIME tipas \"%s\".", 9 | "EXIF support is missing; you might need to install an appropriate package for your system." : "Trūksta EXIF palaikymo; jums gali tekti įdiegti savo sistemai tinkamą paketą.", 10 | "Title" : "Pavadinimas", 11 | "Artist" : "Atlikėjas", 12 | "Date created" : "Sukūrimo data", 13 | "Length" : "Trukmė", 14 | "Dimensions" : "Matmenys", 15 | "Frame rate" : "Kadrų dažnis", 16 | "%g fps" : "%g kadr./sek.", 17 | "Bit rate" : "Pralaidumas", 18 | "%s kbps" : "%s kbps", 19 | "Author" : "Autorius", 20 | "Copyright" : "Autorių teisės", 21 | "Android version" : "Android versija", 22 | "Video codec" : "Vaizdo kodekas", 23 | "Audio codec" : "Garso kodekas", 24 | "Audio channels" : "Garso kanalai", 25 | "Audio sample rate" : "Garso skaitmeninimo dažnis", 26 | "%s kHz" : "%s kHz", 27 | "Album" : "Albumas", 28 | "Track #" : "Takelio nr.", 29 | "Year" : "Metai", 30 | "Date" : "Data", 31 | "Genre" : "Žanras", 32 | "Comment" : "Komentaras", 33 | "GPS coordinates" : "GPS koordinatės", 34 | "Headline" : "Antraštė", 35 | "Description" : "Aprašas", 36 | "Rating" : "Įvertinimas", 37 | "People" : "Žmonės", 38 | "Tags" : "Žymos", 39 | "Keywords" : "Raktažodžiai", 40 | "Instructions" : "Instrukcija", 41 | "Credits" : "Padėkos", 42 | "Source" : "Šaltinis", 43 | "Software" : "Programinė įranga", 44 | "%s sec." : "%s sek.", 45 | "ISO-%s" : "ISO-%s", 46 | "%g mm" : "%g mm", 47 | "Subject" : "Tema", 48 | "Created" : "Sukurta", 49 | "Modified" : "Pakeistas", 50 | "PDF version" : "PDF versija", 51 | "Number of files" : "Failų skaičius", 52 | "Not defined" : "Neapibrėžta", 53 | "Manual" : "Rankiniu būdu", 54 | "Unknown" : "Nežinoma", 55 | "Pattern" : "Šablonas", 56 | "Other" : "Kita", 57 | "A plugin for displaying file metadata" : "Failo metaduomenų atvaizdavimo įskiepis" 58 | },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" 59 | } -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Atrašanās vieta", 5 | "Metadata" : "Metadati", 6 | "Title" : "Amats", 7 | "Copyright" : "Autortiesības", 8 | "Year" : "Gads", 9 | "Date" : "Datums", 10 | "Comment" : "Piebilde", 11 | "Description" : "Apraksts", 12 | "Rating" : "Vērtējums", 13 | "People" : "Cilvēki", 14 | "Tags" : "Birkas", 15 | "Instructions" : "Norādes gatavošanai", 16 | "Credits" : "Kredīti", 17 | "Source" : "Avots", 18 | "Subject" : "Temats", 19 | "Created" : "Izveidots", 20 | "Modified" : "Mainīts", 21 | "Application" : "Lietotne", 22 | "Manual" : "Pašrocīgi", 23 | "Unknown" : "Nezināms", 24 | "Other" : "Cits" 25 | }, 26 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 27 | -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Atrašanās vieta", 3 | "Metadata" : "Metadati", 4 | "Title" : "Amats", 5 | "Copyright" : "Autortiesības", 6 | "Year" : "Gads", 7 | "Date" : "Datums", 8 | "Comment" : "Piebilde", 9 | "Description" : "Apraksts", 10 | "Rating" : "Vērtējums", 11 | "People" : "Cilvēki", 12 | "Tags" : "Birkas", 13 | "Instructions" : "Norādes gatavošanai", 14 | "Credits" : "Kredīti", 15 | "Source" : "Avots", 16 | "Subject" : "Temats", 17 | "Created" : "Izveidots", 18 | "Modified" : "Mainīts", 19 | "Application" : "Lietotne", 20 | "Manual" : "Pašrocīgi", 21 | "Unknown" : "Nezināms", 22 | "Other" : "Cits" 23 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 24 | } -------------------------------------------------------------------------------- /l10n/mk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "Вчитување на метаподатоци ...", 3 | "Resolving, click here to view on map …" : "Решавање, кликнете овде за да видите на мапата ...", 4 | "Nominatim service unavailable, click here to view on map" : "Услугата Nominatim е недостапна, кликнете овде за да ја видите мапата", 5 | "Location" : "Локација", 6 | "Location could not be determined" : "Неможе да се одреди локацијата", 7 | "Nominatim service unavailable" : "Услугата Nominatim е недостапна", 8 | "Metadata" : "Метаподатоци", 9 | "No metadata found." : "Не се пронајдени метаподатоци.", 10 | "File not found." : "Датотеката не е пронајдена.", 11 | "Unsupported MIME type \"%s\"." : "Неподржан MIME вид \"%s\".", 12 | "EXIF support is missing; you might need to install an appropriate package for your system." : "Недостасува поддршка за EXIF; можеби ќе треба да инсталирате соодветен пакет за вашиот систем.", 13 | "Title" : "Наслов", 14 | "Artist" : "Изведувач", 15 | "Date created" : "Датум на креирање", 16 | "Length" : "Должина", 17 | "Dimensions" : "Димензии", 18 | "Frame rate" : "Фрејмови", 19 | "%g fps" : "%g fps", 20 | "Bit rate" : "проток", 21 | "%s kbps" : "%s kbps", 22 | "Author" : "Автор", 23 | "Copyright" : "Авторско право", 24 | "Camera used" : "Користена камера", 25 | "Android version" : "Android верзија", 26 | "Video codec" : "Видео кодек", 27 | "Video sample size" : "Големина на видео", 28 | "%s bit" : "%s bit", 29 | "Audio codec" : "Аудио кедек", 30 | "Audio channels" : "Аудио канали", 31 | "Audio sample rate" : "Аудио", 32 | "%s kHz" : "%s kHz", 33 | "Audio sample size" : "Големина на аудио", 34 | "Album" : "Албум", 35 | "Track #" : "Број #", 36 | "Year" : "Година", 37 | "Date" : "Датум", 38 | "Genre" : "Жанр", 39 | "Comment" : "Коментар", 40 | "Encoded by" : "Кодиран од", 41 | "Encoding tool" : "Алатка за кодирање", 42 | "GPS coordinates" : "GPS координати", 43 | "Headline" : "Наслов", 44 | "Description" : "Опис", 45 | "Rating" : "Рејтинг", 46 | "Description writer" : "Опис на писателот", 47 | "People" : "Луѓе", 48 | "Tags" : "Ознаки", 49 | "Keywords" : "Клучни зборови", 50 | "Instructions" : "Инструкции", 51 | "Job title" : "Наслов на работа", 52 | "Credits" : "Кредити", 53 | "Source" : "Извор", 54 | "Software" : "Софтвер", 55 | "Exposure" : "Експозитура", 56 | "%s sec." : "%s сек.", 57 | "ISO-%s" : "ISO-%s", 58 | "%s EV" : "%s EV", 59 | "Exposure program" : "Експозитура програм", 60 | "Exposure mode" : "Експозитура мод", 61 | "Focal length" : "Фокусна должина", 62 | "%g mm" : "%g mm", 63 | "(35 mm equivalent: %g mm)" : "(35 mm еквивалентно на: %g mm)", 64 | "Max aperture" : "Максимална решетка", 65 | "Metering mode" : "Режим на мерење", 66 | "Flash mode" : "Мод на блицот", 67 | "GPS altitude" : "GPS надморска висина", 68 | "Subject" : "Наслов", 69 | "Created" : "Креирано", 70 | "Modified" : "Изменето", 71 | "Number of files" : "Број на датотеки", 72 | "Not defined" : "Не е дефинирано", 73 | "Manual" : "Рачно", 74 | "Normal program" : "Нормален програм", 75 | "Aperture priority" : "Приоритет на отворот", 76 | "Shutter priority" : "Приоритет на блендата", 77 | "Creative program" : "Креативна програма", 78 | "Action program" : "Акциска програма", 79 | "Portrait mode" : "Режим на портрет", 80 | "Landscape mode" : "Режим на пејзаж", 81 | "Auto exposure" : "Автоматска експозитура", 82 | "Manual exposure" : "Рачна експозитура", 83 | "Auto bracket" : "Автоматска заграда", 84 | "Unknown" : "Непознат", 85 | "Average" : "Просечно", 86 | "Center Weighted Average" : "Просечно пондерирана во центарот", 87 | "Spot" : "Сцена", 88 | "Multi Spot" : "Повеќе сцени", 89 | "Pattern" : "Шаблон", 90 | "Partial" : "Делумно", 91 | "Other" : "Останато", 92 | "No flash function" : "Блицот нема функција", 93 | "Flash" : "Блиц", 94 | "auto" : "автоматски", 95 | "red-eye" : "црвени-очи", 96 | "strobe return" : "враќање на стробот", 97 | "H.264 - MPEG-4 AVC (part 10)" : "H.264 - MPEG-4 AVC (дел 10)", 98 | "A plugin for displaying file metadata" : "Додаток за прикажување на метаподатоци", 99 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "Додаток што ги прикажува метаподатоците на датотеката во страничната лента со детали за датотеката." 100 | },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" 101 | } -------------------------------------------------------------------------------- /l10n/mn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Байршил", 5 | "Title" : "Цол/Албан тушаал", 6 | "Copyright" : "Зохиогчийн эрх", 7 | "Date" : "Он сар өдөр", 8 | "Comment" : "undefined", 9 | "Description" : "Тодорхойлолт", 10 | "Rating" : "Зэрэглэл", 11 | "Tags" : "Tag-үүд", 12 | "Credits" : "Кредит", 13 | "Subject" : "Сэдэв", 14 | "Created" : "Үүсгэсэн", 15 | "Modified" : "Өөрчлөгдсөн", 16 | "Unknown" : "Үл танигдах зүйл", 17 | "Other" : "Бусад" 18 | }, 19 | "nplurals=2; plural=(n != 1);"); 20 | -------------------------------------------------------------------------------- /l10n/mn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Байршил", 3 | "Title" : "Цол/Албан тушаал", 4 | "Copyright" : "Зохиогчийн эрх", 5 | "Date" : "Он сар өдөр", 6 | "Comment" : "undefined", 7 | "Description" : "Тодорхойлолт", 8 | "Rating" : "Зэрэглэл", 9 | "Tags" : "Tag-үүд", 10 | "Credits" : "Кредит", 11 | "Subject" : "Сэдэв", 12 | "Created" : "Үүсгэсэн", 13 | "Modified" : "Өөрчлөгдсөн", 14 | "Unknown" : "Үл танигдах зүйл", 15 | "Other" : "Бусад" 16 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 17 | } -------------------------------------------------------------------------------- /l10n/ms_MY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Lokasi", 5 | "Title" : "Judul", 6 | "Date" : "Date", 7 | "Description" : "Keterangan", 8 | "Modified" : "Dimodifikasi", 9 | "Other" : "Lain" 10 | }, 11 | "nplurals=1; plural=0;"); 12 | -------------------------------------------------------------------------------- /l10n/ms_MY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Lokasi", 3 | "Title" : "Judul", 4 | "Date" : "Date", 5 | "Description" : "Keterangan", 6 | "Modified" : "Dimodifikasi", 7 | "Other" : "Lain" 8 | },"pluralForm" :"nplurals=1; plural=0;" 9 | } -------------------------------------------------------------------------------- /l10n/nn_NO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Stad", 5 | "Title" : "Tittel", 6 | "Year" : "År", 7 | "Date" : "Date", 8 | "Comment" : "Kommentér", 9 | "Description" : "Skildring", 10 | "Tags" : "Emneord", 11 | "Created" : "Lagd", 12 | "Modified" : "Endra", 13 | "Unknown" : "Ukjend", 14 | "Other" : "Anna" 15 | }, 16 | "nplurals=2; plural=(n != 1);"); 17 | -------------------------------------------------------------------------------- /l10n/nn_NO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Stad", 3 | "Title" : "Tittel", 4 | "Year" : "År", 5 | "Date" : "Date", 6 | "Comment" : "Kommentér", 7 | "Description" : "Skildring", 8 | "Tags" : "Emneord", 9 | "Created" : "Lagd", 10 | "Modified" : "Endra", 11 | "Unknown" : "Ukjend", 12 | "Other" : "Anna" 13 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 14 | } -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Emplaçament", 5 | "Metadata" : "Metadonadas", 6 | "File not found." : "Fichièr pas trobat", 7 | "Title" : "Títol", 8 | "Artist" : "Artista", 9 | "Length" : "Longor", 10 | "Copyright" : "Drech d'autor", 11 | "Album" : "Album", 12 | "Year" : "Annada", 13 | "Date" : "Date", 14 | "Genre" : "Genre", 15 | "Comment" : "Comentar", 16 | "Headline" : "Títol", 17 | "Description" : "Descripcion", 18 | "People" : "Gent", 19 | "Tags" : "Etiquetas", 20 | "Credits" : "Crèdits", 21 | "Modified" : "Modificat", 22 | "Unknown" : "Desconegut", 23 | "Other" : "Autre" 24 | }, 25 | "nplurals=2; plural=(n > 1);"); 26 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Emplaçament", 3 | "Metadata" : "Metadonadas", 4 | "File not found." : "Fichièr pas trobat", 5 | "Title" : "Títol", 6 | "Artist" : "Artista", 7 | "Length" : "Longor", 8 | "Copyright" : "Drech d'autor", 9 | "Album" : "Album", 10 | "Year" : "Annada", 11 | "Date" : "Date", 12 | "Genre" : "Genre", 13 | "Comment" : "Comentar", 14 | "Headline" : "Títol", 15 | "Description" : "Descripcion", 16 | "People" : "Gent", 17 | "Tags" : "Etiquetas", 18 | "Credits" : "Crèdits", 19 | "Modified" : "Modificat", 20 | "Unknown" : "Desconegut", 21 | "Other" : "Autre" 22 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 23 | } -------------------------------------------------------------------------------- /l10n/pt_PT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Nominatim service unavailable, click here to view on map" : "O serviço está indisponível, clique aqui para ver no mapa", 5 | "Location" : "Localização:", 6 | "Location could not be determined" : "Não foi possível determinar a localização", 7 | "Nominatim service unavailable" : "O serviço \"Nominatim\" está indisponível", 8 | "Metadata" : "Metadados", 9 | "No metadata found." : "Não foram encontrados metadados.", 10 | "File not found." : "Ficheiro não encontrado", 11 | "Unsupported MIME type \"%s\"." : "Tipo de MIME \"%s\" não suportado", 12 | "EXIF support is missing; you might need to install an appropriate package for your system." : "Suporte ao EXIF indisponível; deverá instalar um software apropriado neste sistema.", 13 | "Title" : "Título", 14 | "Date created" : "Data da criação", 15 | "Length" : "Comprimento", 16 | "%g fps" : "%g fps", 17 | "%s kbps" : "%s kbps", 18 | "Author" : "Autor", 19 | "Copyright" : "Direitos de Autor", 20 | "%s bit" : "%s bit", 21 | "%s kHz" : "%s kHz", 22 | "Year" : "Year", 23 | "Date" : "Data", 24 | "Comment" : "Comentário", 25 | "Headline" : "Título ", 26 | "Description" : "Descrição", 27 | "Rating" : "Avaliação", 28 | "People" : "Pessoas", 29 | "Tags" : "Marcações", 30 | "Keywords" : "Palavras-chave", 31 | "Instructions" : "Instruções", 32 | "Credits" : "Créditos", 33 | "Source" : "Fonte", 34 | "%s sec." : "%s seg.", 35 | "ISO-%s" : "ISO-%s", 36 | "%g mm" : "%g mm", 37 | "(35 mm equivalent: %g mm)" : "(35 mm equivalente: %g mm)", 38 | "Subject" : "Assunto", 39 | "Created" : "Criado", 40 | "Modified" : "Modificado", 41 | "Manual" : "Manual", 42 | "Unknown" : "Desconhecido", 43 | "Other" : "Outro", 44 | "No flash function" : "Sem a função de flash", 45 | "Flash" : "Flash", 46 | "auto" : "auto", 47 | "red-eye" : "olhos vermelhos", 48 | "strobe return" : "Flash usado no modo TTL", 49 | "A plugin for displaying file metadata" : "Uma aplicação para mostrar metadados do ficheiro", 50 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "Uma aplicação que mostra metadados do ficheiro no painel de detalhes lateral.\n\nAceda a [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) para saber quais os tipos de ficheiros suportados e eventuais restrições." 51 | }, 52 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 53 | -------------------------------------------------------------------------------- /l10n/pt_PT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Nominatim service unavailable, click here to view on map" : "O serviço está indisponível, clique aqui para ver no mapa", 3 | "Location" : "Localização:", 4 | "Location could not be determined" : "Não foi possível determinar a localização", 5 | "Nominatim service unavailable" : "O serviço \"Nominatim\" está indisponível", 6 | "Metadata" : "Metadados", 7 | "No metadata found." : "Não foram encontrados metadados.", 8 | "File not found." : "Ficheiro não encontrado", 9 | "Unsupported MIME type \"%s\"." : "Tipo de MIME \"%s\" não suportado", 10 | "EXIF support is missing; you might need to install an appropriate package for your system." : "Suporte ao EXIF indisponível; deverá instalar um software apropriado neste sistema.", 11 | "Title" : "Título", 12 | "Date created" : "Data da criação", 13 | "Length" : "Comprimento", 14 | "%g fps" : "%g fps", 15 | "%s kbps" : "%s kbps", 16 | "Author" : "Autor", 17 | "Copyright" : "Direitos de Autor", 18 | "%s bit" : "%s bit", 19 | "%s kHz" : "%s kHz", 20 | "Year" : "Year", 21 | "Date" : "Data", 22 | "Comment" : "Comentário", 23 | "Headline" : "Título ", 24 | "Description" : "Descrição", 25 | "Rating" : "Avaliação", 26 | "People" : "Pessoas", 27 | "Tags" : "Marcações", 28 | "Keywords" : "Palavras-chave", 29 | "Instructions" : "Instruções", 30 | "Credits" : "Créditos", 31 | "Source" : "Fonte", 32 | "%s sec." : "%s seg.", 33 | "ISO-%s" : "ISO-%s", 34 | "%g mm" : "%g mm", 35 | "(35 mm equivalent: %g mm)" : "(35 mm equivalente: %g mm)", 36 | "Subject" : "Assunto", 37 | "Created" : "Criado", 38 | "Modified" : "Modificado", 39 | "Manual" : "Manual", 40 | "Unknown" : "Desconhecido", 41 | "Other" : "Outro", 42 | "No flash function" : "Sem a função de flash", 43 | "Flash" : "Flash", 44 | "auto" : "auto", 45 | "red-eye" : "olhos vermelhos", 46 | "strobe return" : "Flash usado no modo TTL", 47 | "A plugin for displaying file metadata" : "Uma aplicação para mostrar metadados do ficheiro", 48 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "Uma aplicação que mostra metadados do ficheiro no painel de detalhes lateral.\n\nAceda a [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) para saber quais os tipos de ficheiros suportados e eventuais restrições." 49 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 50 | } -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Locație", 5 | "Title" : "Titlu", 6 | "Author" : "Autor", 7 | "Year" : "An", 8 | "Date" : "Date", 9 | "Comment" : "Comentariu", 10 | "Headline" : "Titlu", 11 | "Description" : "Descriere", 12 | "Rating" : "Evaluare", 13 | "People" : "Persoane", 14 | "Tags" : "Etichete", 15 | "Credits" : "Realizatori", 16 | "Subject" : "Subiect", 17 | "Created" : "A fost creat", 18 | "Modified" : "Modificat", 19 | "Manual" : "Manual", 20 | "Unknown" : "Necunoscut", 21 | "Other" : "Altele" 22 | }, 23 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 24 | -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Locație", 3 | "Title" : "Titlu", 4 | "Author" : "Autor", 5 | "Year" : "An", 6 | "Date" : "Date", 7 | "Comment" : "Comentariu", 8 | "Headline" : "Titlu", 9 | "Description" : "Descriere", 10 | "Rating" : "Evaluare", 11 | "People" : "Persoane", 12 | "Tags" : "Etichete", 13 | "Credits" : "Realizatori", 14 | "Subject" : "Subiect", 15 | "Created" : "A fost creat", 16 | "Modified" : "Modificat", 17 | "Manual" : "Manual", 18 | "Unknown" : "Necunoscut", 19 | "Other" : "Altele" 20 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 21 | } -------------------------------------------------------------------------------- /l10n/si.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "ස්ථානය", 5 | "File not found." : "ගොනුව හමු නොවිණි.", 6 | "Length" : "දිග", 7 | "Copyright" : "ප්‍රකාශන හිමිකම", 8 | "Android version" : "ඇන්ඩ්‍රොයිඩ් අනුවාදය", 9 | "Year" : "වර්ෂය", 10 | "Date" : "දිනය", 11 | "Comment" : "අදහස", 12 | "Description" : "විස්තරය", 13 | "Unknown" : "නොදන්නා", 14 | "Other" : "වෙනත්" 15 | }, 16 | "nplurals=2; plural=(n != 1);"); 17 | -------------------------------------------------------------------------------- /l10n/si.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "ස්ථානය", 3 | "File not found." : "ගොනුව හමු නොවිණි.", 4 | "Length" : "දිග", 5 | "Copyright" : "ප්‍රකාශන හිමිකම", 6 | "Android version" : "ඇන්ඩ්‍රොයිඩ් අනුවාදය", 7 | "Year" : "වර්ෂය", 8 | "Date" : "දිනය", 9 | "Comment" : "අදහස", 10 | "Description" : "විස්තරය", 11 | "Unknown" : "නොදන්නා", 12 | "Other" : "වෙනත්" 13 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 14 | } -------------------------------------------------------------------------------- /l10n/sq.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Vendndodhje", 5 | "Title" : "Titulli", 6 | "Copyright" : "Të drejta kopjimi", 7 | "Date" : "Data", 8 | "Comment" : "Koment", 9 | "Description" : "Përshkrim", 10 | "Rating" : "Rankim", 11 | "Tags" : "Etiketat", 12 | "Credits" : "Kreditet", 13 | "Subject" : "Temë", 14 | "Created" : "U krijua", 15 | "Modified" : "Modifikuar ", 16 | "Unknown" : "I/E panjohur", 17 | "Pattern" : "Strukturë", 18 | "Other" : "Tjetër" 19 | }, 20 | "nplurals=2; plural=(n != 1);"); 21 | -------------------------------------------------------------------------------- /l10n/sq.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Vendndodhje", 3 | "Title" : "Titulli", 4 | "Copyright" : "Të drejta kopjimi", 5 | "Date" : "Data", 6 | "Comment" : "Koment", 7 | "Description" : "Përshkrim", 8 | "Rating" : "Rankim", 9 | "Tags" : "Etiketat", 10 | "Credits" : "Kreditet", 11 | "Subject" : "Temë", 12 | "Created" : "U krijua", 13 | "Modified" : "Modifikuar ", 14 | "Unknown" : "I/E panjohur", 15 | "Pattern" : "Strukturë", 16 | "Other" : "Tjetër" 17 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 18 | } -------------------------------------------------------------------------------- /l10n/sr@latin.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Title" : "Naslov", 5 | "Date" : "Date", 6 | "Comment" : "Komentar", 7 | "Description" : "Opis", 8 | "Tags" : "Oznake", 9 | "Credits" : "Zasluge", 10 | "Unknown" : "Nepoznato", 11 | "Other" : "Ostali" 12 | }, 13 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 14 | -------------------------------------------------------------------------------- /l10n/sr@latin.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Title" : "Naslov", 3 | "Date" : "Date", 4 | "Comment" : "Komentar", 5 | "Description" : "Opis", 6 | "Tags" : "Oznake", 7 | "Credits" : "Zasluge", 8 | "Unknown" : "Nepoznato", 9 | "Other" : "Ostali" 10 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 11 | } -------------------------------------------------------------------------------- /l10n/ta.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "இடம்", 5 | "Title" : "தலைப்பு", 6 | "Date" : "Date", 7 | "Description" : "விவரிப்பு", 8 | "Tags" : "சீட்டுகள்", 9 | "Modified" : "மாற்றப்பட்டது", 10 | "Unknown" : "தெரியாத", 11 | "Other" : "மற்றவை" 12 | }, 13 | "nplurals=2; plural=(n != 1);"); 14 | -------------------------------------------------------------------------------- /l10n/ta.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "இடம்", 3 | "Title" : "தலைப்பு", 4 | "Date" : "Date", 5 | "Description" : "விவரிப்பு", 6 | "Tags" : "சீட்டுகள்", 7 | "Modified" : "மாற்றப்பட்டது", 8 | "Unknown" : "தெரியாத", 9 | "Other" : "மற்றவை" 10 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 11 | } -------------------------------------------------------------------------------- /l10n/th.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "ตำแหน่ง", 5 | "Title" : "ชื่อเรื่อง", 6 | "Length" : "ความยาวเพลง", 7 | "Copyright" : "ลิขสิทธิ์", 8 | "Year" : "ปี", 9 | "Date" : "วันที่", 10 | "Comment" : "ความคิดเห็น", 11 | "Description" : "คำอธิบาย", 12 | "Rating" : "คะแนน", 13 | "People" : "ผู้คน", 14 | "Tags" : "แท็ก", 15 | "Modified" : "แก้ไขเมื่อ", 16 | "Unknown" : "ไม่ทราบ", 17 | "Other" : "อื่น ๆ" 18 | }, 19 | "nplurals=1; plural=0;"); 20 | -------------------------------------------------------------------------------- /l10n/th.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "ตำแหน่ง", 3 | "Title" : "ชื่อเรื่อง", 4 | "Length" : "ความยาวเพลง", 5 | "Copyright" : "ลิขสิทธิ์", 6 | "Year" : "ปี", 7 | "Date" : "วันที่", 8 | "Comment" : "ความคิดเห็น", 9 | "Description" : "คำอธิบาย", 10 | "Rating" : "คะแนน", 11 | "People" : "ผู้คน", 12 | "Tags" : "แท็ก", 13 | "Modified" : "แก้ไขเมื่อ", 14 | "Unknown" : "ไม่ทราบ", 15 | "Other" : "อื่น ๆ" 16 | },"pluralForm" :"nplurals=1; plural=0;" 17 | } -------------------------------------------------------------------------------- /l10n/uk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Місце", 5 | "Metadata" : "Метадані", 6 | "File not found." : "Файл не знайдено.", 7 | "Title" : "Назва", 8 | "Date created" : "Створено", 9 | "Author" : "Автор", 10 | "Copyright" : "Права на копіюівння", 11 | "Year" : "рік", 12 | "Date" : "Date", 13 | "Comment" : "Коментар", 14 | "Headline" : "Заголовок", 15 | "Description" : "Опис", 16 | "Rating" : "Оцінка", 17 | "People" : "Користувачі", 18 | "Tags" : "Мітки", 19 | "Instructions" : "Інструкції", 20 | "Credits" : "Подяки", 21 | "Source" : "Джерело", 22 | "Subject" : "Тема", 23 | "Created" : "Створено", 24 | "Modified" : "Змінено", 25 | "Application" : "Застосунок", 26 | "Manual" : "Вручну", 27 | "Unknown" : "Невідомо", 28 | "Pattern" : "Шаблон", 29 | "Other" : "Інший" 30 | }, 31 | "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); 32 | -------------------------------------------------------------------------------- /l10n/uk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Місце", 3 | "Metadata" : "Метадані", 4 | "File not found." : "Файл не знайдено.", 5 | "Title" : "Назва", 6 | "Date created" : "Створено", 7 | "Author" : "Автор", 8 | "Copyright" : "Права на копіюівння", 9 | "Year" : "рік", 10 | "Date" : "Date", 11 | "Comment" : "Коментар", 12 | "Headline" : "Заголовок", 13 | "Description" : "Опис", 14 | "Rating" : "Оцінка", 15 | "People" : "Користувачі", 16 | "Tags" : "Мітки", 17 | "Instructions" : "Інструкції", 18 | "Credits" : "Подяки", 19 | "Source" : "Джерело", 20 | "Subject" : "Тема", 21 | "Created" : "Створено", 22 | "Modified" : "Змінено", 23 | "Application" : "Застосунок", 24 | "Manual" : "Вручну", 25 | "Unknown" : "Невідомо", 26 | "Pattern" : "Шаблон", 27 | "Other" : "Інший" 28 | },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" 29 | } -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Joylashuv", 5 | "File not found." : "Fayl topilmadi.", 6 | "Title" : "Sarlavha", 7 | "Year" : "Yil", 8 | "Date" : "Sana", 9 | "Comment" : "Izoh", 10 | "Description" : "Tavsif", 11 | "People" : "Shaxs", 12 | "Tags" : "Tags", 13 | "Instructions" : "Ko'rsatmalar", 14 | "Credits" : "Kreditlar", 15 | "Modified" : "Modified", 16 | "Unknown" : "Unknown", 17 | "Other" : "Boshqa" 18 | }, 19 | "nplurals=1; plural=0;"); 20 | -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Joylashuv", 3 | "File not found." : "Fayl topilmadi.", 4 | "Title" : "Sarlavha", 5 | "Year" : "Yil", 6 | "Date" : "Sana", 7 | "Comment" : "Izoh", 8 | "Description" : "Tavsif", 9 | "People" : "Shaxs", 10 | "Tags" : "Tags", 11 | "Instructions" : "Ko'rsatmalar", 12 | "Credits" : "Kreditlar", 13 | "Modified" : "Modified", 14 | "Unknown" : "Unknown", 15 | "Other" : "Boshqa" 16 | },"pluralForm" :"nplurals=1; plural=0;" 17 | } -------------------------------------------------------------------------------- /l10n/vi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Location" : "Vị trí", 5 | "File not found." : "Không tìm thấy tệp tin.", 6 | "Title" : "Tên", 7 | "Date created" : "Ngày tạo", 8 | "Copyright" : "Bản quyền", 9 | "Year" : "Năm", 10 | "Date" : "Date", 11 | "Comment" : "Bình luận", 12 | "Headline" : "Tiêu đề", 13 | "Description" : "Mô tả", 14 | "Rating" : "Đánh giá", 15 | "People" : "Mọi người", 16 | "Tags" : "Thẻ", 17 | "Keywords" : "Từ khóa", 18 | "Instructions" : "Hướng dẫn", 19 | "Credits" : "Ghi nhận", 20 | "Source" : "Nguồn", 21 | "Subject" : "Chủ đề", 22 | "Created" : "Đã tạo", 23 | "Modified" : "Thay đổi", 24 | "Manual" : "Thủ công", 25 | "Unknown" : "Không xác định", 26 | "Other" : "Khác" 27 | }, 28 | "nplurals=1; plural=0;"); 29 | -------------------------------------------------------------------------------- /l10n/vi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Location" : "Vị trí", 3 | "File not found." : "Không tìm thấy tệp tin.", 4 | "Title" : "Tên", 5 | "Date created" : "Ngày tạo", 6 | "Copyright" : "Bản quyền", 7 | "Year" : "Năm", 8 | "Date" : "Date", 9 | "Comment" : "Bình luận", 10 | "Headline" : "Tiêu đề", 11 | "Description" : "Mô tả", 12 | "Rating" : "Đánh giá", 13 | "People" : "Mọi người", 14 | "Tags" : "Thẻ", 15 | "Keywords" : "Từ khóa", 16 | "Instructions" : "Hướng dẫn", 17 | "Credits" : "Ghi nhận", 18 | "Source" : "Nguồn", 19 | "Subject" : "Chủ đề", 20 | "Created" : "Đã tạo", 21 | "Modified" : "Thay đổi", 22 | "Manual" : "Thủ công", 23 | "Unknown" : "Không xác định", 24 | "Other" : "Khác" 25 | },"pluralForm" :"nplurals=1; plural=0;" 26 | } -------------------------------------------------------------------------------- /l10n/zh_CN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Reading metadata …" : "正在读取元数据…", 5 | "Resolving, click here to view on map …" : "正在解决,请点击此处在地图上查看…", 6 | "Nominatim service unavailable, click here to view on map" : "名义上的服务不可用,请单击此处在地图上查看", 7 | "Location" : "地点", 8 | "Location could not be determined" : "无法确定位置", 9 | "Nominatim service unavailable" : "具体来说,服务不可用", 10 | "Metadata" : "元数据", 11 | "No metadata found." : "找不到元数据", 12 | "File not found." : "找不到文件", 13 | "Unsupported MIME type \"%s\"." : "不支持的 MIME 类型 \"%s\"。", 14 | "EXIF support is missing; you might need to install an appropriate package for your system." : "EXIF 支持缺失;您可能需要为系统安装适当的软件包。", 15 | "Title" : "标题", 16 | "Artist" : "艺术家", 17 | "Date created" : "创建日期", 18 | "Date modified" : "修改日期", 19 | "Length" : "长度", 20 | "Dimensions" : "外型尺寸", 21 | "Frame rate" : "帧率", 22 | "%g fps" : "%g 帧", 23 | "Bit rate" : "比特率", 24 | "%s kbps" : "%s 千比特每秒", 25 | "Author" : "作者", 26 | "Copyright" : "版权", 27 | "Camera used" : "使用的相机", 28 | "Android version" : "安卓版本", 29 | "Video codec" : "视频编解码器", 30 | "Video sample size" : "视频样本大小", 31 | "%s bit" : "%s 比特", 32 | "Audio codec" : "音频编解码器", 33 | "Audio channels" : "音频频道", 34 | "Audio sample rate" : "音频采样率", 35 | "%s kHz" : "%s 千赫", 36 | "Audio sample size" : "音频样本大小", 37 | "Album" : "专辑", 38 | "Track #" : "曲目编号 #", 39 | "Year" : "年份", 40 | "Date" : "日期", 41 | "Genre" : "曲风", 42 | "Comment" : "注释", 43 | "Encoded by" : "编码器", 44 | "Encoding tool" : "编码工具", 45 | "GPS coordinates" : "GPS 坐标", 46 | "Headline" : "标题", 47 | "Description" : "描述", 48 | "Rating" : "评分", 49 | "Description writer" : "说明作者", 50 | "People" : "用户", 51 | "Tags" : "标签", 52 | "Keywords" : "关键词", 53 | "Instructions" : "说明", 54 | "Job title" : "职位名称", 55 | "Credits" : "致谢", 56 | "Source" : "来源", 57 | "Software" : "软件", 58 | "Exposure" : "曝光", 59 | "%s sec." : "%s 秒。", 60 | "ISO-%s" : "ISO-%s", 61 | "%s EV" : "%s EV", 62 | "Exposure program" : "曝光程序", 63 | "Exposure mode" : "曝光模式", 64 | "Focal length" : "焦距", 65 | "%g mm" : "%g 毫秒", 66 | "(35 mm equivalent: %g mm)" : "(35毫米等效焦段:%g 毫米)", 67 | "Max aperture" : "最大光圈", 68 | "Metering mode" : "测光模式", 69 | "Flash mode" : "闪光模式", 70 | "GPS altitude" : "GPS 高度", 71 | "Subject" : "主题", 72 | "Created" : "已创建", 73 | "Modified" : "已修改", 74 | "Application" : "应用", 75 | "Number of pages" : "页数", 76 | "PDF producer" : "PDF 制作者", 77 | "PDF version" : "PDF 版本", 78 | "Number of files" : "文件数", 79 | "Not defined" : "未定义", 80 | "Manual" : "手动", 81 | "Normal program" : "标准程序", 82 | "Aperture priority" : "光圈优先", 83 | "Shutter priority" : "快门优先", 84 | "Creative program" : "创意程序", 85 | "Action program" : "动作程序", 86 | "Portrait mode" : "肖像模式", 87 | "Landscape mode" : "风景模式", 88 | "Auto exposure" : "自动曝光", 89 | "Manual exposure" : "手动曝光", 90 | "Auto bracket" : "自动支架", 91 | "Unknown" : "未知", 92 | "Average" : "平均测光", 93 | "Center Weighted Average" : "中央重点测光", 94 | "Spot" : "点测光", 95 | "Multi Spot" : "多点测光", 96 | "Pattern" : "图案", 97 | "Partial" : "局部测光", 98 | "Other" : "其他", 99 | "No flash function" : "没有闪光灯功能", 100 | "Flash" : "闪光灯", 101 | "auto" : "自动", 102 | "red-eye" : "去红眼", 103 | "strobe return" : "频闪回报", 104 | "H.264 - MPEG-4 AVC (part 10)" : "H.264-MPEG-4 AVC(第10部分)", 105 | "A plugin for displaying file metadata" : "用于显示文件元数据的插件", 106 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "一个在文件详细信息侧栏中显示文件元数据的插件。\n\n有关受支持的文件类型和限制,请参见 [自述文件](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md)。" 107 | }, 108 | "nplurals=1; plural=0;"); 109 | -------------------------------------------------------------------------------- /l10n/zh_CN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "正在读取元数据…", 3 | "Resolving, click here to view on map …" : "正在解决,请点击此处在地图上查看…", 4 | "Nominatim service unavailable, click here to view on map" : "名义上的服务不可用,请单击此处在地图上查看", 5 | "Location" : "地点", 6 | "Location could not be determined" : "无法确定位置", 7 | "Nominatim service unavailable" : "具体来说,服务不可用", 8 | "Metadata" : "元数据", 9 | "No metadata found." : "找不到元数据", 10 | "File not found." : "找不到文件", 11 | "Unsupported MIME type \"%s\"." : "不支持的 MIME 类型 \"%s\"。", 12 | "EXIF support is missing; you might need to install an appropriate package for your system." : "EXIF 支持缺失;您可能需要为系统安装适当的软件包。", 13 | "Title" : "标题", 14 | "Artist" : "艺术家", 15 | "Date created" : "创建日期", 16 | "Date modified" : "修改日期", 17 | "Length" : "长度", 18 | "Dimensions" : "外型尺寸", 19 | "Frame rate" : "帧率", 20 | "%g fps" : "%g 帧", 21 | "Bit rate" : "比特率", 22 | "%s kbps" : "%s 千比特每秒", 23 | "Author" : "作者", 24 | "Copyright" : "版权", 25 | "Camera used" : "使用的相机", 26 | "Android version" : "安卓版本", 27 | "Video codec" : "视频编解码器", 28 | "Video sample size" : "视频样本大小", 29 | "%s bit" : "%s 比特", 30 | "Audio codec" : "音频编解码器", 31 | "Audio channels" : "音频频道", 32 | "Audio sample rate" : "音频采样率", 33 | "%s kHz" : "%s 千赫", 34 | "Audio sample size" : "音频样本大小", 35 | "Album" : "专辑", 36 | "Track #" : "曲目编号 #", 37 | "Year" : "年份", 38 | "Date" : "日期", 39 | "Genre" : "曲风", 40 | "Comment" : "注释", 41 | "Encoded by" : "编码器", 42 | "Encoding tool" : "编码工具", 43 | "GPS coordinates" : "GPS 坐标", 44 | "Headline" : "标题", 45 | "Description" : "描述", 46 | "Rating" : "评分", 47 | "Description writer" : "说明作者", 48 | "People" : "用户", 49 | "Tags" : "标签", 50 | "Keywords" : "关键词", 51 | "Instructions" : "说明", 52 | "Job title" : "职位名称", 53 | "Credits" : "致谢", 54 | "Source" : "来源", 55 | "Software" : "软件", 56 | "Exposure" : "曝光", 57 | "%s sec." : "%s 秒。", 58 | "ISO-%s" : "ISO-%s", 59 | "%s EV" : "%s EV", 60 | "Exposure program" : "曝光程序", 61 | "Exposure mode" : "曝光模式", 62 | "Focal length" : "焦距", 63 | "%g mm" : "%g 毫秒", 64 | "(35 mm equivalent: %g mm)" : "(35毫米等效焦段:%g 毫米)", 65 | "Max aperture" : "最大光圈", 66 | "Metering mode" : "测光模式", 67 | "Flash mode" : "闪光模式", 68 | "GPS altitude" : "GPS 高度", 69 | "Subject" : "主题", 70 | "Created" : "已创建", 71 | "Modified" : "已修改", 72 | "Application" : "应用", 73 | "Number of pages" : "页数", 74 | "PDF producer" : "PDF 制作者", 75 | "PDF version" : "PDF 版本", 76 | "Number of files" : "文件数", 77 | "Not defined" : "未定义", 78 | "Manual" : "手动", 79 | "Normal program" : "标准程序", 80 | "Aperture priority" : "光圈优先", 81 | "Shutter priority" : "快门优先", 82 | "Creative program" : "创意程序", 83 | "Action program" : "动作程序", 84 | "Portrait mode" : "肖像模式", 85 | "Landscape mode" : "风景模式", 86 | "Auto exposure" : "自动曝光", 87 | "Manual exposure" : "手动曝光", 88 | "Auto bracket" : "自动支架", 89 | "Unknown" : "未知", 90 | "Average" : "平均测光", 91 | "Center Weighted Average" : "中央重点测光", 92 | "Spot" : "点测光", 93 | "Multi Spot" : "多点测光", 94 | "Pattern" : "图案", 95 | "Partial" : "局部测光", 96 | "Other" : "其他", 97 | "No flash function" : "没有闪光灯功能", 98 | "Flash" : "闪光灯", 99 | "auto" : "自动", 100 | "red-eye" : "去红眼", 101 | "strobe return" : "频闪回报", 102 | "H.264 - MPEG-4 AVC (part 10)" : "H.264-MPEG-4 AVC(第10部分)", 103 | "A plugin for displaying file metadata" : "用于显示文件元数据的插件", 104 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "一个在文件详细信息侧栏中显示文件元数据的插件。\n\n有关受支持的文件类型和限制,请参见 [自述文件](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md)。" 105 | },"pluralForm" :"nplurals=1; plural=0;" 106 | } -------------------------------------------------------------------------------- /l10n/zh_HK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Reading metadata …" : "正在讀取元數據 ...", 5 | "Resolving, click here to view on map …" : "正在解決,請點擊此處在地圖上查看…", 6 | "Nominatim service unavailable, click here to view on map" : "按名字的服務不可用,請單擊此處在地圖上查看", 7 | "Location" : "地點", 8 | "Location could not be determined" : "無法確定位置", 9 | "Nominatim service unavailable" : "按名字服務無法使用", 10 | "Metadata" : "元數據", 11 | "No metadata found." : "找不到元數據。", 12 | "File not found." : "找不到檔案。", 13 | "Unsupported MIME type \"%s\"." : "不支援的 MIME 格式 \"%s\"。", 14 | "EXIF support is missing; you might need to install an appropriate package for your system." : "缺少EXIF支持; 您可能需要為系統安裝適當的軟件。", 15 | "Title" : "標題", 16 | "Artist" : "藝人", 17 | "Date created" : "創建日期", 18 | "Date modified" : "修改日期", 19 | "Length" : "長度", 20 | "Dimensions" : "尺寸", 21 | "Frame rate" : "影格速率", 22 | "%g fps" : "%g fps", 23 | "Bit rate" : "Bit rate", 24 | "%s kbps" : "%s kbps", 25 | "Author" : "作者", 26 | "Copyright" : "版權", 27 | "Camera used" : "使用的相機", 28 | "Android version" : "Android 版本", 29 | "Video codec" : "視訊編解碼器", 30 | "Video sample size" : "視像樣本大小", 31 | "%s bit" : "%s bit", 32 | "Audio codec" : "音頻編解碼器", 33 | "Audio channels" : "音頻頻道", 34 | "Audio sample rate" : "音頻樣本大小", 35 | "%s kHz" : "%s kHz", 36 | "Audio sample size" : "音頻樣本大小", 37 | "Album" : "專輯 ", 38 | "Track #" : "曲目 #", 39 | "Year" : "年", 40 | "Date" : "日期", 41 | "Genre" : "類型", 42 | "Comment" : "備註", 43 | "Encoded by" : "編碼者", 44 | "Encoding tool" : "編碼工具", 45 | "GPS coordinates" : "GPS坐標", 46 | "Headline" : "標題", 47 | "Description" : "描述", 48 | "Rating" : "評價", 49 | "Description writer" : "描述作者", 50 | "People" : "人物", 51 | "Tags" : "標籤", 52 | "Keywords" : "關鍵詞", 53 | "Instructions" : "說明", 54 | "Job title" : "工作標題", 55 | "Credits" : "致謝", 56 | "Source" : "來源", 57 | "Software" : "軟件", 58 | "Exposure" : "曝光", 59 | "%s sec." : "%s 秒", 60 | "ISO-%s" : "ISO-%s", 61 | "%s EV" : "%s EV", 62 | "Exposure program" : "曝光程序", 63 | "Exposure mode" : "曝光模式", 64 | "Focal length" : "焦距", 65 | "%g mm" : "%g mm", 66 | "(35 mm equivalent: %g mm)" : "(相當於35 mm:%g mm)", 67 | "Max aperture" : "最大光圈", 68 | "Metering mode" : "測光模式", 69 | "Flash mode" : "閃光模式", 70 | "GPS altitude" : "GPS高度", 71 | "Subject" : "主題", 72 | "Created" : "建立於", 73 | "Modified" : "修改於", 74 | "Application" : "應用程式", 75 | "Number of pages" : "頁數", 76 | "PDF producer" : "PDF 製作者", 77 | "PDF version" : "PDF 版本", 78 | "Number of files" : "檔案數目", 79 | "Not defined" : "未定義", 80 | "Manual" : "手動", 81 | "Normal program" : "普通程序", 82 | "Aperture priority" : "光圈優先", 83 | "Shutter priority" : "快門優先", 84 | "Creative program" : "創意方案", 85 | "Action program" : "行動方案", 86 | "Portrait mode" : "縱向模式", 87 | "Landscape mode" : "風景模式", 88 | "Auto exposure" : "自動曝光", 89 | "Manual exposure" : "手動曝光", 90 | "Auto bracket" : "自動包圍曝光", 91 | "Unknown" : "不詳", 92 | "Average" : "平均測光", 93 | "Center Weighted Average" : "中央重點平均測光", 94 | "Spot" : "點測光", 95 | "Multi Spot" : "多點測光", 96 | "Pattern" : "圖案", 97 | "Partial" : "局部的", 98 | "Other" : "其他", 99 | "No flash function" : "無閃光燈功能", 100 | "Flash" : "閃光", 101 | "auto" : "自動", 102 | "red-eye" : "紅眼", 103 | "strobe return" : "頻閃回歸", 104 | "H.264 - MPEG-4 AVC (part 10)" : "H.264 - MPEG-4 AVC(part 10)", 105 | "A plugin for displaying file metadata" : "用於顯示文件元數據的插件", 106 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "一個在文件詳細信息側欄中顯示文件元數據的插件。有關受支持的文件類型和限制,請參見 [自述文件](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md)。" 107 | }, 108 | "nplurals=1; plural=0;"); 109 | -------------------------------------------------------------------------------- /l10n/zh_HK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "正在讀取元數據 ...", 3 | "Resolving, click here to view on map …" : "正在解決,請點擊此處在地圖上查看…", 4 | "Nominatim service unavailable, click here to view on map" : "按名字的服務不可用,請單擊此處在地圖上查看", 5 | "Location" : "地點", 6 | "Location could not be determined" : "無法確定位置", 7 | "Nominatim service unavailable" : "按名字服務無法使用", 8 | "Metadata" : "元數據", 9 | "No metadata found." : "找不到元數據。", 10 | "File not found." : "找不到檔案。", 11 | "Unsupported MIME type \"%s\"." : "不支援的 MIME 格式 \"%s\"。", 12 | "EXIF support is missing; you might need to install an appropriate package for your system." : "缺少EXIF支持; 您可能需要為系統安裝適當的軟件。", 13 | "Title" : "標題", 14 | "Artist" : "藝人", 15 | "Date created" : "創建日期", 16 | "Date modified" : "修改日期", 17 | "Length" : "長度", 18 | "Dimensions" : "尺寸", 19 | "Frame rate" : "影格速率", 20 | "%g fps" : "%g fps", 21 | "Bit rate" : "Bit rate", 22 | "%s kbps" : "%s kbps", 23 | "Author" : "作者", 24 | "Copyright" : "版權", 25 | "Camera used" : "使用的相機", 26 | "Android version" : "Android 版本", 27 | "Video codec" : "視訊編解碼器", 28 | "Video sample size" : "視像樣本大小", 29 | "%s bit" : "%s bit", 30 | "Audio codec" : "音頻編解碼器", 31 | "Audio channels" : "音頻頻道", 32 | "Audio sample rate" : "音頻樣本大小", 33 | "%s kHz" : "%s kHz", 34 | "Audio sample size" : "音頻樣本大小", 35 | "Album" : "專輯 ", 36 | "Track #" : "曲目 #", 37 | "Year" : "年", 38 | "Date" : "日期", 39 | "Genre" : "類型", 40 | "Comment" : "備註", 41 | "Encoded by" : "編碼者", 42 | "Encoding tool" : "編碼工具", 43 | "GPS coordinates" : "GPS坐標", 44 | "Headline" : "標題", 45 | "Description" : "描述", 46 | "Rating" : "評價", 47 | "Description writer" : "描述作者", 48 | "People" : "人物", 49 | "Tags" : "標籤", 50 | "Keywords" : "關鍵詞", 51 | "Instructions" : "說明", 52 | "Job title" : "工作標題", 53 | "Credits" : "致謝", 54 | "Source" : "來源", 55 | "Software" : "軟件", 56 | "Exposure" : "曝光", 57 | "%s sec." : "%s 秒", 58 | "ISO-%s" : "ISO-%s", 59 | "%s EV" : "%s EV", 60 | "Exposure program" : "曝光程序", 61 | "Exposure mode" : "曝光模式", 62 | "Focal length" : "焦距", 63 | "%g mm" : "%g mm", 64 | "(35 mm equivalent: %g mm)" : "(相當於35 mm:%g mm)", 65 | "Max aperture" : "最大光圈", 66 | "Metering mode" : "測光模式", 67 | "Flash mode" : "閃光模式", 68 | "GPS altitude" : "GPS高度", 69 | "Subject" : "主題", 70 | "Created" : "建立於", 71 | "Modified" : "修改於", 72 | "Application" : "應用程式", 73 | "Number of pages" : "頁數", 74 | "PDF producer" : "PDF 製作者", 75 | "PDF version" : "PDF 版本", 76 | "Number of files" : "檔案數目", 77 | "Not defined" : "未定義", 78 | "Manual" : "手動", 79 | "Normal program" : "普通程序", 80 | "Aperture priority" : "光圈優先", 81 | "Shutter priority" : "快門優先", 82 | "Creative program" : "創意方案", 83 | "Action program" : "行動方案", 84 | "Portrait mode" : "縱向模式", 85 | "Landscape mode" : "風景模式", 86 | "Auto exposure" : "自動曝光", 87 | "Manual exposure" : "手動曝光", 88 | "Auto bracket" : "自動包圍曝光", 89 | "Unknown" : "不詳", 90 | "Average" : "平均測光", 91 | "Center Weighted Average" : "中央重點平均測光", 92 | "Spot" : "點測光", 93 | "Multi Spot" : "多點測光", 94 | "Pattern" : "圖案", 95 | "Partial" : "局部的", 96 | "Other" : "其他", 97 | "No flash function" : "無閃光燈功能", 98 | "Flash" : "閃光", 99 | "auto" : "自動", 100 | "red-eye" : "紅眼", 101 | "strobe return" : "頻閃回歸", 102 | "H.264 - MPEG-4 AVC (part 10)" : "H.264 - MPEG-4 AVC(part 10)", 103 | "A plugin for displaying file metadata" : "用於顯示文件元數據的插件", 104 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "一個在文件詳細信息側欄中顯示文件元數據的插件。有關受支持的文件類型和限制,請參見 [自述文件](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md)。" 105 | },"pluralForm" :"nplurals=1; plural=0;" 106 | } -------------------------------------------------------------------------------- /l10n/zh_TW.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "metadata", 3 | { 4 | "Reading metadata …" : "正在讀取詮釋資料……", 5 | "Resolving, click here to view on map …" : "正在解析,請點擊此處以在地圖上檢視……", 6 | "Nominatim service unavailable, click here to view on map" : "Nominatim 服務不可用,請點擊此處以在地圖上檢視", 7 | "Location" : "地點", 8 | "Location could not be determined" : "無法確定地點", 9 | "Nominatim service unavailable" : "Nominatim 服務不可用", 10 | "Metadata" : "詮釋資料", 11 | "No metadata found." : "找不到詮釋資料。", 12 | "File not found." : "找不到檔案。", 13 | "Unsupported MIME type \"%s\"." : "不支援的 MIME 類型「%s」。", 14 | "EXIF support is missing; you might need to install an appropriate package for your system." : "缺少 EXIF 支援;您可能需要安裝您系統上對應的軟體包。", 15 | "Title" : "標題", 16 | "Artist" : "藝術家", 17 | "Date created" : "建立日期", 18 | "Date modified" : "修改日期", 19 | "Length" : "長度", 20 | "Dimensions" : "尺寸", 21 | "Frame rate" : "影格率", 22 | "%g fps" : "%g fps", 23 | "Bit rate" : "位元率", 24 | "%s kbps" : "%s kbps", 25 | "Author" : "作者", 26 | "Copyright" : "著作權", 27 | "Camera used" : "使用的相機", 28 | "Android version" : "Android 版本", 29 | "Video codec" : "視訊編解碼器", 30 | "Video sample size" : "視訊採樣大小", 31 | "%s bit" : "%s 位元", 32 | "Audio codec" : "音訊編解碼器", 33 | "Audio channels" : "音訊頻道", 34 | "Audio sample rate" : "音訊採樣率", 35 | "%s kHz" : "%s kHz", 36 | "Audio sample size" : "音訊採樣大小", 37 | "Album" : "相簿", 38 | "Track #" : "曲目數", 39 | "Year" : "年", 40 | "Date" : "日期", 41 | "Genre" : "類型", 42 | "Comment" : "備註", 43 | "Encoded by" : "編碼者", 44 | "Encoding tool" : "編碼工具", 45 | "GPS coordinates" : "GPS 座標", 46 | "Headline" : "標題", 47 | "Description" : "描述", 48 | "Rating" : "評價", 49 | "Description writer" : "描述作者", 50 | "People" : "人物", 51 | "Tags" : "標籤", 52 | "Keywords" : "關鍵字", 53 | "Instructions" : "說明", 54 | "Job title" : "職稱", 55 | "Credits" : "致謝", 56 | "Source" : "來源", 57 | "Software" : "軟體", 58 | "Exposure" : "曝光", 59 | "%s sec." : "%s秒", 60 | "ISO-%s" : "ISO-%s", 61 | "%s EV" : "%s EV", 62 | "Exposure program" : "曝光程序", 63 | "Exposure mode" : "曝光模式", 64 | "Focal length" : "焦距", 65 | "%g mm" : "%g mm", 66 | "(35 mm equivalent: %g mm)" : "(35 mm 等效:%g mm)", 67 | "Max aperture" : "最大光圈", 68 | "Metering mode" : "測光模式", 69 | "Flash mode" : "閃光燈模式", 70 | "GPS altitude" : "GPS 海拔", 71 | "Subject" : "主旨", 72 | "Created" : "已建立", 73 | "Modified" : "已修改", 74 | "Application" : "應用程式", 75 | "Number of pages" : "頁數", 76 | "PDF producer" : "PDF 製作者", 77 | "PDF version" : "PDF 版本", 78 | "Number of files" : "檔案數量", 79 | "Not defined" : "無定義", 80 | "Manual" : "手動", 81 | "Normal program" : "一般程序", 82 | "Aperture priority" : "光圈優先", 83 | "Shutter priority" : "快門優先", 84 | "Creative program" : "創意程序", 85 | "Action program" : "動作程序", 86 | "Portrait mode" : "人像模式", 87 | "Landscape mode" : "風景模式", 88 | "Auto exposure" : "自動曝光", 89 | "Manual exposure" : "手動曝光", 90 | "Auto bracket" : "自動包圍曝光", 91 | "Unknown" : "未知", 92 | "Average" : "平均", 93 | "Center Weighted Average" : "中央權重測光", 94 | "Spot" : "點", 95 | "Multi Spot" : "多點", 96 | "Pattern" : "模式", 97 | "Partial" : "部份", 98 | "Other" : "其他", 99 | "No flash function" : "無閃光燈功能", 100 | "Flash" : "閃光燈", 101 | "auto" : "自動", 102 | "red-eye" : "紅眼", 103 | "strobe return" : "閃光返回", 104 | "H.264 - MPEG-4 AVC (part 10)" : "H.264 - MPEG-4 AVC(第十部份)", 105 | "A plugin for displaying file metadata" : "用於顯示檔案詮釋資料的外掛程式", 106 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "用來在檔案詳細資訊側邊欄顯示檔案詮釋資料的外掛程式。\n\n檢視 [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) 來看看支援的檔案類型與限制。" 107 | }, 108 | "nplurals=1; plural=0;"); 109 | -------------------------------------------------------------------------------- /l10n/zh_TW.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Reading metadata …" : "正在讀取詮釋資料……", 3 | "Resolving, click here to view on map …" : "正在解析,請點擊此處以在地圖上檢視……", 4 | "Nominatim service unavailable, click here to view on map" : "Nominatim 服務不可用,請點擊此處以在地圖上檢視", 5 | "Location" : "地點", 6 | "Location could not be determined" : "無法確定地點", 7 | "Nominatim service unavailable" : "Nominatim 服務不可用", 8 | "Metadata" : "詮釋資料", 9 | "No metadata found." : "找不到詮釋資料。", 10 | "File not found." : "找不到檔案。", 11 | "Unsupported MIME type \"%s\"." : "不支援的 MIME 類型「%s」。", 12 | "EXIF support is missing; you might need to install an appropriate package for your system." : "缺少 EXIF 支援;您可能需要安裝您系統上對應的軟體包。", 13 | "Title" : "標題", 14 | "Artist" : "藝術家", 15 | "Date created" : "建立日期", 16 | "Date modified" : "修改日期", 17 | "Length" : "長度", 18 | "Dimensions" : "尺寸", 19 | "Frame rate" : "影格率", 20 | "%g fps" : "%g fps", 21 | "Bit rate" : "位元率", 22 | "%s kbps" : "%s kbps", 23 | "Author" : "作者", 24 | "Copyright" : "著作權", 25 | "Camera used" : "使用的相機", 26 | "Android version" : "Android 版本", 27 | "Video codec" : "視訊編解碼器", 28 | "Video sample size" : "視訊採樣大小", 29 | "%s bit" : "%s 位元", 30 | "Audio codec" : "音訊編解碼器", 31 | "Audio channels" : "音訊頻道", 32 | "Audio sample rate" : "音訊採樣率", 33 | "%s kHz" : "%s kHz", 34 | "Audio sample size" : "音訊採樣大小", 35 | "Album" : "相簿", 36 | "Track #" : "曲目數", 37 | "Year" : "年", 38 | "Date" : "日期", 39 | "Genre" : "類型", 40 | "Comment" : "備註", 41 | "Encoded by" : "編碼者", 42 | "Encoding tool" : "編碼工具", 43 | "GPS coordinates" : "GPS 座標", 44 | "Headline" : "標題", 45 | "Description" : "描述", 46 | "Rating" : "評價", 47 | "Description writer" : "描述作者", 48 | "People" : "人物", 49 | "Tags" : "標籤", 50 | "Keywords" : "關鍵字", 51 | "Instructions" : "說明", 52 | "Job title" : "職稱", 53 | "Credits" : "致謝", 54 | "Source" : "來源", 55 | "Software" : "軟體", 56 | "Exposure" : "曝光", 57 | "%s sec." : "%s秒", 58 | "ISO-%s" : "ISO-%s", 59 | "%s EV" : "%s EV", 60 | "Exposure program" : "曝光程序", 61 | "Exposure mode" : "曝光模式", 62 | "Focal length" : "焦距", 63 | "%g mm" : "%g mm", 64 | "(35 mm equivalent: %g mm)" : "(35 mm 等效:%g mm)", 65 | "Max aperture" : "最大光圈", 66 | "Metering mode" : "測光模式", 67 | "Flash mode" : "閃光燈模式", 68 | "GPS altitude" : "GPS 海拔", 69 | "Subject" : "主旨", 70 | "Created" : "已建立", 71 | "Modified" : "已修改", 72 | "Application" : "應用程式", 73 | "Number of pages" : "頁數", 74 | "PDF producer" : "PDF 製作者", 75 | "PDF version" : "PDF 版本", 76 | "Number of files" : "檔案數量", 77 | "Not defined" : "無定義", 78 | "Manual" : "手動", 79 | "Normal program" : "一般程序", 80 | "Aperture priority" : "光圈優先", 81 | "Shutter priority" : "快門優先", 82 | "Creative program" : "創意程序", 83 | "Action program" : "動作程序", 84 | "Portrait mode" : "人像模式", 85 | "Landscape mode" : "風景模式", 86 | "Auto exposure" : "自動曝光", 87 | "Manual exposure" : "手動曝光", 88 | "Auto bracket" : "自動包圍曝光", 89 | "Unknown" : "未知", 90 | "Average" : "平均", 91 | "Center Weighted Average" : "中央權重測光", 92 | "Spot" : "點", 93 | "Multi Spot" : "多點", 94 | "Pattern" : "模式", 95 | "Partial" : "部份", 96 | "Other" : "其他", 97 | "No flash function" : "無閃光燈功能", 98 | "Flash" : "閃光燈", 99 | "auto" : "自動", 100 | "red-eye" : "紅眼", 101 | "strobe return" : "閃光返回", 102 | "H.264 - MPEG-4 AVC (part 10)" : "H.264 - MPEG-4 AVC(第十部份)", 103 | "A plugin for displaying file metadata" : "用於顯示檔案詮釋資料的外掛程式", 104 | "A plugin which displays file metadata in the file details sidebar.\n\nSee the [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) for the supported file types and limitations." : "用來在檔案詳細資訊側邊欄顯示檔案詮釋資料的外掛程式。\n\n檢視 [README](https://github.com/gino0631/nextcloud-metadata/blob/master/README.md) 來看看支援的檔案類型與限制。" 105 | },"pluralForm" :"nplurals=1; plural=0;" 106 | } -------------------------------------------------------------------------------- /lib/AppInfo/Application.php: -------------------------------------------------------------------------------- 1 | registerEventListener(LoadSidebar::class, LoadSidebarListener::class); 26 | } 27 | 28 | public function boot(IBootContext $context): void { 29 | } 30 | 31 | public static function getL10N() { 32 | return \OC::$server->getL10N(Application::APP_ID); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/Controller/MetadataController.php: -------------------------------------------------------------------------------- 1 | metadataService = $metadataService; 18 | } 19 | 20 | /** 21 | * @NoAdminRequired 22 | */ 23 | public function get($source) { 24 | try { 25 | $metadata = $this->metadataService->getMetadata($source); 26 | 27 | if (!empty($metadata) && !$metadata->isEmpty()) { 28 | return new JSONResponse( 29 | array( 30 | 'response' => 'success', 31 | 'metadata' => $metadata->getArray(), 32 | 'lat' => $metadata->getLat(), 33 | 'lon' => $metadata->getLon(), 34 | 'loc' => $metadata->getLoc() 35 | ) 36 | ); 37 | 38 | } else { 39 | return new JSONResponse( 40 | array( 41 | 'response' => 'error', 42 | 'msg' => Application::getL10N()->t('No metadata found.') 43 | ) 44 | ); 45 | } 46 | 47 | } catch (\Exception $e) { 48 | \OCP\Server::get(LoggerInterface::class)->error($e->getMessage(), ['app' => 'metadata']); 49 | 50 | return new JSONResponse( 51 | array( 52 | 'response' => 'error', 53 | 'msg' => $e->getMessage() 54 | ) 55 | ); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /lib/Fpdi/FpdiException.php: -------------------------------------------------------------------------------- 1 | parser = $parser; 43 | $this->readTrailer(); 44 | } 45 | 46 | /** 47 | * Get the trailer dictionary. 48 | * 49 | * @return PdfDictionary 50 | */ 51 | public function getTrailer() 52 | { 53 | return $this->trailer; 54 | } 55 | 56 | /** 57 | * Read the trailer dictionary. 58 | * 59 | * @throws CrossReferenceException 60 | * @throws PdfTypeException 61 | */ 62 | protected function readTrailer() 63 | { 64 | try { 65 | $trailerKeyword = $this->parser->readValue(null, PdfToken::class); 66 | if ($trailerKeyword->value !== 'trailer') { 67 | throw new CrossReferenceException( 68 | \sprintf( 69 | 'Unexpected end of cross reference. "trailer"-keyword expected, got: %s.', 70 | $trailerKeyword->value 71 | ), 72 | CrossReferenceException::UNEXPECTED_END 73 | ); 74 | } 75 | } catch (PdfTypeException $e) { 76 | throw new CrossReferenceException( 77 | 'Unexpected end of cross reference. "trailer"-keyword expected, got an invalid object type.', 78 | CrossReferenceException::UNEXPECTED_END, 79 | $e 80 | ); 81 | } 82 | 83 | try { 84 | $trailer = $this->parser->readValue(null, PdfDictionary::class); 85 | } catch (PdfTypeException $e) { 86 | throw new CrossReferenceException( 87 | 'Unexpected end of cross reference. Trailer not found.', 88 | CrossReferenceException::UNEXPECTED_END, 89 | $e 90 | ); 91 | } 92 | 93 | $this->trailer = $trailer; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/CrossReference/CrossReferenceException.php: -------------------------------------------------------------------------------- 1 | 45 | if ($ch === 126 && isset($data[$k + 1]) && (\ord($data[$k + 1]) & 0xFF) === 62) { 46 | break; 47 | } 48 | 49 | if ($ch === 122 /* z */ && $state === 0) { 50 | $out .= \chr(0) . \chr(0) . \chr(0) . \chr(0); 51 | continue; 52 | } 53 | 54 | if ($ch < 33 /* ! */ || $ch > 117 /* u */) { 55 | throw new Ascii85Exception( 56 | 'Illegal character found while ASCII85 decode.', 57 | Ascii85Exception::ILLEGAL_CHAR_FOUND 58 | ); 59 | } 60 | 61 | $chn[$state] = $ch - 33;/* ! */ 62 | $state++; 63 | 64 | if ($state === 5) { 65 | $state = 0; 66 | $r = 0; 67 | for ($j = 0; $j < 5; ++$j) { 68 | /** @noinspection UnnecessaryCastingInspection */ 69 | $r = (int)($r * 85 + $chn[$j]); 70 | } 71 | 72 | $out .= \chr($r >> 24) 73 | . \chr($r >> 16) 74 | . \chr($r >> 8) 75 | . \chr($r); 76 | } 77 | } 78 | 79 | if ($state === 1) { 80 | throw new Ascii85Exception( 81 | 'Illegal length while ASCII85 decode.', 82 | Ascii85Exception::ILLEGAL_LENGTH 83 | ); 84 | } 85 | 86 | if ($state === 2) { 87 | $r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1] + 1) * 85 * 85 * 85; 88 | $out .= \chr($r >> 24); 89 | } elseif ($state === 3) { 90 | $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + ($chn[2] + 1) * 85 * 85; 91 | $out .= \chr($r >> 24); 92 | $out .= \chr($r >> 16); 93 | } elseif ($state === 4) { 94 | $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85 + $chn[2] * 85 * 85 + ($chn[3] + 1) * 85; 95 | $out .= \chr($r >> 24); 96 | $out .= \chr($r >> 16); 97 | $out .= \chr($r >> 8); 98 | } 99 | 100 | return $out; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Filter/Ascii85Exception.php: -------------------------------------------------------------------------------- 1 | ')); 27 | if ((\strlen($data) % 2) === 1) { 28 | $data .= '0'; 29 | } 30 | 31 | return \pack('H*', $data); 32 | } 33 | 34 | /** 35 | * Converts a string into ASCII hexadecimal representation. 36 | * 37 | * @param string $data The input string 38 | * @param boolean $leaveEOD 39 | * @return string 40 | */ 41 | public function encode($data, $leaveEOD = false) 42 | { 43 | $t = \unpack('H*', $data); 44 | return \current($t) 45 | . ($leaveEOD ? '' : '>'); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Filter/FilterException.php: -------------------------------------------------------------------------------- 1 | extensionLoaded()) { 41 | $oData = $data; 42 | $data = (($data !== '') ? @\gzuncompress($data) : ''); 43 | if ($data === false) { 44 | // let's try if the checksum is CRC32 45 | $fh = fopen('php://temp', 'w+b'); 46 | fwrite($fh, "\x1f\x8b\x08\x00\x00\x00\x00\x00" . $oData); 47 | stream_filter_append($fh, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 30]); 48 | fseek($fh, 0); 49 | $data = @stream_get_contents($fh); 50 | fclose($fh); 51 | 52 | if ($data) { 53 | return $data; 54 | } 55 | 56 | // Try this fallback 57 | $tries = 0; 58 | 59 | $oDataLen = strlen($oData); 60 | while ($tries < 6 && ($data === false || (strlen($data) < ($oDataLen - $tries - 1)))) { 61 | $data = @(gzinflate(substr($oData, $tries))); 62 | $tries++; 63 | } 64 | 65 | // let's use this fallback only if the $data is longer than the original data 66 | if (strlen($data) > ($oDataLen - $tries - 1)) { 67 | return $data; 68 | } 69 | 70 | if (!$data) { 71 | throw new FlateException( 72 | 'Error while decompressing stream.', 73 | FlateException::DECOMPRESS_ERROR 74 | ); 75 | } 76 | } 77 | } else { 78 | throw new FlateException( 79 | 'To handle FlateDecode filter, enable zlib support in PHP.', 80 | FlateException::NO_ZLIB 81 | ); 82 | } 83 | 84 | return $data; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Filter/FlateException.php: -------------------------------------------------------------------------------- 1 | predictor = $predictor; 41 | $this->colors = $colors; 42 | $this->bitsPerComponent = $bitsPerComponent; 43 | $this->columns = $columns; 44 | } 45 | 46 | public function decode($data) 47 | { 48 | if ($this->predictor === 1) { 49 | return $data; 50 | } 51 | 52 | if (($this->predictor >= 10) && ($this->predictor <= 15)) { 53 | return $this->decodePng($data); 54 | } 55 | 56 | throw new FilterException( 57 | \sprintf('Unsupported predictor %s', $this->predictor), 58 | FilterException::NOT_IMPLEMENTED 59 | ); 60 | } 61 | 62 | private function decodePng($data) 63 | { 64 | $dataLen = strlen($data); 65 | $bytesPerPixel = (int) \ceil($this->colors * $this->bitsPerComponent / 8); 66 | $bytesPerRow = (int) \ceil($this->colors * $this->bitsPerComponent * $this->columns / 8); 67 | $priorRow = \array_fill(0, $bytesPerRow, 0); 68 | $offset = 0; 69 | $result = ''; 70 | 71 | while ($offset < $dataLen) { 72 | $predictor = \ord($data[$offset++]); 73 | 74 | $currRowLen = \min($bytesPerRow, $dataLen - $offset); 75 | $currRow = new \SplFixedArray($currRowLen); 76 | for ($i = 0; $i < $currRowLen; $i++) { 77 | $currRow[$i] = \ord($data[$offset++]); 78 | } 79 | 80 | switch ($predictor) { 81 | case 0: // None 82 | break; 83 | 84 | case 1: // Sub 85 | for ($i = $bytesPerPixel; $i < $currRowLen; $i++) { 86 | $currRow[$i] = $currRow[$i] + $currRow[$i - $bytesPerPixel]; 87 | } 88 | break; 89 | 90 | case 2: // Up 91 | for ($i = 0; $i < $currRowLen; $i++) { 92 | $currRow[$i] = $currRow[$i] + $priorRow[$i]; 93 | } 94 | break; 95 | 96 | case 3: // Average 97 | for ($i = 0; $i < $currRowLen; $i++) { 98 | $left = ($i < $bytesPerPixel) ? 0 : $currRow[$i - $bytesPerPixel]; 99 | $currRow[$i] = $currRow[$i] + \floor(($left + $priorRow[$i]) / 2); 100 | } 101 | break; 102 | 103 | case 4: // Paeth 104 | // break; 105 | 106 | default: 107 | throw new FilterException( 108 | \sprintf('Unsupported predictor %s', $predictor), 109 | FilterException::NOT_IMPLEMENTED 110 | ); 111 | } 112 | 113 | for ($i = 0; $i < $currRowLen; $i++) { 114 | $result .= \chr($currRow[$i]); 115 | } 116 | 117 | $priorRow = $currRow; 118 | } 119 | 120 | return $result; 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/PdfParserException.php: -------------------------------------------------------------------------------- 1 | streamReader = $streamReader; 38 | } 39 | 40 | /** 41 | * Get the stream reader instance. 42 | * 43 | * @return StreamReader 44 | */ 45 | public function getStreamReader() 46 | { 47 | return $this->streamReader; 48 | } 49 | 50 | /** 51 | * Clear the token stack. 52 | */ 53 | public function clearStack() 54 | { 55 | $this->stack = []; 56 | } 57 | 58 | /** 59 | * Push a token onto the stack. 60 | * 61 | * @param string $token 62 | */ 63 | public function pushStack($token) 64 | { 65 | $this->stack[] = $token; 66 | } 67 | 68 | /** 69 | * Get next token. 70 | * 71 | * @return bool|string 72 | */ 73 | public function getNextToken() 74 | { 75 | $token = \array_pop($this->stack); 76 | if ($token !== null) { 77 | return $token; 78 | } 79 | 80 | if (($byte = $this->streamReader->readByte()) === false) { 81 | return false; 82 | } 83 | 84 | if (\in_array($byte, ["\x20", "\x0A", "\x0D", "\x0C", "\x09", "\x00"], true)) { 85 | if ($this->leapWhiteSpaces() === false) { 86 | return false; 87 | } 88 | $byte = $this->streamReader->readByte(); 89 | } 90 | 91 | switch ($byte) { 92 | case '/': 93 | case '[': 94 | case ']': 95 | case '(': 96 | case ')': 97 | case '{': 98 | case '}': 99 | case '<': 100 | case '>': 101 | return $byte; 102 | case '%': 103 | $this->streamReader->readLine(); 104 | return $this->getNextToken(); 105 | } 106 | 107 | /* This way is faster than checking single bytes. 108 | */ 109 | $bufferOffset = $this->streamReader->getOffset(); 110 | do { 111 | $lastBuffer = $this->streamReader->getBuffer(false); 112 | $pos = \strcspn( 113 | $lastBuffer, 114 | "\x00\x09\x0A\x0C\x0D\x20()<>[]{}/%", 115 | $bufferOffset 116 | ); 117 | } while ( 118 | // Break the loop if a delimiter or white space char is matched 119 | // in the current buffer or increase the buffers length 120 | $lastBuffer !== false && 121 | ( 122 | $bufferOffset + $pos === \strlen($lastBuffer) && 123 | $this->streamReader->increaseLength() 124 | ) 125 | ); 126 | 127 | $result = \substr($lastBuffer, $bufferOffset - 1, $pos + 1); 128 | $this->streamReader->setOffset($bufferOffset + $pos); 129 | 130 | return $result; 131 | } 132 | 133 | /** 134 | * Leap white spaces. 135 | * 136 | * @return boolean 137 | */ 138 | public function leapWhiteSpaces() 139 | { 140 | do { 141 | if (!$this->streamReader->ensureContent()) { 142 | return false; 143 | } 144 | 145 | $buffer = $this->streamReader->getBuffer(false); 146 | $matches = \strspn($buffer, "\x20\x0A\x0C\x0D\x09\x00", $this->streamReader->getOffset()); 147 | if ($matches > 0) { 148 | $this->streamReader->addOffset($matches); 149 | } 150 | } while ($this->streamReader->getOffset() >= $this->streamReader->getBufferLength()); 151 | 152 | return true; 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfArray.php: -------------------------------------------------------------------------------- 1 | getNextToken()) !== ']') { 37 | if ($token === false || ($value = $parser->readValue($token)) === false) { 38 | return false; 39 | } 40 | 41 | $result[] = $value; 42 | } 43 | 44 | $v = new self(); 45 | $v->value = $result; 46 | 47 | return $v; 48 | } 49 | 50 | /** 51 | * Helper method to create an instance. 52 | * 53 | * @param PdfType[] $values 54 | * @return self 55 | */ 56 | public static function create(array $values = []) 57 | { 58 | $v = new self(); 59 | $v->value = $values; 60 | 61 | return $v; 62 | } 63 | 64 | /** 65 | * Ensures that the passed array is a PdfArray instance with a (optional) specific size. 66 | * 67 | * @param mixed $array 68 | * @param null|int $size 69 | * @return self 70 | * @throws PdfTypeException 71 | */ 72 | public static function ensure($array, $size = null) 73 | { 74 | $result = PdfType::ensureType(self::class, $array, 'Array value expected.'); 75 | 76 | if ($size !== null && \count($array->value) !== $size) { 77 | throw new PdfTypeException( 78 | \sprintf('Array with %s entries expected.', $size), 79 | PdfTypeException::INVALID_DATA_SIZE 80 | ); 81 | } 82 | 83 | return $result; 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfBoolean.php: -------------------------------------------------------------------------------- 1 | value = (bool) $value; 28 | return $v; 29 | } 30 | 31 | /** 32 | * Ensures that the passed value is a PdfBoolean instance. 33 | * 34 | * @param mixed $value 35 | * @return self 36 | * @throws PdfTypeException 37 | */ 38 | public static function ensure($value) 39 | { 40 | return PdfType::ensureType(self::class, $value, 'Boolean value expected.'); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfDictionary.php: -------------------------------------------------------------------------------- 1 | getNextToken(); 37 | if ($token === '>' && $streamReader->getByte() === '>') { 38 | $streamReader->addOffset(1); 39 | break; 40 | } 41 | 42 | $key = $parser->readValue($token); 43 | if ($key === false) { 44 | return false; 45 | } 46 | 47 | // ensure the first value to be a Name object 48 | if (!($key instanceof PdfName)) { 49 | $lastToken = null; 50 | // ignore all other entries and search for the closing brackets 51 | while (($token = $tokenizer->getNextToken()) !== '>' && $token !== false && $lastToken !== '>') { 52 | $lastToken = $token; 53 | } 54 | 55 | if ($token === false) { 56 | return false; 57 | } 58 | 59 | break; 60 | } 61 | 62 | 63 | $value = $parser->readValue(); 64 | if ($value === false) { 65 | return false; 66 | } 67 | 68 | if ($value instanceof PdfNull) { 69 | continue; 70 | } 71 | 72 | // catch missing value 73 | if ($value instanceof PdfToken && $value->value === '>' && $streamReader->getByte() === '>') { 74 | $streamReader->addOffset(1); 75 | break; 76 | } 77 | 78 | $entries[$key->value] = $value; 79 | } 80 | 81 | $v = new self(); 82 | $v->value = $entries; 83 | 84 | return $v; 85 | } 86 | 87 | /** 88 | * Helper method to create an instance. 89 | * 90 | * @param PdfType[] $entries The keys are the name entries of the dictionary. 91 | * @return self 92 | */ 93 | public static function create(array $entries = []) 94 | { 95 | $v = new self(); 96 | $v->value = $entries; 97 | 98 | return $v; 99 | } 100 | 101 | /** 102 | * Get a value by its key from a dictionary or a default value. 103 | * 104 | * @param mixed $dictionary 105 | * @param string $key 106 | * @param PdfType|null $default 107 | * @return PdfNull|PdfType 108 | * @throws PdfTypeException 109 | */ 110 | public static function get($dictionary, $key, PdfType $default = null) 111 | { 112 | $dictionary = self::ensure($dictionary); 113 | 114 | if (isset($dictionary->value[$key])) { 115 | return $dictionary->value[$key]; 116 | } 117 | 118 | return $default === null 119 | ? new PdfNull() 120 | : $default; 121 | } 122 | 123 | /** 124 | * Ensures that the passed value is a PdfDictionary instance. 125 | * 126 | * @param mixed $dictionary 127 | * @return self 128 | * @throws PdfTypeException 129 | */ 130 | public static function ensure($dictionary) 131 | { 132 | return PdfType::ensureType(self::class, $dictionary, 'Dictionary value expected.'); 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfHexString.php: -------------------------------------------------------------------------------- 1 | getOffset(); 29 | 30 | while (true) { 31 | $buffer = $streamReader->getBuffer(false); 32 | $pos = \strpos($buffer, '>', $bufferOffset); 33 | if ($pos === false) { 34 | if (!$streamReader->increaseLength()) { 35 | return false; 36 | } 37 | continue; 38 | } 39 | 40 | break; 41 | } 42 | 43 | $result = \substr($buffer, $bufferOffset, $pos - $bufferOffset); 44 | $streamReader->setOffset($pos + 1); 45 | 46 | $v = new self(); 47 | $v->value = $result; 48 | 49 | return $v; 50 | } 51 | 52 | /** 53 | * Helper method to create an instance. 54 | * 55 | * @param string $string The hex encoded string. 56 | * @return self 57 | */ 58 | public static function create($string) 59 | { 60 | $v = new self(); 61 | $v->value = $string; 62 | 63 | return $v; 64 | } 65 | 66 | /** 67 | * Ensures that the passed value is a PdfHexString instance. 68 | * 69 | * @param mixed $hexString 70 | * @return self 71 | * @throws PdfTypeException 72 | */ 73 | public static function ensure($hexString) 74 | { 75 | return PdfType::ensureType(self::class, $hexString, 'Hex string value expected.'); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfIndirectObject.php: -------------------------------------------------------------------------------- 1 | readValue(); 41 | if ($value === false) { 42 | return false; 43 | } 44 | 45 | $nextToken = $tokenizer->getNextToken(); 46 | if ($nextToken === 'stream') { 47 | $value = PdfStream::parse($value, $reader, $parser); 48 | } elseif ($nextToken !== false) { 49 | $tokenizer->pushStack($nextToken); 50 | } 51 | 52 | $v = new self(); 53 | $v->objectNumber = (int) $objectNumberToken; 54 | $v->generationNumber = (int) $objectGenerationNumberToken; 55 | $v->value = $value; 56 | 57 | return $v; 58 | } 59 | 60 | /** 61 | * Helper method to create an instance. 62 | * 63 | * @param int $objectNumber 64 | * @param int $generationNumber 65 | * @param PdfType $value 66 | * @return self 67 | */ 68 | public static function create($objectNumber, $generationNumber, PdfType $value) 69 | { 70 | $v = new self(); 71 | $v->objectNumber = (int) $objectNumber; 72 | $v->generationNumber = (int) $generationNumber; 73 | $v->value = $value; 74 | 75 | return $v; 76 | } 77 | 78 | /** 79 | * Ensures that the passed value is a PdfIndirectObject instance. 80 | * 81 | * @param mixed $indirectObject 82 | * @return self 83 | * @throws PdfTypeException 84 | */ 85 | public static function ensure($indirectObject) 86 | { 87 | return PdfType::ensureType(self::class, $indirectObject, 'Indirect object expected.'); 88 | } 89 | 90 | /** 91 | * The object number. 92 | * 93 | * @var int 94 | */ 95 | public $objectNumber; 96 | 97 | /** 98 | * The generation number. 99 | * 100 | * @var int 101 | */ 102 | public $generationNumber; 103 | } 104 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfIndirectObjectReference.php: -------------------------------------------------------------------------------- 1 | value = (int) $objectNumber; 29 | $v->generationNumber = (int) $generationNumber; 30 | 31 | return $v; 32 | } 33 | 34 | /** 35 | * Ensures that the passed value is a PdfIndirectObject instance. 36 | * 37 | * @param mixed $value 38 | * @return self 39 | * @throws PdfTypeException 40 | */ 41 | public static function ensure($value) 42 | { 43 | return PdfType::ensureType(self::class, $value, 'Indirect reference value expected.'); 44 | } 45 | 46 | /** 47 | * The generation number. 48 | * 49 | * @var int 50 | */ 51 | public $generationNumber; 52 | } 53 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfName.php: -------------------------------------------------------------------------------- 1 | getByte(), "\x00\x09\x0A\x0C\x0D\x20()<>[]{}/%") === 0) { 32 | $v->value = (string) $tokenizer->getNextToken(); 33 | return $v; 34 | } 35 | 36 | $v->value = ''; 37 | return $v; 38 | } 39 | 40 | /** 41 | * Unescapes a name string. 42 | * 43 | * @param string $value 44 | * @return string 45 | */ 46 | public static function unescape($value) 47 | { 48 | if (strpos($value, '#') === false) { 49 | return $value; 50 | } 51 | 52 | return preg_replace_callback('/#([a-fA-F\d]{2})/', function ($matches) { 53 | return chr(hexdec($matches[1])); 54 | }, $value); 55 | } 56 | 57 | /** 58 | * Helper method to create an instance. 59 | * 60 | * @param string $string 61 | * @return self 62 | */ 63 | public static function create($string) 64 | { 65 | $v = new self(); 66 | $v->value = $string; 67 | 68 | return $v; 69 | } 70 | 71 | /** 72 | * Ensures that the passed value is a PdfName instance. 73 | * 74 | * @param mixed $name 75 | * @return self 76 | * @throws PdfTypeException 77 | */ 78 | public static function ensure($name) 79 | { 80 | return PdfType::ensureType(self::class, $name, 'Name value expected.'); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfNull.php: -------------------------------------------------------------------------------- 1 | value = $value + 0; 28 | 29 | return $v; 30 | } 31 | 32 | /** 33 | * Ensures that the passed value is a PdfNumeric instance. 34 | * 35 | * @param mixed $value 36 | * @return self 37 | * @throws PdfTypeException 38 | */ 39 | public static function ensure($value) 40 | { 41 | return PdfType::ensureType(self::class, $value, 'Numeric value expected.'); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfToken.php: -------------------------------------------------------------------------------- 1 | value = $token; 28 | 29 | return $v; 30 | } 31 | 32 | /** 33 | * Ensures that the passed value is a PdfToken instance. 34 | * 35 | * @param mixed $token 36 | * @return self 37 | * @throws PdfTypeException 38 | */ 39 | public static function ensure($token) 40 | { 41 | return PdfType::ensureType(self::class, $token, 'Token value expected.'); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfType.php: -------------------------------------------------------------------------------- 1 | value, $parser, $stopAtIndirectObject); 42 | } 43 | 44 | if ($value instanceof PdfIndirectObjectReference) { 45 | return self::resolve($parser->getIndirectObject($value->value), $parser, $stopAtIndirectObject); 46 | } 47 | 48 | return $value; 49 | } 50 | 51 | /** 52 | * Ensure that a value is an instance of a specific PDF type. 53 | * 54 | * @param string $type 55 | * @param PdfType $value 56 | * @param string $errorMessage 57 | * @return mixed 58 | * @throws PdfTypeException 59 | */ 60 | protected static function ensureType($type, $value, $errorMessage) 61 | { 62 | if (!($value instanceof $type)) { 63 | throw new PdfTypeException( 64 | $errorMessage, 65 | PdfTypeException::INVALID_DATA_TYPE 66 | ); 67 | } 68 | 69 | return $value; 70 | } 71 | 72 | /** 73 | * The value of the PDF type. 74 | * 75 | * @var mixed 76 | */ 77 | public $value; 78 | } 79 | -------------------------------------------------------------------------------- /lib/Fpdi/PdfParser/Type/PdfTypeException.php: -------------------------------------------------------------------------------- 1 | // 4 | // available at https://github.com/JamesHeinrich/getID3 // 5 | // or https://www.getid3.org // 6 | // or http://getid3.sourceforge.net // 7 | // // 8 | // Please see readme.txt for more information // 9 | // /// 10 | ///////////////////////////////////////////////////////////////// 11 | 12 | namespace OCA\Metadata\GetID3; 13 | 14 | class getid3_exception extends \Exception 15 | { 16 | public $message; 17 | } 18 | -------------------------------------------------------------------------------- /lib/Listener/LoadSidebarListener.php: -------------------------------------------------------------------------------- 1 | addAllowedConnectDomain('https://nominatim.openstreetmap.org/'); 18 | $policy->addAllowedFrameDomain('https://www.openstreetmap.org/'); 19 | \OC::$server->getContentSecurityPolicyManager()->addDefaultPolicy($policy); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/Service/AcdsCategories.php: -------------------------------------------------------------------------------- 1 | parser = xml_parser_create('UTF-8'); 15 | xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0); 16 | xml_parser_set_option($this->parser, XML_OPTION_SKIP_WHITE, 0); 17 | xml_set_element_handler($this->parser, array($this, 'startElement'), array($this, 'endElement')); 18 | xml_set_character_data_handler($this->parser, array($this, 'charData')); 19 | } 20 | 21 | public function __destruct() { 22 | if (is_resource($this->parser)) { 23 | xml_parser_free($this->parser); 24 | } 25 | } 26 | 27 | public static function fromData($xml) { 28 | $obj = new AcdsCategories(); 29 | xml_parse($obj->parser, $xml, true); 30 | 31 | return $obj; 32 | } 33 | 34 | public function getArray() { 35 | return $this->data; 36 | } 37 | 38 | public function startElement($parser, $name, array $attributes) { 39 | if ($name === self::EL_CATEGORY) { 40 | $this->handleCurrent(); 41 | $this->text = null; 42 | $this->assigned = $attributes['Assigned']; 43 | } 44 | } 45 | 46 | public function endElement($parser, $name) { 47 | if ($name === self::EL_CATEGORY) { 48 | $this->handleCurrent(); 49 | $this->text = null; 50 | $this->assigned = ''; 51 | array_pop($this->path); 52 | } 53 | } 54 | 55 | public function charData($parser, $data) { 56 | $this->text .= $data; 57 | } 58 | 59 | protected function handleCurrent() { 60 | if ($this->text) { 61 | array_push($this->path, $this->text); 62 | 63 | if ($this->assigned === '1') { 64 | array_push($this->data, implode('/', $this->path)); 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /lib/Service/BmffParser.php: -------------------------------------------------------------------------------- 1 | 0) && ($current >= $limit)) { 12 | return; 13 | } 14 | 15 | $continue = $this->readBox($hnd, $current); 16 | } 17 | } 18 | 19 | private function readBox($hnd, &$current) { 20 | if (($boxSize = self::readInt($hnd, false)) === false) return false; 21 | if (($boxType = self::readString($hnd, 4)) === false) return false; 22 | 23 | if ($boxSize === 1) { 24 | if (($boxSize = self::readLong($hnd, false)) === false) return false; 25 | } 26 | 27 | $ret = $this->processBox($hnd, $boxType, $boxSize); 28 | 29 | if ($boxSize > 1) { 30 | $current += $boxSize; 31 | fseek($hnd, $current); 32 | 33 | } else { 34 | fseek($hnd, 0, SEEK_END); 35 | $current = ftell($hnd); 36 | } 37 | 38 | return $ret; 39 | } 40 | 41 | private function continueFullBox($hnd, &$version) { 42 | $version = self::readByte($hnd); 43 | self::readByte($hnd); 44 | self::readShort($hnd, false); 45 | } 46 | 47 | protected function processBox($hnd, $boxType, $boxSize) { 48 | switch ($boxType) { 49 | case 'meta': 50 | $this->continueFullBox($hnd, $version); 51 | $this->parseBmff($hnd, $boxSize); 52 | break; 53 | 54 | case 'iinf': 55 | $this->continueFullBox($hnd, $version); 56 | $entryCount = ($version === 0) ? self::readShort($hnd, false) : self::readInt($hnd, false); 57 | $current = ftell($hnd); 58 | for ($i = 0; $i < $entryCount; $i++) { 59 | $this->readBox($hnd, $current); 60 | } 61 | break; 62 | 63 | case 'infe': 64 | $this->continueFullBox($hnd, $version); 65 | if ($version >= 2) { 66 | $itemId = ($version === 2) ? self::readShort($hnd, false) : (($version === 3) ? self::readInt($hnd, false) : null); 67 | $itemProtIndex = self::readShort($hnd, false); 68 | $itemType = self::readString($hnd, 4); 69 | 70 | $this->processItemInfoBox($itemType, $itemId); 71 | } 72 | break; 73 | 74 | case 'iloc': 75 | $this->continueFullBox($hnd, $version); 76 | $offsetAndLengthSizes = self::readByte($hnd); 77 | $offsetSize = $offsetAndLengthSizes >> 4; 78 | $lengthSize = $offsetAndLengthSizes & 0xf; 79 | 80 | $baseOffsetAndIndexSizes = self::readByte($hnd); 81 | $baseOffsetSize = $baseOffsetAndIndexSizes >> 4; 82 | $indexSize = (($version === 1) || ($version === 2)) ? $baseOffsetAndIndexSizes & 0xf : 0; 83 | 84 | $itemCount = ($version < 2) ? self::readShort($hnd, false) : (($version === 2) ? self::readInt($hnd, false) : null); 85 | for ($i = 0; $i < $itemCount; $i++) { 86 | $itemId = ($version < 2) ? self::readShort($hnd, false) : self::readInt($hnd, false); 87 | 88 | if (($version === 1) || ($version === 2)) { 89 | self::readShort($hnd, false); 90 | } 91 | $dataReferenceIndex = self::readShort($hnd, false); 92 | $baseOffset = ($baseOffsetSize > 0) ? self::readN($hnd, $baseOffsetSize, false) : 0; 93 | $extentCount = self::readShort($hnd, false); 94 | for ($j = 0; $j < $extentCount; $j++) { 95 | if ($indexSize > 0) { 96 | fread($hnd, $indexSize); 97 | } 98 | $extentOffset = self::readN($hnd, $offsetSize, false); 99 | $extentLength = self::readN($hnd, $lengthSize, false); 100 | 101 | $this->processItemExtent($itemId, $baseOffset + $extentOffset, $extentLength); 102 | } 103 | } 104 | break; 105 | } 106 | } 107 | 108 | protected function processItemInfoBox($itemType, $itemId) { 109 | } 110 | 111 | protected function processItemExtent($itemId, $extentOffset, $extentLength) { 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /lib/Service/FileReader.php: -------------------------------------------------------------------------------- 1 | readHeic($hnd); 19 | 20 | return ($obj->exif) ? $obj : null; 21 | 22 | } finally { 23 | fclose($hnd); 24 | } 25 | } 26 | 27 | return null; 28 | } 29 | 30 | public function getExif() { 31 | return $this->exif; 32 | } 33 | 34 | private function readHeic($hnd) { 35 | $this->parseBmff($hnd); 36 | 37 | if ($this->exifOffset) { 38 | if ($stream = fopen('php://memory','rb+')) { 39 | try { 40 | fseek($hnd, $this->exifOffset + self::EXIF_HEADER_SIZE); 41 | stream_copy_to_stream($hnd, $stream, $this->exifLength - self::EXIF_HEADER_SIZE); 42 | $this->exif = exif_read_data($stream, 0, true); 43 | 44 | } finally { 45 | fclose($stream); 46 | } 47 | } 48 | } 49 | } 50 | 51 | protected function processBox($hnd, $boxType, $boxSize) { 52 | $ret = parent::processBox($hnd, $boxType, $boxSize); 53 | 54 | if ($this->exifOffset) { 55 | $ret = false; 56 | } 57 | 58 | return $ret; 59 | } 60 | 61 | protected function processItemInfoBox($itemType, $itemId) { 62 | $this->itemInfosSeen = true; 63 | 64 | if ($itemType === 'Exif') { 65 | $this->exifItemId = $itemId; 66 | 67 | if (array_key_exists($itemId, $this->itemExtents)) { 68 | $extent = $this->itemExtents[$itemId]; 69 | $this->exifOffset = $extent[0]; 70 | $this->exifLength = $extent[1]; 71 | } 72 | } 73 | } 74 | 75 | protected function processItemExtent($itemId, $extentOffset, $extentLength) { 76 | if ($this->itemInfosSeen) { 77 | if ($itemId === $this->exifItemId) { 78 | $this->exifOffset = $extentOffset; 79 | $this->exifLength = $extentLength; 80 | } 81 | 82 | } else { 83 | $this->itemExtents[$itemId] = array($extentOffset, $extentLength); 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /lib/Service/IptcMetadata.php: -------------------------------------------------------------------------------- 1 | 'title', 7 | '2#025' => 'subject', 8 | '2#040' => 'instructions', 9 | '2#055' => 'dateCreated', 10 | '2#080' => 'creator', 11 | '2#085' => 'authorsPosition', 12 | '2#090' => 'city', 13 | '2#095' => 'state', 14 | '2#101' => 'country', 15 | '2#105' => 'headline', 16 | '2#110' => 'credit', 17 | '2#115' => 'source', 18 | '2#116' => 'rights', 19 | '2#120' => 'description', 20 | '2#122' => 'captionWriter' 21 | ); 22 | 23 | private $data = array(); 24 | 25 | private function __construct($bin) { 26 | if ($iptc = iptcparse($bin)) { 27 | foreach (self::MAP as $k => $v) { 28 | if (array_key_exists($k, $iptc)) { 29 | $this->data[$v] = $iptc[$k]; 30 | } 31 | } 32 | } 33 | } 34 | 35 | public static function fromData($bin) { 36 | return new IptcMetadata($bin); 37 | } 38 | 39 | public function getArray() { 40 | return $this->data; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lib/Service/JpegMetadata.php: -------------------------------------------------------------------------------- 1 | readJpeg($hnd); 18 | 19 | return $obj; 20 | 21 | } finally { 22 | fclose($hnd); 23 | } 24 | } 25 | 26 | return null; 27 | } 28 | 29 | public function getIfd0() { 30 | return $this->ifd0; 31 | } 32 | 33 | public function getXmp() { 34 | return $this->xmp; 35 | } 36 | 37 | public function getIptc() { 38 | return $this->iptc; 39 | } 40 | 41 | public function getGps() { 42 | return $this->gps; 43 | } 44 | 45 | protected function readJpeg($hnd) { 46 | $data = fread($hnd, 2); 47 | 48 | if ($data === "\xFF\xD8") { // SOI (Start Of Image) 49 | $data = fread($hnd, 2); 50 | 51 | // While not EOF, tag is valid, and not SOS (Start Of Scan) or EOI (End Of Image) 52 | while (!feof($hnd) && ($data[0] === "\xFF") && ($data[1] !== "\xDA") && ($data[1] !== "\xD9")) { 53 | if ((ord($data[1]) < 0xD0) || (ord($data[1]) > 0xD7)) { // All segments but RSTn have size bytes 54 | $size = self::readShort($hnd, false) - 2; 55 | 56 | if ($size > 0) { 57 | $pos = ftell($hnd); 58 | $result = $this->processData($hnd, $data[1], $size); 59 | if ($result) { 60 | return $result; 61 | } 62 | 63 | fseek($hnd, $pos + $size); 64 | } 65 | } 66 | 67 | $data = fread($hnd, 2); 68 | } 69 | } 70 | } 71 | 72 | protected function processData($hnd, $marker, $size) { 73 | switch ($marker) { 74 | case self::APP1: 75 | $start = ftell($hnd); 76 | if ($this->tryXmp($hnd, $size)) { 77 | break; 78 | } 79 | fseek($hnd, $start); 80 | $this->tryExif($hnd, $size); 81 | break; 82 | 83 | case self::APP13: 84 | $iptcMetadata = IptcMetadata::fromData(fread($hnd, $size)); 85 | $this->iptc = $iptcMetadata->getArray(); 86 | break; 87 | } 88 | 89 | return null; 90 | } 91 | 92 | protected function tryXmp($hnd, $size) { 93 | if ($size > 29) { 94 | $data = fread($hnd, 29); 95 | $size -= 29; 96 | 97 | if ($data === 'http://ns.adobe.com/xap/1.0/' . "\x00") { 98 | $xmpMetadata = XmpMetadata::fromData(fread($hnd, $size)); 99 | $this->xmp = $xmpMetadata->getArray(); 100 | return true; 101 | } 102 | } 103 | 104 | return false; 105 | } 106 | 107 | protected function tryExif($hnd, $size) { 108 | if ($size > 14) { 109 | $data = fread($hnd, 6); 110 | 111 | if ($data === 'Exif'."\x00\x00") { 112 | $pos = ftell($hnd); 113 | $tiffMetadata = TiffMetadata::fromFileData($hnd, $pos); 114 | $this->ifd0 = $tiffMetadata->getIfd0(); 115 | $this->gps = $tiffMetadata->getGps(); 116 | return true; 117 | } 118 | } 119 | 120 | return false; 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /lib/Service/Metadata.php: -------------------------------------------------------------------------------- 1 | array = $array; 12 | $this->lat = $lat; 13 | $this->lon = $lon; 14 | $this->loc = $loc; 15 | } 16 | 17 | public function getArray() { 18 | return $this->array; 19 | } 20 | 21 | public function getLat() { 22 | return $this->lat; 23 | } 24 | 25 | public function getLon() { 26 | return $this->lon; 27 | } 28 | 29 | public function getLoc() { 30 | return $this->loc; 31 | } 32 | 33 | public function isEmpty() { 34 | return empty($this->array); 35 | } 36 | 37 | public function addVal($key, $val, $join = null, $sep = null) { 38 | if (is_array($val)) { 39 | if (isset($join)) { 40 | $val = join($join, $val); 41 | 42 | } else if (count($val) <= 1) { 43 | $val = array_pop($val); 44 | } 45 | } 46 | 47 | if (array_key_exists($key, $this->array)) { 48 | $prev = $this->array[$key]; 49 | 50 | if (isset($sep)) { 51 | if (substr($val, 0, strlen($prev)) !== $prev) { 52 | $val = $prev . $sep . $val; 53 | } 54 | 55 | } else { 56 | if (!is_array($prev)) { 57 | $prev = array($prev); 58 | } 59 | 60 | if (is_array($val)) { 61 | $val = array_merge($prev, $val); 62 | 63 | } else { 64 | $prev[] = $val; 65 | $val = $prev; 66 | } 67 | } 68 | } 69 | 70 | $this->array[$key] = $val; 71 | } 72 | 73 | public function dump(&$data, $prefix = '') { 74 | foreach ($data as $key => $val) { 75 | if (is_array($val)) { 76 | $this->dump($val, $prefix . $key . '.'); 77 | 78 | } else { 79 | $this->addVal($prefix . utf8_encode($key), utf8_encode($val)); 80 | } 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /lib/Service/TiffMetadata.php: -------------------------------------------------------------------------------- 1 | parseTiff($hnd, 0); 20 | 21 | return $obj; 22 | 23 | } finally { 24 | fclose($hnd); 25 | } 26 | } 27 | 28 | return null; 29 | } 30 | 31 | public static function fromFileData($hnd, $pos) { 32 | $obj = new TiffMetadata(); 33 | $obj->parseTiff($hnd, $pos); 34 | 35 | return $obj; 36 | } 37 | 38 | public function getIfd0() { 39 | return $this->ifd0; 40 | } 41 | 42 | public function getXmp() { 43 | return $this->xmp; 44 | } 45 | 46 | public function getIptc() { 47 | return $this->iptc; 48 | } 49 | 50 | public function getGps() { 51 | return $this->gps; 52 | } 53 | 54 | protected function processTag($hnd, $pos, $intel, $tagId, $tagType, $count, $size, $offsetOrData) { 55 | switch ($tagId) { 56 | case self::RATING: 57 | $this->ifd0['Rating'] = $offsetOrData; 58 | break; 59 | 60 | case self::XMP: 61 | fseek($hnd, $offsetOrData); // Go to XMP 62 | $xmpMetadata = XmpMetadata::fromData(fread($hnd, $size)); 63 | $this->xmp = $xmpMetadata->getArray(); 64 | break; 65 | 66 | case self::IPTC: 67 | fseek($hnd, $offsetOrData); // Go to IPTC 68 | $iptcMetadata = IptcMetadata::fromData(fread($hnd, $size)); 69 | $this->iptc = $iptcMetadata->getArray(); 70 | break; 71 | 72 | case self::GPS: 73 | $gpsParser = new class() extends TiffParser { 74 | public $gps = array(); 75 | 76 | protected function processTag($hnd, $pos, $intel, $tagId, $tagType, $count, $size, $offsetOrData) { 77 | switch ($tagId) { 78 | case 0x01: 79 | $this->gps['GPSLatitudeRef'] = $offsetOrData; 80 | break; 81 | case 0x02: 82 | fseek($hnd, $pos + $offsetOrData); 83 | $this->gps['GPSLatitude'] = array(self::readRat($hnd, $intel), self::readRat($hnd, $intel), self::readRat($hnd, $intel)); 84 | break; 85 | case 0x03: 86 | $this->gps['GPSLongitudeRef'] = $offsetOrData; 87 | break; 88 | case 0x04: 89 | fseek($hnd, $pos + $offsetOrData); 90 | $this->gps['GPSLongitude'] = array(self::readRat($hnd, $intel), self::readRat($hnd, $intel), self::readRat($hnd, $intel)); 91 | break; 92 | case 0x05: 93 | $this->gps['GPSAltitudeRef'] = $offsetOrData; 94 | break; 95 | case 0x06: 96 | fseek($hnd, $pos + $offsetOrData); 97 | $this->gps['GPSAltitude'] = self::readRat($hnd, $intel); 98 | break; 99 | } 100 | } 101 | }; 102 | $gpsParser->parseTiffIfd($hnd, $pos, $intel, $offsetOrData); 103 | $this->gps=$gpsParser->gps; 104 | break; 105 | } 106 | 107 | return null; 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /lib/Service/TiffParser.php: -------------------------------------------------------------------------------- 1 | parseTiffIfd($hnd, $pos, $intel, $ifdOffs); 26 | } 27 | } 28 | 29 | public function parseTiffIfd($hnd, $pos, $intel, $ifdOffs) { 30 | while (!feof($hnd) && ($ifdOffs !== 0)) { 31 | fseek($hnd, $pos + $ifdOffs); // Go to IFD 32 | $tagCnt = self::readShort($hnd, $intel); 33 | 34 | for ($i = 0; $i < $tagCnt; $i++) { 35 | $tagId = self::readShort($hnd, $intel); 36 | $tagType = self::readShort($hnd, $intel); 37 | $count = self::readInt($hnd, $intel); 38 | $offsetOrData = fread($hnd, 4); 39 | $size = -1; 40 | switch ($tagType) { 41 | case self::BYTE: 42 | case self::SBYTE: 43 | case self::UNDEFINED: 44 | $size = $count; 45 | if ($size <= 4) { 46 | $offsetOrData = substr($offsetOrData, 0, $size); 47 | } 48 | break; 49 | case self::ASCII: 50 | $size = $count; 51 | if ($size <= 4) { 52 | $offsetOrData = substr($offsetOrData, 0, $size - 1); 53 | } 54 | break; 55 | case self::SHORT: 56 | case self::SSHORT: 57 | $size = $count * 2; 58 | if ($size <= 4) { 59 | $offsetOrData = substr($offsetOrData, 0, $size); 60 | if ($count === 1) { 61 | $offsetOrData = self::unpackShort($intel, $offsetOrData); 62 | } else if ($count === 2) { 63 | $f = $intel? 'v' : 'n'; 64 | $d = unpack($f.'a/'.$f.'b', $offsetOrData); 65 | $offsetOrData = array($d['a'], $d['b']); 66 | } 67 | } 68 | break; 69 | case self::LONG: 70 | case self::SLONG: 71 | $size = $count * 4; 72 | if ($size <= 4) { 73 | $offsetOrData = self::unpackInt($intel, $offsetOrData); 74 | } 75 | break; 76 | case self::RATIONAL: 77 | case self::SRATIONAL: 78 | $size = $count * 8; 79 | break; 80 | } 81 | if ($size > 4) { 82 | $offsetOrData = self::unpackInt($intel, $offsetOrData); 83 | } 84 | 85 | if ($size > 0) { 86 | $curr = ftell($hnd); 87 | 88 | $result = $this->processTag($hnd, $pos, $intel, $tagId, $tagType, $count, $size, $offsetOrData); 89 | if ($result) { 90 | return $result; 91 | } 92 | 93 | fseek($hnd, $curr); 94 | } 95 | } 96 | 97 | $ifdOffs = self::readInt($hnd, $intel); 98 | if (($ifdOffs !== 0) && ($ifdOffs < ftell($hnd))) { // Never go back 99 | $ifdOffs = 0; 100 | } 101 | } 102 | 103 | return null; 104 | } 105 | 106 | protected function processTag($hnd, $pos, $intel, $tagId, $tagType, $count, $size, $offsetOrData) { 107 | return null; 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /screenshots/jpg-metadata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/screenshots/jpg-metadata.png -------------------------------------------------------------------------------- /tests/files/IMG_20170626_181110.heic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/IMG_20170626_181110.heic -------------------------------------------------------------------------------- /tests/files/IMG_20170626_181110.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/IMG_20170626_181110.jpg -------------------------------------------------------------------------------- /tests/files/IMG_20170626_181110_XMP.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/IMG_20170626_181110_XMP.jpg -------------------------------------------------------------------------------- /tests/files/IMG_20170626_181110_XMP.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/IMG_20170626_181110_XMP.tif -------------------------------------------------------------------------------- /tests/files/acdsee.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/acdsee.jpg -------------------------------------------------------------------------------- /tests/files/canon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/canon.jpg -------------------------------------------------------------------------------- /tests/files/iptc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/iptc.jpg -------------------------------------------------------------------------------- /tests/files/sample.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/sample.flac -------------------------------------------------------------------------------- /tests/files/sample.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/sample.ogg -------------------------------------------------------------------------------- /tests/files/sample.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/sample.wav -------------------------------------------------------------------------------- /tests/files/sample.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/sample.zip -------------------------------------------------------------------------------- /tests/files/sample_id3v1_id3v23.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/sample_id3v1_id3v23.mp3 -------------------------------------------------------------------------------- /tests/files/sampleunsecuredpdf.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/sampleunsecuredpdf.pdf -------------------------------------------------------------------------------- /tests/files/viagem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gino0631/nextcloud-metadata/0b88cc9468e68cfc5a3072efb5ab1ebcf815157f/tests/files/viagem.jpg -------------------------------------------------------------------------------- /tests/phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | . 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tests/travis_nextcloud_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Try to use automatic error detection 4 | set -e 5 | 6 | # Get script arguments 7 | WORKDIR=$PWD 8 | APP_NAME=$1 9 | CORE_BRANCH=$2 10 | DB=$3 11 | echo "Work directory: $WORKDIR" 12 | echo "Database: $DB" 13 | 14 | # Clone Nextcloud and copy the app 15 | cd .. 16 | git clone --recursive --depth 1 -b $CORE_BRANCH https://github.com/nextcloud/server 17 | cd server 18 | cp -R $WORKDIR apps/$APP_NAME 19 | 20 | # Configure DB 21 | case $DB in 22 | pgsql) 23 | psql -c "CREATE USER nc_autotest WITH LOGIN SUPERUSER PASSWORD 'nc_autotest'" 24 | ;; 25 | 26 | *) 27 | echo "Unsupported database $DB" >&2 28 | exit 1 29 | ;; 30 | esac 31 | 32 | # Install Nextcloud 33 | php -f occ maintenance:install --database $DB --database-name nc_autotest --database-user nc_autotest --database-pass nc_autotest --admin-user admin --admin-pass admin 34 | 35 | # Show status and enable the app 36 | ./occ check 37 | ./occ status 38 | ./occ app:enable $APP_NAME 39 | ./occ app:list 40 | --------------------------------------------------------------------------------