From: yomguy Date: Tue, 8 Jan 2013 08:27:47 +0000 (+0100) Subject: Merge branch 'dev' into lam X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=909dc1ffb96dc3d691b994c85851059574f46d0a;p=telemeta.git Merge branch 'dev' into lam Conflicts: telemeta/locale/de/LC_MESSAGES/django.mo telemeta/locale/de/LC_MESSAGES/django.po telemeta/locale/de/LC_MESSAGES/djangojs.mo telemeta/locale/de/LC_MESSAGES/djangojs.po telemeta/locale/fr/LC_MESSAGES/django.mo telemeta/locale/fr/LC_MESSAGES/django.po telemeta/locale/fr/LC_MESSAGES/djangojs.mo telemeta/locale/fr/LC_MESSAGES/djangojs.po --- 909dc1ffb96dc3d691b994c85851059574f46d0a diff --cc telemeta/locale/de/LC_MESSAGES/django.mo index 3e1dd4ec,d12a2d12..0aafeb52 Binary files differ diff --cc telemeta/locale/de/LC_MESSAGES/django.po index c0024d18,d79a6797..7ca6697b --- a/telemeta/locale/de/LC_MESSAGES/django.po +++ b/telemeta/locale/de/LC_MESSAGES/django.po @@@ -8,11 -7,11 +7,11 @@@ msgid " 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 \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 \n" "Language-Team: LANGUAGE \n" - "Language: \n" + "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@@ -24,74 -24,74 +24,74 @@@ msgstr "Dauer #: 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)" @@@ -115,33 -115,33 +115,34 @@@ msgstr "Bandmarke #: 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" @@@ -225,11 -225,11 +226,11 @@@ msgstr "Geltungsbereich #: 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" @@@ -257,12 -257,12 +258,12 @@@ msgstr "aktueller Ort #: 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" @@@ -282,397 -282,397 +283,418 @@@ msgstr "früherer Ort #: 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" + msgstr "vollständig" + -#: models/media.py:75 ++#: models/media.py:68 ++msgid "broken" +msgstr "" + - #: models/media.py:75 - msgid "Metadata only" ++#: models/media.py:68 ++msgid "pending" +msgstr "" + - #: models/media.py:77 - msgid "Sound and metadata" ++#: models/media.py:68 ++msgid "processing" +msgstr "" + - #: models/media.py:79 - msgid "Private data" ++#: models/media.py:69 ++msgid "done" +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 "ready" +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:86 + msgid "Metadata only" + msgstr "nur Metadaten" + -#: models/media.py:77 ++#: models/media.py:88 + msgid "Sound and metadata" + msgstr "Ton und Metadaten" + -#: models/media.py:79 ++#: models/media.py:90 + msgid "Private data" + msgstr "private Daten" + -#: 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 "öffentlich zugänglich" + -#: 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 "" + 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" @@@ -684,11 -684,11 +706,15 @@@ msgstr "Elementidentifikator #: 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" diff --cc telemeta/locale/de/LC_MESSAGES/djangojs.mo index c67975d9,6f56bd94..fc07b11c Binary files differ diff --cc telemeta/locale/de/LC_MESSAGES/djangojs.po index e4df19f3,c330eb40..67fa0196 --- a/telemeta/locale/de/LC_MESSAGES/djangojs.po +++ b/telemeta/locale/de/LC_MESSAGES/djangojs.po @@@ -8,9 -7,9 +7,9 @@@ msgid " 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 \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 \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" diff --cc telemeta/locale/fr/LC_MESSAGES/django.mo index 1485853a,a5c30d82..055afe50 Binary files differ diff --cc telemeta/locale/fr/LC_MESSAGES/django.po index faa90f46,7dca59db..70504ada --- a/telemeta/locale/fr/LC_MESSAGES/django.po +++ b/telemeta/locale/fr/LC_MESSAGES/django.po @@@ -10,7 -10,7 +10,7 @@@ msgid " 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 \n" "Language-Team: LANGUAGE \n" @@@ -27,36 -27,36 +27,36 @@@ msgstr "Durée 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" @@@ -64,19 -64,19 +64,19 @@@ 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" @@@ -84,13 -84,13 +84,13 @@@ 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" @@@ -118,21 -118,21 +118,22 @@@ msgstr "marque de bande 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" @@@ -140,7 -140,7 +141,7 @@@ 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" @@@ -228,7 -228,7 +229,7 @@@ msgstr "cadre msgid "type" msgstr "type" --#: models/language.py:55 models/media.py:212 ++#: models/language.py:55 models/media.py:226 msgid "comment" msgstr "commentaire" @@@ -261,7 -261,7 +262,7 @@@ msgid "authoritative 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" @@@ -285,393 -285,394 +286,414 @@@ msgstr "lieu ancêtre 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" @@@ -687,6 -688,6 +709,10 @@@ msgstr "identifiant de l'élément msgid "modification type" msgstr "type de modification" ++#: models/system.py:55 ++msgid "time" ++msgstr "heure" ++ #: models/system.py:56 msgid "user" msgstr "utilisateur" diff --cc telemeta/locale/fr/LC_MESSAGES/djangojs.mo index f29cf98f,adc4e387..bda67f81 Binary files differ diff --cc telemeta/locale/fr/LC_MESSAGES/djangojs.po index cee764ee,6559b5bd..d1fd5ff2 --- a/telemeta/locale/fr/LC_MESSAGES/djangojs.po +++ b/telemeta/locale/fr/LC_MESSAGES/djangojs.po @@@ -8,7 -8,7 +8,7 @@@ msgid " 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 \n" "Language-Team: LANGUAGE \n" diff --cc telemeta/util/xmltodict2.py index 00000000,35f7ab1f..10db1389 mode 000000,100644..100644 --- a/telemeta/util/xmltodict2.py +++ b/telemeta/util/xmltodict2.py @@@ -1,0 -1,398 +1,398 @@@ + # -*- 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 XML in '%s' is not well-formed and cannot be parsed: %s") % (xml, e) ++ 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(" 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%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>%s%s%s" % (methodTab, + mthd, eol, cd, eol, + methodTab, mthd, eol) + ret += "%s%s" % ("\t" * (level+1), eol) + + if dct.has_key("properties"): + if len(dct["properties"].keys()): + ret += "%s%s%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" % (itmTab, propItm, itmVal, + propItm, eol) + ret += "%s%s" % (currTab, prop, eol) + ret += "%s%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" % (indnt, dct["name"], eol) + + if linesep: + ret += linesep.get(level, "") + + if level == 0: + if header is None: + header = '%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 \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