msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
- "POT-Creation-Date: 2012-12-18 10:57+0100\n"
- "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2013-01-01 10:34+0100\n"
++"POT-Creation-Date: 2013-01-08 09:27+0100\n"
+ "PO-Revision-Date: 2012-12-22 21:24+0100\n"
+ "Last-Translator: Patrik Tschudin <patsch@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
- "Language: \n"
+ "Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: models/core.py:150
msgid "Enter a valid duration in HH:MM[:ss] format."
- msgstr ""
+ msgstr "Gültige Dauer eingeben im Format HH:MM[:ss]"
--#: models/enum.py:41 models/enum.py:139 models/media.py:513
++#: models/enum.py:41 models/enum.py:139 models/media.py:546
#: models/system.py:103
msgid "value"
- msgstr ""
+ msgstr "Wert"
--#: models/enum.py:57 models/media.py:228
++#: models/enum.py:57 models/media.py:242
msgid "archive format"
- msgstr ""
+ msgstr "Archivformat"
--#: models/enum.py:64 models/media.py:210
++#: models/enum.py:64 models/media.py:224
msgid "secondary edition"
- msgstr ""
+ msgstr "Sekundäredition"
--#: models/enum.py:71 models/media.py:204
++#: models/enum.py:71 models/media.py:218
msgid "mode of acquisition"
- msgstr ""
+ msgstr "Art und Weise des Erhalts"
--#: models/enum.py:78 models/media.py:207
++#: models/enum.py:78 models/media.py:221
msgid "record author"
- msgstr ""
+ msgstr "AutorIn des Eintrags"
--#: models/enum.py:85 models/media.py:214
++#: models/enum.py:85 models/media.py:228
msgid "record writer"
- msgstr ""
+ msgstr "ErfasserIn des Eintrags"
--#: models/enum.py:92 models/media.py:200
++#: models/enum.py:92 models/media.py:214
msgid "legal rights"
- msgstr ""
+ msgstr "Urheberrechte"
--#: models/enum.py:99 models/media.py:179
++#: models/enum.py:99 models/media.py:193
msgid "recording context"
- msgstr ""
+ msgstr "Aufnahmekontext"
#: models/enum.py:106
msgid "A/D conversion"
- msgstr ""
+ msgstr "A/D Umwandlung"
--#: models/enum.py:113 models/media.py:344
++#: models/enum.py:113 models/media.py:358
msgid "vernacular style"
- msgstr ""
+ msgstr "umgangssprachliche Bezeichnung"
--#: models/enum.py:120 models/media.py:346
++#: models/enum.py:120 models/media.py:360
msgid "generic style"
- msgstr ""
+ msgstr "allgemeine Bezeichnung"
--#: models/enum.py:127 models/media.py:484
++#: models/enum.py:127 models/media.py:517
msgid "keyword"
- msgstr ""
+ msgstr "Schlüsselwort"
--#: models/enum.py:134 models/media.py:190
++#: models/enum.py:134 models/media.py:204
msgid "publisher / status"
- msgstr ""
+ msgstr "HerausgeberIn / Status"
#: models/enum.py:138
msgid "publisher"
- msgstr ""
+ msgstr "HerausgeberIn"
--#: models/enum.py:153 models/enum.py:157 models/media.py:334
++#: models/enum.py:153 models/enum.py:157 models/media.py:348
msgid "population / social group"
- msgstr ""
+ msgstr "Bevölkerung / soziale Gruppe"
#: models/enum.py:158 models/instrument.py:43 models/instrument.py:53
#: models/language.py:54 models/location.py:51 models/location.py:158
--#: models/media.py:512
++#: models/media.py:545
msgid "name"
- msgstr ""
+ msgstr "Name"
#: models/enum.py:172 models/format.py:77
msgid "tape wheel diameter (cm)"
#: models/enum.py:207 models/format.py:71
msgid "number of channels"
- msgstr ""
+ msgstr "Anzahl Kanäle"
--#: models/enum.py:214 models/media.py:351
++#: models/enum.py:214 models/media.py:365
msgid "organization"
- msgstr ""
+ msgstr "Organisation"
--#: models/enum.py:221 models/media.py:355
++#: models/enum.py:221 models/media.py:369
msgid "rights"
- msgstr ""
+ msgstr "Rechte"
--#: models/enum.py:228 models/media.py:325
++#: models/enum.py:228 models/media.py:339
msgid "topic"
- msgstr ""
+ msgstr "Thema"
--#: models/format.py:58 models/media.py:414 models/media.py:473
--#: models/media.py:483 models/media.py:494 models/media.py:510
--#: models/media.py:531 models/media.py:577 models/media.py:598
++#: models/format.py:58 models/media.py:427 models/media.py:486
++#: models/media.py:516 models/media.py:527 models/media.py:543
++#: models/media.py:564 models/media.py:610 models/media.py:635
++#: models/media.py:669
msgid "item"
- msgstr ""
+ msgstr "Element"
#: models/format.py:61
msgid "physical format"
- msgstr ""
+ msgstr "physisches Format"
--#: models/format.py:62 models/media.py:359
++#: models/format.py:62 models/media.py:373
msgid "original code"
- msgstr ""
+ msgstr "ursprünglicher Code"
#: models/format.py:63
msgid "original number"
#: models/language.py:53 models/location.py:52
msgid "type"
- msgstr ""
+ msgstr "Typus"
--#: models/language.py:55 models/media.py:212
++#: models/language.py:55 models/media.py:226
msgid "comment"
- msgstr ""
+ msgstr "Kommentar"
#: models/language.py:63
msgid "languages"
#: models/location.py:58 models/location.py:172 models/location.py:188
msgid "authoritative"
- msgstr ""
+ msgstr "massgebend"
#: models/location.py:112 models/location.py:170 models/location.py:185
--#: models/media.py:330
++#: models/media.py:344
msgid "location"
- msgstr ""
+ msgstr "Ort"
#: models/location.py:113
msgid "locations"
#: models/location.py:194
msgid "location relations"
- msgstr ""
+ msgstr "Ortsbeziehungen"
--#: models/media.py:64
++#: models/media.py:65
msgid "none"
- msgstr ""
+ msgstr "nichts"
--#: models/media.py:64
++#: models/media.py:65
msgid "metadata"
- msgstr ""
+ msgstr "Metadaten"
--#: models/media.py:65
++#: models/media.py:66
msgid "partial"
- msgstr ""
+ msgstr "unvollständig"
--#: models/media.py:65
++#: models/media.py:66
msgid "full"
-#: models/media.py:75
+ msgstr "vollständig"
+
- #: models/media.py:75
- msgid "Metadata only"
++#: models/media.py:68
++msgid "broken"
+msgstr ""
+
- #: models/media.py:77
- msgid "Sound and metadata"
++#: models/media.py:68
++msgid "pending"
+msgstr ""
+
- #: models/media.py:79
- msgid "Private data"
++#: models/media.py:68
++msgid "processing"
+msgstr ""
+
- #: models/media.py:80 models/media.py:100 models/media.py:197
- #: models/media.py:352
- msgid "public access"
++#: models/media.py:69
++msgid "done"
+msgstr ""
+
- #: models/media.py:96 models/media.py:126 models/media.py:175
- #: models/media.py:317 models/media.py:532 models/media.py:548
- #: models/media.py:580
++#: models/media.py:69
++msgid "ready"
+msgstr ""
+
-#: models/media.py:77
++#: models/media.py:86
+ msgid "Metadata only"
+ msgstr "nur Metadaten"
+
-#: models/media.py:79
++#: models/media.py:88
+ msgid "Sound and metadata"
+ msgstr "Ton und Metadaten"
+
-#: models/media.py:80 models/media.py:100 models/media.py:197
-#: models/media.py:352
++#: models/media.py:90
+ msgid "Private data"
+ msgstr "private Daten"
+
-#: models/media.py:96 models/media.py:126 models/media.py:175
-#: models/media.py:317 models/media.py:532 models/media.py:548
-#: models/media.py:580
++#: models/media.py:91 models/media.py:111 models/media.py:211
++#: models/media.py:366
+ msgid "public access"
+ msgstr "öffentlich zugänglich"
+
++#: models/media.py:107 models/media.py:137 models/media.py:189
++#: models/media.py:331 models/media.py:565 models/media.py:581
++#: models/media.py:613
msgid "title"
- msgstr ""
+ msgstr "Titel"
--#: models/media.py:97 models/media.py:128 models/media.py:549
--#: models/media.py:582
++#: models/media.py:108 models/media.py:139 models/media.py:582
++#: models/media.py:615
msgid "description"
- msgstr ""
+ msgstr "Beschreibung"
--#: models/media.py:98 models/media.py:222 models/media.py:358
++#: models/media.py:109 models/media.py:236 models/media.py:372
msgid "code"
- msgstr ""
+ msgstr "Code"
--#: models/media.py:99 models/media.py:174
++#: models/media.py:110 models/media.py:188
msgid "reference"
- msgstr ""
+ msgstr "Referenz"
--#: models/media.py:127 models/media.py:581 models/media.py:600
--#: models/system.py:115
++#: models/media.py:138 models/media.py:614 models/media.py:637
++#: models/media.py:671 models/system.py:115
msgid "date"
- msgstr ""
+ msgstr "Datum"
--#: models/media.py:129 models/media.py:599
++#: models/media.py:140 models/media.py:636 models/media.py:670
msgid "mime_type"
- msgstr ""
+ msgstr "mime_type"
--#: models/media.py:130
++#: models/media.py:141
msgid "url"
- msgstr ""
+ msgstr "url"
--#: models/media.py:131
++#: models/media.py:142
msgid "credits"
- msgstr ""
+ msgstr "Mithilfe"
--#: models/media.py:132 models/media.py:375
++#: models/media.py:143 models/media.py:389 models/media.py:639
msgid "file"
- msgstr ""
+ msgstr "Datei"
--#: models/media.py:176 models/media.py:318
++#: models/media.py:190 models/media.py:332
msgid "original title / translation"
- msgstr ""
+ msgstr "Oritinaltitel / Übersetzung"
--#: models/media.py:177
++#: models/media.py:191
msgid "depositor / contributor"
- msgstr ""
+ msgstr "HinterlegerIn / Zulieferde(r)"
--#: models/media.py:180 models/media.py:682
++#: models/media.py:194 models/media.py:753
msgid "recording year (from)"
- msgstr ""
+ msgstr "Aufnahmejahr (ab)"
--#: models/media.py:181 models/media.py:683
++#: models/media.py:195 models/media.py:754
msgid "recording year (until)"
- msgstr ""
+ msgstr "Aufnahmejahr (bis)"
--#: models/media.py:182
++#: models/media.py:196
msgid "year published"
- msgstr ""
+ msgstr "Publikationsjahr"
--#: models/media.py:188 models/media.py:361
++#: models/media.py:202 models/media.py:375
msgid "recordist"
- msgstr ""
+ msgstr "TonmeisterIn"
--#: models/media.py:192
++#: models/media.py:206
msgid "publisher collection"
- msgstr ""
+ msgstr "Sammlung von HerausgeberIn"
--#: models/media.py:193
++#: models/media.py:207
msgid "publisher serial number"
- msgstr ""
+ msgstr "Seriennummer von HerausgeberIn"
--#: models/media.py:194
++#: models/media.py:208
msgid "author of published notice"
- msgstr ""
+ msgstr "AutorIn des publizierten Kommentars"
--#: models/media.py:195
++#: models/media.py:209
msgid "bibliographic references"
- msgstr ""
+ msgstr "bibliographische Referenz"
--#: models/media.py:196
++#: models/media.py:210
msgid "document type"
- msgstr ""
+ msgstr "Dokumententypus"
--#: models/media.py:205
++#: models/media.py:219
msgid "CNRS depositor"
- msgstr ""
+ msgstr "CNRS HinterlegerIn"
--#: models/media.py:208
++#: models/media.py:222
msgid "related documentation"
- msgstr ""
+ msgstr "verwandte Dokumentation"
--#: models/media.py:211
++#: models/media.py:225
msgid "copies"
- msgstr ""
+ msgstr "Kopien"
--#: models/media.py:215
++#: models/media.py:229
msgid "archiver notes"
- msgstr ""
+ msgstr "Kommentar von ArchivarIn"
--#: models/media.py:216
++#: models/media.py:230
msgid "items finished"
- msgstr ""
+ msgstr "abgeschlossene Elemente"
--#: models/media.py:217
++#: models/media.py:231
msgid "recordist identical to depositor"
- msgstr ""
+ msgstr "TonmeisterIn ist identisch mit HinterlegerIn"
--#: models/media.py:218
++#: models/media.py:232
msgid "published"
- msgstr ""
+ msgstr "publiziert"
--#: models/media.py:219
++#: models/media.py:233
msgid "conservation site"
- msgstr ""
+ msgstr "Konservierungsort"
--#: models/media.py:224
++#: models/media.py:238
msgid "old code"
- msgstr ""
+ msgstr "alter Code"
--#: models/media.py:225 models/media.py:379
++#: models/media.py:239 models/media.py:393
msgid "approximative duration"
- msgstr ""
+ msgstr "ungefähre Dauer"
--#: models/media.py:226
++#: models/media.py:240
msgid "number of components (medium / piece)"
- msgstr ""
+ msgstr "Anzahl Komponenten (Medium / Teil)"
--#: models/media.py:230
++#: models/media.py:244
msgid "digitization"
- msgstr ""
+ msgstr "Digitalisierung"
--#: models/media.py:231
++#: models/media.py:245 models/media.py:638
msgid "status"
- msgstr ""
+ msgstr "Status"
--#: models/media.py:232
++#: models/media.py:246
msgid "a_informer_07_03"
- msgstr ""
+ msgstr "a_informer_07_03"
--#: models/media.py:267
++#: models/media.py:281
msgid "states / nations"
- msgstr ""
+ msgstr "Staaten / Nationen"
--#: models/media.py:281
++#: models/media.py:295
msgid "populations / social groups"
- msgstr ""
+ msgstr "Bevölkerungen / soziale Gruppen"
--#: models/media.py:289 models/media.py:440
++#: models/media.py:303 models/media.py:453
msgid "computed duration"
- msgstr ""
+ msgstr "berechnete Dauer"
--#: models/media.py:297 models/media.py:303 models/media.py:320
++#: models/media.py:311 models/media.py:317 models/media.py:334
msgid "collection"
- msgstr ""
+ msgstr "Sammlung"
--#: models/media.py:307 models/media.py:308
++#: models/media.py:321 models/media.py:322
msgid "collection related media"
- msgstr ""
+ msgstr "zur Sammlung gehörende Medien"
--#: models/media.py:321
++#: models/media.py:335
msgid "recording date (from)"
- msgstr ""
+ msgstr "Aufnahmedatum (von)"
--#: models/media.py:322
++#: models/media.py:336
msgid "recording date (until)"
- msgstr ""
+ msgstr "Aufnahmedatum (bis)"
--#: models/media.py:324
++#: models/media.py:338
msgid "scientist"
- msgstr ""
+ msgstr "WissenschaftlerIn"
--#: models/media.py:326
++#: models/media.py:340
msgid "summary"
- msgstr ""
+ msgstr "Zusammenfassung"
--#: models/media.py:327
++#: models/media.py:341
msgid "remarks"
- msgstr ""
+ msgstr "Bemerkungen"
--#: models/media.py:331
++#: models/media.py:345
msgid "location details"
- msgstr ""
+ msgstr "Einzelheiten zum Ort"
--#: models/media.py:332
++#: models/media.py:346
msgid "cultural area"
- msgstr ""
+ msgstr "Kulturraum"
--#: models/media.py:335
++#: models/media.py:349
msgid "language"
- msgstr ""
+ msgstr "Sprache"
--#: models/media.py:337
++#: models/media.py:351
msgid "ISO language"
- msgstr ""
+ msgstr "ISO Sprache"
--#: models/media.py:339
++#: models/media.py:353
msgid "comments / ethnographic context"
- msgstr ""
+ msgstr "Kommentare / ethnographischer Kontext"
--#: models/media.py:340
++#: models/media.py:354
msgid "moda_execut"
- msgstr ""
+ msgstr "moda_execut"
--#: models/media.py:347
++#: models/media.py:361
msgid "author / compositor"
- msgstr ""
+ msgstr "AutorIn / KomponistIn"
--#: models/media.py:348
++#: models/media.py:362
msgid "contributor"
- msgstr ""
+ msgstr "Mitwirkende(r)"
--#: models/media.py:354
++#: models/media.py:368
msgid "depositor"
- msgstr ""
+ msgstr "HinterlegerIn"
--#: models/media.py:360
++#: models/media.py:374
msgid "item number"
- msgstr ""
+ msgstr "Nummer des Elements"
--#: models/media.py:362
++#: models/media.py:376
msgid "digitalist"
- msgstr ""
+ msgstr "DigitalisiererIn"
--#: models/media.py:363
++#: models/media.py:377
msgid "collector"
- msgstr ""
+ msgstr "SammlerIn"
--#: models/media.py:364
++#: models/media.py:378
msgid "collector selection"
- msgstr ""
+ msgstr "Auswahl von SammlerIn"
--#: models/media.py:365
++#: models/media.py:379
msgid "collector as in collection"
- msgstr ""
+ msgstr "SammlerIn gleich wie bei Sammlung"
--#: models/media.py:366
++#: models/media.py:380
msgid "digitization date"
- msgstr ""
+ msgstr "Datum der Digitalisierung"
--#: models/media.py:367
++#: models/media.py:381
msgid "publishing date"
- msgstr ""
+ msgstr "Datum der Publikation"
--#: models/media.py:368
++#: models/media.py:382
msgid "creator reference"
- msgstr ""
+ msgstr "Referenz von ErzeugerIn"
--#: models/media.py:369
++#: models/media.py:383
msgid "published references"
- msgstr ""
+ msgstr "publizierte Referenzen"
--#: models/media.py:371
++#: models/media.py:385
msgid "copy of"
- msgstr ""
+ msgstr "Kopie von"
--#: models/media.py:372
++#: models/media.py:386
msgid "mime type"
- msgstr "type mime"
-msgstr "mime type"
++msgstr "mots clés"
--#: models/media.py:386 templates/telemeta/mediaitem_edit.html:47
++#: models/media.py:400 templates/telemeta/mediaitem_edit.html:47
msgid "keywords"
- msgstr "mots clés"
+ msgstr "Schlüsselwörter"
--#: models/media.py:467
++#: models/media.py:480
msgid "instruments"
- msgstr ""
+ msgstr "Instrumente"
--#: models/media.py:477 models/media.py:478
++#: models/media.py:510 models/media.py:511
msgid "item related media"
- msgstr ""
+ msgstr "zum Element gehörende Medien"
--#: models/media.py:496
++#: models/media.py:529
msgid "composition"
- msgstr ""
+ msgstr "Komposition"
--#: models/media.py:498
++#: models/media.py:531
msgid "vernacular name"
- msgstr ""
+ msgstr "umgangssprachlicher Name"
--#: models/media.py:499
++#: models/media.py:532
msgid "number"
- msgstr ""
+ msgstr "Nummer"
--#: models/media.py:500
++#: models/media.py:533
msgid "interprets"
- msgstr ""
+ msgstr "InterpretInnen"
--#: models/media.py:511
++#: models/media.py:544
msgid "id"
- msgstr ""
+ msgstr "id"
--#: models/media.py:514
++#: models/media.py:547
msgid "unit"
- msgstr ""
+ msgstr "Einheit"
--#: models/media.py:533
++#: models/media.py:566
msgid "start"
- msgstr ""
+ msgstr "Start"
--#: models/media.py:534
++#: models/media.py:567
msgid "end"
- msgstr ""
+ msgstr "Ende"
--#: models/media.py:538
++#: models/media.py:571
msgid "item part"
- msgstr ""
+ msgstr "Elementteil"
--#: models/media.py:546 models/media.py:563 models/media.py:578
++#: models/media.py:579 models/media.py:596 models/media.py:611
msgid "public_id"
- msgstr ""
+ msgstr "public_id"
--#: models/media.py:564
++#: models/media.py:597
msgid "playlist"
- msgstr ""
+ msgstr "Wiedergabeliste"
--#: models/media.py:565
++#: models/media.py:598
msgid "resource_type"
- msgstr ""
+ msgstr "resource_type"
--#: models/media.py:566
++#: models/media.py:599
msgid "resource_id"
- msgstr ""
+ msgstr "resource_id"
--#: models/media.py:579 models/system.py:55
--msgid "time"
- msgstr ""
++#: models/media.py:612
++#, fuzzy
++msgid "time (s)"
+ msgstr "Zeit"
--#: models/media.py:583
++#: models/media.py:616
msgid "author"
- msgstr ""
+ msgstr "AutorIn"
--#: models/media.py:601
++#: models/media.py:672
msgid "transcoded"
- msgstr ""
+ msgstr "umgewandelt"
--#: models/media.py:681
++#: models/media.py:752
msgid "collections"
- msgstr ""
+ msgstr "Sammlungen"
--#: models/media.py:693 models/media.py:694 models/media.py:704
--#: models/media.py:721
++#: models/media.py:764 models/media.py:765 models/media.py:775
++#: models/media.py:792
msgid "corpus"
- msgstr ""
+ msgstr "Korpus"
--#: models/media.py:714 models/media.py:715 models/media.py:732
++#: models/media.py:785 models/media.py:786 models/media.py:803
msgid "fonds"
- msgstr ""
+ msgstr "Fonds"
--#: models/media.py:725 models/media.py:726
++#: models/media.py:796 models/media.py:797
msgid "corpus related media"
- msgstr ""
+ msgstr "zum Korpus gehörende Medien"
--#: models/media.py:736 models/media.py:737
++#: models/media.py:807 models/media.py:808
msgid "fonds related media"
- msgstr ""
+ msgstr "zum Fonds gehörende Medien"
#: models/system.py:52
msgid "element type"
#: models/system.py:54
msgid "modification type"
- msgstr ""
+ msgstr "Veränderungstyp"
+
++#: models/system.py:55
++msgid "time"
++msgstr "Zeit"
+
#: models/system.py:56
msgid "user"
- msgstr ""
+ msgstr "Benutzer"
#: models/system.py:85 templates/telemeta/profile_detail.html:43
msgid "Institution"
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
- "POT-Creation-Date: 2012-12-18 10:57+0100\n"
- "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"POT-Creation-Date: 2013-01-01 10:34+0100\n"
++"POT-Creation-Date: 2013-01-08 09:27+0100\n"
+ "PO-Revision-Date: 2012-12-19 08:20+0100\n"
+ "Last-Translator: Patrik Tschudin <patsch@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
- "POT-Creation-Date: 2012-12-18 10:57+0100\n"
-"POT-Creation-Date: 2013-01-01 10:34+0100\n"
++"POT-Creation-Date: 2013-01-08 09:27+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Guillaume Pellerin <yomguy@parisson.com>\n"
"Language-Team: LANGUAGE <dev@parisson.com>\n"
msgid "Enter a valid duration in HH:MM[:ss] format."
msgstr "Entrez une durée valide au format HH:MM[:ss]"
--#: models/enum.py:41 models/enum.py:139 models/media.py:513
++#: models/enum.py:41 models/enum.py:139 models/media.py:546
#: models/system.py:103
msgid "value"
msgstr "valeur"
--#: models/enum.py:57 models/media.py:228
++#: models/enum.py:57 models/media.py:242
msgid "archive format"
msgstr "format du support"
--#: models/enum.py:64 models/media.py:210
++#: models/enum.py:64 models/media.py:224
msgid "secondary edition"
msgstr "réédition"
--#: models/enum.py:71 models/media.py:204
++#: models/enum.py:71 models/media.py:218
msgid "mode of acquisition"
msgstr "mode d'acquisition"
--#: models/enum.py:78 models/media.py:207
++#: models/enum.py:78 models/media.py:221
msgid "record author"
msgstr "rédacteur fiche"
--#: models/enum.py:85 models/media.py:214
++#: models/enum.py:85 models/media.py:228
msgid "record writer"
msgstr "saisie fiche"
--#: models/enum.py:92 models/media.py:200
++#: models/enum.py:92 models/media.py:214
msgid "legal rights"
msgstr "droit d'utilisation"
--#: models/enum.py:99 models/media.py:179
++#: models/enum.py:99 models/media.py:193
msgid "recording context"
msgstr "contexte d'enregistrement"
msgid "A/D conversion"
msgstr "Conversion A/N"
--#: models/enum.py:113 models/media.py:344
++#: models/enum.py:113 models/media.py:358
msgid "vernacular style"
msgstr "style vernaculaire"
--#: models/enum.py:120 models/media.py:346
++#: models/enum.py:120 models/media.py:360
msgid "generic style"
msgstr "style générique"
--#: models/enum.py:127 models/media.py:484
++#: models/enum.py:127 models/media.py:517
msgid "keyword"
msgstr "Mot-clé"
--#: models/enum.py:134 models/media.py:190
++#: models/enum.py:134 models/media.py:204
msgid "publisher / status"
msgstr "éditeur / statut"
msgid "publisher"
msgstr "éditeur"
--#: models/enum.py:153 models/enum.py:157 models/media.py:334
++#: models/enum.py:153 models/enum.py:157 models/media.py:348
msgid "population / social group"
msgstr "population / groupe social"
#: models/enum.py:158 models/instrument.py:43 models/instrument.py:53
#: models/language.py:54 models/location.py:51 models/location.py:158
--#: models/media.py:512
++#: models/media.py:545
msgid "name"
msgstr "nom"
msgid "number of channels"
msgstr "Nombre de pistes"
--#: models/enum.py:214 models/media.py:351
++#: models/enum.py:214 models/media.py:365
msgid "organization"
msgstr "organisation"
--#: models/enum.py:221 models/media.py:355
++#: models/enum.py:221 models/media.py:369
msgid "rights"
msgstr "droits"
--#: models/enum.py:228 models/media.py:325
++#: models/enum.py:228 models/media.py:339
msgid "topic"
msgstr "discipline"
--#: models/format.py:58 models/media.py:414 models/media.py:473
--#: models/media.py:483 models/media.py:494 models/media.py:510
--#: models/media.py:531 models/media.py:577 models/media.py:598
++#: models/format.py:58 models/media.py:427 models/media.py:486
++#: models/media.py:516 models/media.py:527 models/media.py:543
++#: models/media.py:564 models/media.py:610 models/media.py:635
++#: models/media.py:669
msgid "item"
msgstr "item"
msgid "physical format"
msgstr "nature du support original"
--#: models/format.py:62 models/media.py:359
++#: models/format.py:62 models/media.py:373
msgid "original code"
msgstr "cote originale"
msgid "type"
msgstr "type"
--#: models/language.py:55 models/media.py:212
++#: models/language.py:55 models/media.py:226
msgid "comment"
msgstr "commentaire"
msgstr "officiel"
#: models/location.py:112 models/location.py:170 models/location.py:185
--#: models/media.py:330
++#: models/media.py:344
msgid "location"
msgstr "lieu"
msgid "location relations"
msgstr "lieux relations"
--#: models/media.py:64
++#: models/media.py:65
msgid "none"
msgstr "aucun"
--#: models/media.py:64
++#: models/media.py:65
msgid "metadata"
msgstr "métadonnées"
--#: models/media.py:65
++#: models/media.py:66
msgid "partial"
msgstr "partiel"
--#: models/media.py:65
++#: models/media.py:66
msgid "full"
msgstr "complet"
--#: models/media.py:75
++#: models/media.py:68
++msgid "broken"
++msgstr ""
++
++#: models/media.py:68
++msgid "pending"
++msgstr ""
++
++#: models/media.py:68
++msgid "processing"
++msgstr ""
++
++#: models/media.py:69
++msgid "done"
++msgstr ""
++
++#: models/media.py:69
++msgid "ready"
++msgstr ""
++
++#: models/media.py:86
msgid "Metadata only"
msgstr "Métadonnées uniquement"
--#: models/media.py:77
++#: models/media.py:88
msgid "Sound and metadata"
msgstr "Son et métadonnées"
--#: models/media.py:79
++#: models/media.py:90
msgid "Private data"
msgstr "Données privées"
--#: models/media.py:80 models/media.py:100 models/media.py:197
--#: models/media.py:352
++#: models/media.py:91 models/media.py:111 models/media.py:211
++#: models/media.py:366
msgid "public access"
msgstr "accès public"
--#: models/media.py:96 models/media.py:126 models/media.py:175
--#: models/media.py:317 models/media.py:532 models/media.py:548
--#: models/media.py:580
++#: models/media.py:107 models/media.py:137 models/media.py:189
++#: models/media.py:331 models/media.py:565 models/media.py:581
++#: models/media.py:613
msgid "title"
msgstr "titre"
--#: models/media.py:97 models/media.py:128 models/media.py:549
--#: models/media.py:582
++#: models/media.py:108 models/media.py:139 models/media.py:582
++#: models/media.py:615
msgid "description"
msgstr "description"
--#: models/media.py:98 models/media.py:222 models/media.py:358
++#: models/media.py:109 models/media.py:236 models/media.py:372
msgid "code"
msgstr "cote"
--#: models/media.py:99 models/media.py:174
++#: models/media.py:110 models/media.py:188
msgid "reference"
msgstr "référence"
--#: models/media.py:127 models/media.py:581 models/media.py:600
--#: models/system.py:115
++#: models/media.py:138 models/media.py:614 models/media.py:637
++#: models/media.py:671 models/system.py:115
msgid "date"
msgstr ""
--#: models/media.py:129 models/media.py:599
++#: models/media.py:140 models/media.py:636 models/media.py:670
msgid "mime_type"
msgstr "type mime"
--#: models/media.py:130
++#: models/media.py:141
msgid "url"
msgstr ""
--#: models/media.py:131
++#: models/media.py:142
msgid "credits"
msgstr "crédits"
--#: models/media.py:132 models/media.py:375
++#: models/media.py:143 models/media.py:389 models/media.py:639
msgid "file"
msgstr "fichier"
--#: models/media.py:176 models/media.py:318
++#: models/media.py:190 models/media.py:332
msgid "original title / translation"
msgstr "titre original / traduction"
--#: models/media.py:177
++#: models/media.py:191
msgid "depositor / contributor"
msgstr "déposant / contributeur"
--#: models/media.py:180 models/media.py:682
++#: models/media.py:194 models/media.py:753
msgid "recording year (from)"
msgstr "année d'enregistrement (depuis)"
--#: models/media.py:181 models/media.py:683
++#: models/media.py:195 models/media.py:754
msgid "recording year (until)"
msgstr "année d'enregistrement (jusqu'à)"
--#: models/media.py:182
++#: models/media.py:196
msgid "year published"
msgstr "année de parution"
--#: models/media.py:188 models/media.py:361
++#: models/media.py:202 models/media.py:375
msgid "recordist"
msgstr "opérateur d'enregistrement"
--#: models/media.py:192
++#: models/media.py:206
msgid "publisher collection"
msgstr "collection éditeur"
--#: models/media.py:193
++#: models/media.py:207
msgid "publisher serial number"
msgstr "numéro dans la série"
--#: models/media.py:194
++#: models/media.py:208
msgid "author of published notice"
msgstr "auteur de la notice éditée"
--#: models/media.py:195
++#: models/media.py:209
msgid "bibliographic references"
msgstr "références bibliographiques"
--#: models/media.py:196
++#: models/media.py:210
msgid "document type"
msgstr "type de document"
--#: models/media.py:205
++#: models/media.py:219
msgid "CNRS depositor"
msgstr "déposant CNRS"
--#: models/media.py:208
++#: models/media.py:222
msgid "related documentation"
msgstr "documentation associée"
--#: models/media.py:211
++#: models/media.py:225
msgid "copies"
msgstr "autres exemplaires"
--#: models/media.py:215
++#: models/media.py:229
msgid "archiver notes"
msgstr "notes de l'archiviste"
--#: models/media.py:216
++#: models/media.py:230
msgid "items finished"
msgstr "fiches items faites"
--#: models/media.py:217
++#: models/media.py:231
msgid "recordist identical to depositor"
msgstr "collecteur identique au déposant"
--#: models/media.py:218
++#: models/media.py:232
msgid "published"
msgstr "édité"
--#: models/media.py:219
++#: models/media.py:233
msgid "conservation site"
msgstr "lieu de conservation"
--#: models/media.py:224
++#: models/media.py:238
msgid "old code"
msgstr "ancienne cote"
--#: models/media.py:225 models/media.py:379
++#: models/media.py:239 models/media.py:393
msgid "approximative duration"
msgstr "durée"
--#: models/media.py:226
++#: models/media.py:240
msgid "number of components (medium / piece)"
msgstr "nb de composants (support / pièce)"
--#: models/media.py:230
++#: models/media.py:244
msgid "digitization"
msgstr "numérisation"
--#: models/media.py:231
++#: models/media.py:245 models/media.py:638
msgid "status"
msgstr "état"
--#: models/media.py:232
++#: models/media.py:246
msgid "a_informer_07_03"
msgstr "a_informer_07_03"
--#: models/media.py:267
++#: models/media.py:281
msgid "states / nations"
msgstr "états / nations"
--#: models/media.py:281
++#: models/media.py:295
msgid "populations / social groups"
msgstr "populations / groupes sociaux"
--#: models/media.py:289 models/media.py:440
++#: models/media.py:303 models/media.py:453
msgid "computed duration"
msgstr "durée calculée"
--#: models/media.py:297 models/media.py:303 models/media.py:320
++#: models/media.py:311 models/media.py:317 models/media.py:334
msgid "collection"
msgstr "collection"
--#: models/media.py:307 models/media.py:308
++#: models/media.py:321 models/media.py:322
msgid "collection related media"
msgstr "média associés à la collection"
--#: models/media.py:321
++#: models/media.py:335
msgid "recording date (from)"
msgstr "date d'enregistrement (depuis)"
--#: models/media.py:322
++#: models/media.py:336
msgid "recording date (until)"
msgstr "date d'enregistrement (jusqu'à)"
--#: models/media.py:324
++#: models/media.py:338
msgid "scientist"
-msgstr "reponsable scientifique"
+msgstr "responsable scientifique"
--#: models/media.py:326
++#: models/media.py:340
msgid "summary"
msgstr "résumé"
--#: models/media.py:327
++#: models/media.py:341
msgid "remarks"
msgstr "remarques"
--#: models/media.py:331
++#: models/media.py:345
msgid "location details"
msgstr "précisions lieu"
--#: models/media.py:332
++#: models/media.py:346
msgid "cultural area"
msgstr "aire culturelle"
--#: models/media.py:335
++#: models/media.py:349
msgid "language"
msgstr "langue"
--#: models/media.py:337
++#: models/media.py:351
msgid "ISO language"
msgstr "Langue ISO"
--#: models/media.py:339
++#: models/media.py:353
msgid "comments / ethnographic context"
msgstr "commentaires / contexte ethnographique"
--#: models/media.py:340
++#: models/media.py:354
msgid "moda_execut"
msgstr "moda_execut"
--#: models/media.py:347
++#: models/media.py:361
msgid "author / compositor"
msgstr "auteur / compositeur"
--#: models/media.py:348
++#: models/media.py:362
msgid "contributor"
msgstr "intervenant"
--#: models/media.py:354
++#: models/media.py:368
msgid "depositor"
msgstr "déposant"
--#: models/media.py:360
++#: models/media.py:374
msgid "item number"
msgstr "n° de l'item"
--#: models/media.py:362
++#: models/media.py:376
msgid "digitalist"
msgstr "opérateur de numérisation"
--#: models/media.py:363
++#: models/media.py:377
msgid "collector"
msgstr "collecteur"
--#: models/media.py:364
++#: models/media.py:378
msgid "collector selection"
msgstr "sélection collecteur"
--#: models/media.py:365
++#: models/media.py:379
msgid "collector as in collection"
msgstr "collecteur identique à la collection"
--#: models/media.py:366
++#: models/media.py:380
msgid "digitization date"
msgstr "date de numérisation"
--#: models/media.py:367
++#: models/media.py:381
msgid "publishing date"
msgstr "date de création du support édité"
--#: models/media.py:368
++#: models/media.py:382
msgid "creator reference"
msgstr "référence du créateur"
--#: models/media.py:369
++#: models/media.py:383
msgid "published references"
msgstr "références éditées"
--#: models/media.py:371
++#: models/media.py:385
msgid "copy of"
msgstr "copie de"
--#: models/media.py:372
-#, fuzzy
++#: models/media.py:386
msgid "mime type"
msgstr "type mime"
--#: models/media.py:386 templates/telemeta/mediaitem_edit.html:47
++#: models/media.py:400 templates/telemeta/mediaitem_edit.html:47
msgid "keywords"
msgstr "mots-clés"
--#: models/media.py:467
++#: models/media.py:480
msgid "instruments"
msgstr "instruments"
--#: models/media.py:477 models/media.py:478
++#: models/media.py:510 models/media.py:511
msgid "item related media"
msgstr "média associés à l'item"
--#: models/media.py:496
++#: models/media.py:529
msgid "composition"
msgstr "Voix / Instruments"
--#: models/media.py:498
++#: models/media.py:531
msgid "vernacular name"
msgstr "nom vernaculaire"
--#: models/media.py:499
++#: models/media.py:532
msgid "number"
msgstr "nombre"
--#: models/media.py:500
++#: models/media.py:533
msgid "interprets"
msgstr "interprètes"
--#: models/media.py:511
++#: models/media.py:544
msgid "id"
msgstr ""
--#: models/media.py:514
++#: models/media.py:547
msgid "unit"
msgstr "unité"
--#: models/media.py:533
++#: models/media.py:566
msgid "start"
msgstr "début"
--#: models/media.py:534
++#: models/media.py:567
msgid "end"
msgstr "fin"
--#: models/media.py:538
++#: models/media.py:571
msgid "item part"
msgstr "partie"
--#: models/media.py:546 models/media.py:563 models/media.py:578
++#: models/media.py:579 models/media.py:596 models/media.py:611
msgid "public_id"
msgstr "public_id"
--#: models/media.py:564
++#: models/media.py:597
msgid "playlist"
msgstr "liste de lecture"
--#: models/media.py:565
++#: models/media.py:598
msgid "resource_type"
msgstr "type de ressource"
--#: models/media.py:566
++#: models/media.py:599
msgid "resource_id"
msgstr "ressource"
--#: models/media.py:579 models/system.py:55
--msgid "time"
++#: models/media.py:612
++#, fuzzy
++msgid "time (s)"
msgstr "heure"
--#: models/media.py:583
++#: models/media.py:616
msgid "author"
msgstr "auteur"
--#: models/media.py:601
++#: models/media.py:672
msgid "transcoded"
msgstr ""
--#: models/media.py:681
++#: models/media.py:752
msgid "collections"
msgstr "collections"
--#: models/media.py:693 models/media.py:694 models/media.py:704
--#: models/media.py:721
++#: models/media.py:764 models/media.py:765 models/media.py:775
++#: models/media.py:792
msgid "corpus"
msgstr "corpus"
--#: models/media.py:714 models/media.py:715 models/media.py:732
++#: models/media.py:785 models/media.py:786 models/media.py:803
msgid "fonds"
msgstr "fonds"
--#: models/media.py:725 models/media.py:726
++#: models/media.py:796 models/media.py:797
msgid "corpus related media"
msgstr "média associés"
--#: models/media.py:736 models/media.py:737
++#: models/media.py:807 models/media.py:808
msgid "fonds related media"
msgstr "média associés"
msgid "modification type"
msgstr "type de modification"
++#: models/system.py:55
++msgid "time"
++msgstr "heure"
++
#: models/system.py:56
msgid "user"
msgstr "utilisateur"
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
- "POT-Creation-Date: 2012-12-18 10:57+0100\n"
-"POT-Creation-Date: 2013-01-01 10:34+0100\n"
++"POT-Creation-Date: 2013-01-08 09:27+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Guillaume Pellerin <yomguy@parisson.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
--- /dev/null
- errmsg = _("The XML in '%s' is not well-formed and cannot be parsed: %s") % (xml, e)
+ # -*- coding: utf-8 -*-
+ """ xmltodict(): convert xml into tree of Python dicts.
+
+ This was copied and modified from John Bair's recipe at aspn.activestate.com:
+ http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/149368
+ """
+ import os
+ import string
+ import locale
+ from xml.parsers import expat
+
+ # If we're in Dabo, get the default encoding.
+ #import dabo
+ #import dabo.lib.DesignerUtils as desUtil
+ #from dabo.dLocalize import _
+ #from dabo.lib.utils import resolvePath
+ #app = dabo.dAppRef
+ #if app is not None:
+ #default_encoding = app.Encoding
+ #else:
+ #enc = locale.getlocale()[1]
+ #if enc is None:
+ #enc = dabo.defaultEncoding
+ #default_encoding = enc
+
+ # Python seems to need to compile code with \n linesep:
+ code_linesep = "\n"
+ eol = os.linesep
+ default_encoding = 'utf-8'
+ default_decoding = 'utf-8'
+
+ class Xml2Obj:
+ """XML to Object"""
+ def __init__(self):
+ self.root = None
+ self.nodeStack = []
+ self.attsToSkip = []
+ self._inCode = False
+ self._mthdName = ""
+ self._mthdCode = ""
+ self._codeDict = None
+ self._inProp = False
+ self._propName = ""
+ self._propData = ""
+ self._propDict = None
+ self._currPropAtt = ""
+ self._currPropDict = None
+
+
+ def StartElement(self, name, attributes):
+ """SAX start element even handler"""
+ if name == "code":
+ # This is code for the parent element
+ self._inCode = True
+ parent = self.nodeStack[-1]
+ if not parent.has_key("code"):
+ parent["code"] = {}
+ self._codeDict = parent["code"]
+
+ elif name == "properties":
+ # These are the custom property definitions
+ self._inProp = True
+ self._propName = ""
+ self._propData = ""
+ parent = self.nodeStack[-1]
+ if not parent.has_key("properties"):
+ parent["properties"] = {}
+ self._propDict = parent["properties"]
+
+ else:
+ if self._inCode:
+ self._mthdName = name.encode()
+ elif self._inProp:
+ if self._propName:
+ # In the middle of a prop definition
+ self._currPropAtt = name.encode()
+ else:
+ self._propName = name.encode()
+ self._currPropDict = {}
+ self._currPropAtt = ""
+ else:
+ element = {"name": name.encode()}
+ if len(attributes) > 0:
+ for att in self.attsToSkip:
+ if attributes.has_key(att):
+ del attributes[att]
+ element["attributes"] = attributes
+
+ # Push element onto the stack and make it a child of parent
+ if len(self.nodeStack) > 0:
+ parent = self.nodeStack[-1]
+ if not parent.has_key("children"):
+ parent["children"] = []
+ parent["children"].append(element)
+ else:
+ self.root = element
+ self.nodeStack.append(element)
+
+
+ def EndElement(self, name):
+ """SAX end element event handler"""
+ if self._inCode:
+ if name == "code":
+ self._inCode = False
+ self._codeDict = None
+ else:
+ # End of an individual method
+ mth = self._mthdCode.strip()
+ if not mth.endswith("\n"):
+ mth += "\n"
+ self._codeDict[self._mthdName] = mth
+ self._mthdName = ""
+ self._mthdCode = ""
+ elif self._inProp:
+ if name == "properties":
+ self._inProp = False
+ self._propDict = None
+ elif name == self._propName:
+ # End of an individual prop definition
+ self._propDict[self._propName] = self._currPropDict
+ self._propName = ""
+ else:
+ # end of a property attribute
+ self._currPropDict[self._currPropAtt] = self._propData
+ self._propData = self._currPropAtt = ""
+ else:
+ self.nodeStack = self.nodeStack[:-1]
+
+
+ def CharacterData(self, data):
+ """SAX character data event handler"""
+ if self._inCode or data.strip():
+ data = data.replace("<", "<")
+ data = data.encode(default_encoding)
+ if self._inCode:
+ if self._mthdCode:
+ self._mthdCode += data
+ else:
+ self._mthdCode = data
+ elif self._inProp:
+ self._propData += data
+ else:
+ element = self.nodeStack[-1]
+ if not element.has_key("cdata"):
+ element["cdata"] = ""
+ element["cdata"] += data
+
+
+ def Parse(self, xml):
+ # Create a SAX parser
+ Parser = expat.ParserCreate(default_encoding)
+ # SAX event handlers
+ Parser.StartElementHandler = self.StartElement
+ Parser.EndElementHandler = self.EndElement
+ Parser.CharacterDataHandler = self.CharacterData
+ # Parse the XML File
+ ParserStatus = Parser.Parse(xml, 1)
+ return self.root
+
+
+ def ParseFromFile(self, filename):
+ return self.Parse(open(filename,"r").read())
+
+
+ def xmltodict(xml, attsToSkip=[], addCodeFile=False):
+ """Given an xml string or file, return a Python dictionary."""
+ parser = Xml2Obj()
+ parser.attsToSkip = attsToSkip
+ isPath = os.path.exists(xml)
+ errmsg = ""
+ if eol not in xml and isPath:
+ # argument was a file
+ try:
+ ret = parser.ParseFromFile(xml)
+ except expat.ExpatError, e:
- errmsg = _("The file '%s' could not be found") % xml
++ errmsg = "The XML in '%s' is not well-formed and cannot be parsed: %s" % (xml, e)
+ else:
+ # argument must have been raw xml:
+ if not xml.strip().startswith("<?xml "):
+ # it's a bad file name
- errmsg = _("An invalid XML string was encountered")
++ errmsg = "The file '%s' could not be found" % xml
+ else:
+ try:
+ ret = parser.Parse(xml)
+ except expat.ExpatError:
++ errmsg = "An invalid XML string was encountered"
+ if errmsg:
+ raise dabo.dException.XmlException, errmsg
+ if addCodeFile and isPath:
+ # Get the associated code file, if any
+ codePth = "%s-code.py" % os.path.splitext(xml)[0]
+ if os.path.exists(codePth):
+ try:
+ codeDict = desUtil.parseCodeFile(open(codePth).read())
+ desUtil.addCodeToClassDict(ret, codeDict)
+ except StandardError, e:
+ print "Failed to parse code file:", e
+ return ret
+
+
+ def escQuote(val, noEscape=False, noQuote=False):
+ """Add surrounding quotes to the string, and escape
+ any illegal XML characters.
+ """
+ if not isinstance(val, basestring):
+ val = str(val)
+ if not isinstance(val, unicode):
+ val = unicode(val, default_encoding)
+ if noQuote:
+ qt = ''
+ else:
+ qt = '"'
+ slsh = "\\"
+ # val = val.replace(slsh, slsh+slsh)
+ if not noEscape:
+ # First escape internal ampersands. We need to double them up due to a
+ # quirk in wxPython and the way it displays this character.
+ val = val.replace("&", "&&")
+ # Escape any internal quotes
+ val = val.replace('"', '"').replace("'", "'")
+ # Escape any high-order characters
+ chars = []
+ for pos, char in enumerate(list(val)):
+ if ord(char) > 127:
+ chars.append("&#%s;" % ord(char))
+ else:
+ chars.append(char)
+ val = "".join(chars)
+ val = val.replace("<", "<").replace(">", ">")
+ return "%s%s%s" % (qt, val, qt)
+
+
+ def dicttoxml(dct, level=0, header=None, linesep=None):
+ """Given a Python dictionary, return an xml string.
+
+ The dictionary must be in the format returned by dicttoxml(), with keys
+ on "attributes", "code", "cdata", "name", and "children".
+
+ Send your own XML header, otherwise a default one will be used.
+
+ The linesep argument is a dictionary, with keys on levels, allowing the
+ developer to add extra whitespace depending on the level.
+ """
+ att = ""
+ ret = ""
+
+ if dct.has_key("attributes"):
+ for key, val in dct["attributes"].items():
+ # Some keys are already handled.
+ noEscape = key in ("sizerInfo",)
+ val = escQuote(val, noEscape)
+ att += " %s=%s" % (key, val)
+ ret += "%s<%s%s" % ("\t" * level, dct["name"], att)
+
+ if (not dct.has_key("cdata") and not dct.has_key("children")
+ and not dct.has_key("code") and not dct.has_key("properties")):
+ ret += " />%s" % eol
+ else:
+ ret += ">"
+ if dct.has_key("cdata"):
+ ret += "%s" % dct["cdata"].decode(default_encoding).replace("<", "<")
+
+ if dct.has_key("code"):
+ if len(dct["code"].keys()):
+ ret += "%s%s<code>%s" % (eol, "\t" * (level+1), eol)
+ methodTab = "\t" * (level+2)
+ for mthd, cd in dct["code"].items():
+ # Convert \n's in the code to eol:
+ cd = eol.join(cd.splitlines())
+
+ # Make sure that the code ends with a linefeed
+ if not cd.endswith(eol):
+ cd += eol
+
+ ret += "%s<%s><![CDATA[%s%s]]>%s%s</%s>%s" % (methodTab,
+ mthd, eol, cd, eol,
+ methodTab, mthd, eol)
+ ret += "%s</code>%s" % ("\t" * (level+1), eol)
+
+ if dct.has_key("properties"):
+ if len(dct["properties"].keys()):
+ ret += "%s%s<properties>%s" % (eol, "\t" * (level+1), eol)
+ currTab = "\t" * (level+2)
+ for prop, val in dct["properties"].items():
+ ret += "%s<%s>%s" % (currTab, prop, eol)
+ for propItm, itmVal in val.items():
+ itmTab = "\t" * (level+3)
+ ret += "%s<%s>%s</%s>%s" % (itmTab, propItm, itmVal,
+ propItm, eol)
+ ret += "%s</%s>%s" % (currTab, prop, eol)
+ ret += "%s</properties>%s" % ("\t" * (level+1), eol)
+
+ if dct.has_key("children") and len(dct["children"]) > 0:
+ ret += eol
+ for child in dct["children"]:
+ ret += dicttoxml(child, level+1, linesep=linesep)
+ indnt = ""
+ if ret.endswith(eol):
+ # Indent the closing tag
+ indnt = ("\t" * level)
+ ret += "%s</%s>%s" % (indnt, dct["name"], eol)
+
+ if linesep:
+ ret += linesep.get(level, "")
+
+ if level == 0:
+ if header is None:
+ header = '<?xml version="1.0" encoding="%s" standalone="no"?>%s' \
+ % (default_encoding, eol)
+ ret = header + ret
+
+ return ret
+
+
+ def flattenClassDict(cd, retDict=None):
+ """Given a dict containing a series of nested objects such as would
+ be created by restoring from a cdxml file, returns a dict with all classIDs
+ as keys, and a dict as the corresponding value. The dict value will have
+ keys for the attributes and/or code, depending on what was in the original
+ dict. The end result is to take a nested dict structure and return a flattened
+ dict with all objects at the top level.
+ """
+ if retDict is None:
+ retDict = {}
+ atts = cd.get("attributes", {})
+ props = cd.get("properties", {})
+ kids = cd.get("children", [])
+ code = cd.get("code", {})
+ classID = atts.get("classID", "")
+ classFile = resolvePath(atts.get("designerClass", ""))
+ superclass = resolvePath(atts.get("superclass", ""))
+ superclassID = atts.get("superclassID", "")
+ if superclassID and os.path.exists(superclass):
+ # Get the superclass info
+ superCD = xmltodict(superclass, addCodeFile=True)
+ flattenClassDict(superCD, retDict)
+ if classID:
+ if os.path.exists(classFile):
+ # Get the class info
+ classCD = xmltodict(classFile, addCodeFile=True)
+ classAtts = classCD.get("attributes", {})
+ classProps = classCD.get("properties", {})
+ classCode = classCD.get("code", {})
+ classKids = classCD.get("children", [])
+ currDict = retDict.get(classID, {})
+ retDict[classID] = {"attributes": classAtts, "code": classCode,
+ "properties": classProps}
+ retDict[classID].update(currDict)
+ # Now update the child objects in the dict
+ for kid in classKids:
+ flattenClassDict(kid, retDict)
+ else:
+ # Not a file; most likely just a component in another class
+ currDict = retDict.get(classID, {})
+ retDict[classID] = {"attributes": atts, "code": code,
+ "properties": props}
+ retDict[classID].update(currDict)
+ if kids:
+ for kid in kids:
+ flattenClassDict(kid, retDict)
+ return retDict
+
+
+ def addInheritedInfo(src, super, updateCode=False):
+ """Called recursively on the class container structure, modifying
+ the attributes to incorporate superclass information. When the
+ 'updateCode' parameter is True, superclass code is added to the
+ object's code
+ """
+ atts = src.get("attributes", {})
+ props = src.get("properties", {})
+ kids = src.get("children", [])
+ code = src.get("code", {})
+ classID = atts.get("classID", "")
+ if classID:
+ superInfo = super.get(classID, {"attributes": {}, "code": {}, "properties": {}})
+ src["attributes"] = superInfo["attributes"].copy()
+ src["attributes"].update(atts)
+ src["properties"] = superInfo.get("properties", {}).copy()
+ src["properties"].update(props)
+ if updateCode:
+ src["code"] = superInfo["code"].copy()
+ src["code"].update(code)
+ if kids:
+ for kid in kids:
+ addInheritedInfo(kid, super, updateCode)
+
+
+
+ #if __name__ == "__main__":
+ #test_dict = {"name": "test", "attributes":{"path": "c:\\temp\\name",
+ #"problemChars": "Welcome to <Jos\xc3\xa9's \ Stuff!>\xc2\xae".decode("latin-1")}}
+ #print "test_dict:", test_dict
+ #xml = dicttoxml(test_dict)
+ #print "xml:", xml
+ #test_dict2 = xmltodict(xml)
+ #print "test_dict2:", test_dict2
+ #print "same?:", test_dict == test_dict2