Index: ooxml.tcl ================================================================== --- ooxml.tcl +++ ooxml.tcl @@ -160,10 +160,11 @@ package require Tcl 8.6 package require vfs::zip package require tdom 0.9.0- +package require msgcat namespace eval ::ooxml { namespace export xl_sheets xl_read xl_write @@ -323,10 +324,83 @@ none slantDashDot thick thin } + + msgcat::mcset ar Book \u0627\u0644\u0643\u062a\u0627\u0628 + msgcat::mcset ar Worksheets "\u0623\u0648\u0631\u0627\u0642 \u0627\u0644\u0639\u0645\u0644" + msgcat::mcset ar Sheet \u0627\u0644\u0648\u0631\u0642\u0629 + msgcat::mcset cs Book Ses\u030cit + msgcat::mcset cs Worksheets Listy + msgcat::mcset cs Sheet List + msgcat::mcset da Book Mappe + msgcat::mcset da Worksheets Regneark + msgcat::mcset da Sheet Ark + msgcat::mcset de Book Mappe + msgcat::mcset de Worksheets Arbeitsbl\u00e4tter + msgcat::mcset de Sheet Blatt + msgcat::mcset el Book \u0392\u03b9\u03b2\u03bb\u03b9\u0301\u03bf + msgcat::mcset el Worksheets "\u03a6\u03cd\u03bb\u03bb\u03b1 \u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1\u03c2" + msgcat::mcset el Sheet \u03a6\u03cd\u03bb\u03bb\u03bf + msgcat::mcset en Book Book + msgcat::mcset en Worksheets Worksheets + msgcat::mcset en Sheet Sheet + msgcat::mcset es Book Libro + msgcat::mcset es Worksheets "Hojas de c\u00e1lculo" + msgcat::mcset es Sheet Hoja + msgcat::mcset fi Book Tyo\u0308kirja + msgcat::mcset fi Worksheets Laskentataulukot + msgcat::mcset fi Sheet Taulukko + msgcat::mcset fr Book Classeur + msgcat::mcset fr Worksheets "Feuilles de calcul" + msgcat::mcset fr Sheet Feuil + msgcat::mcset he Book \u05d7\u05d5\u05d1\u05e8\u05ea + msgcat::mcset he Worksheets "\u05d2\u05dc\u05d9\u05d5\u05e0\u05d5\u05ea \u05e2\u05d1\u05d5\u05d3\u05d4" + msgcat::mcset he Sheet \u05d2\u05d9\u05dc\u05d9\u05d5\u05df + msgcat::mcset hu Book Munkafu\u0308zet + msgcat::mcset hu Worksheets Munkalapok + msgcat::mcset hu Sheet Munkalap + msgcat::mcset it Book Cartel + msgcat::mcset it Worksheets "Fogli di lavoro" + msgcat::mcset it Sheet Foglio + msgcat::mcset ja Book Book + msgcat::mcset ja Worksheets \u30ef\u30fc\u30af\u30b7\u30fc\u30c8 + msgcat::mcset ja Sheet Sheet + msgcat::mcset ko Book "\u1110\u1169\u11bc\u1112\u1161\u11b8 \u1106\u116e\u11ab\u1109\u1165" + msgcat::mcset ko Worksheets \uc6cc\ud06c\uc2dc\ud2b8 + msgcat::mcset ko Sheet \uc2dc\ud2b8 + msgcat::mcset nl Book Map + msgcat::mcset nl Worksheets Werkbladen + msgcat::mcset nl Sheet Blad + msgcat::mcset no Book Bok + msgcat::mcset no Worksheets Regneark + msgcat::mcset no Sheet Ark + msgcat::mcset pl Book Skoroszyt + msgcat::mcset pl Worksheets Arkusze + msgcat::mcset pl Sheet Arkusz + msgcat::mcset pt Book Livro + msgcat::mcset pt Worksheets "Folhas de C\u00e1lculo" + msgcat::mcset pt Sheet Folha + msgcat::mcset ru Book \u041a\u043d\u0438\u0433\u0430 + msgcat::mcset ru Worksheets \u041b\u0438\u0441\u0442\u044b + msgcat::mcset ru Sheet \u041b\u0438\u0441\u0442 + msgcat::mcset sl Book Zos\u030cit + msgcat::mcset sl Worksheets H\u00e1rky + msgcat::mcset sl Sheet H\u00e1rok + msgcat::mcset sv Book Bok + msgcat::mcset sv Worksheets Kalkylblad + msgcat::mcset sv Sheet Blad + msgcat::mcset th Book \u0e2a\u0e21\u0e38\u0e14\u0e07\u0e32\u0e19 + msgcat::mcset th Worksheets \u0e40\u0e27\u0e34\u0e23\u0e4c\u0e01\u0e0a\u0e35\u0e15 + msgcat::mcset th Sheet \u0e41\u0e1c\u0e48\u0e19\u0e07\u0e32\u0e19 + msgcat::mcset tr Book Kitap + msgcat::mcset tr Worksheets "\u00c7al\u0131\u015fma Sayfalar\u0131" + msgcat::mcset tr Sheet Sayfa + msgcat::mcset zh Book \u5de5\u4f5c\u7c3f + msgcat::mcset zh Worksheets \u5de5\u4f5c\u8868 + msgcat::mcset zh Sheet \u5de5\u4f5c\u8868 } proc ::ooxml::Default { name value } { variable defaults @@ -2181,21 +2255,21 @@ $root appendChild [set node0 [$doc createElement HeadingPairs]] set node1 [$node0 appendChild [$doc createElement vt:vector]] $node1 setAttribute size 2 baseType variant set node2 [$node1 appendChild [$doc createElement vt:variant]] set node3 [$node2 appendChild [$doc createElement vt:lpstr]] - $node3 appendChild [$doc createTextNode Arbeitsblätter] + $node3 appendChild [$doc createTextNode [msgcat::mc Worksheets]] set node2 [$node1 appendChild [$doc createElement vt:variant]] set node3 [$node2 appendChild [$doc createElement vt:i4]] $node3 appendChild [$doc createTextNode 3] $root appendChild [set node0 [$doc createElement TitlesOfParts]] set node1 [$node0 appendChild [$doc createElement vt:vector]] $node1 setAttribute size $obj(sheets) baseType lpstr for {set ws 1} {$ws <= $obj(sheets)} {incr ws} { set node2 [$node1 appendChild [$doc createElement vt:lpstr]] - $node2 appendChild [$doc createTextNode Blatt$ws] + $node2 appendChild [$doc createTextNode [msgcat::mc Sheet]$ws] } $root appendChild [set node0 [$doc createElement Company]] $root appendChild [set node0 [$doc createElement LinksUpToDate]] ADDED tools/getlanguageinfo.tcl Index: tools/getlanguageinfo.tcl ================================================================== --- tools/getlanguageinfo.tcl +++ tools/getlanguageinfo.tcl @@ -0,0 +1,64 @@ +#!/bin/sh +#\ +exec tclsh8.6 "$0" "$@" + +package require vfs::zip +package require tdom 0.9.0- + +proc UnicodeCharsToHex { txt } { + set new {} + foreach {a b c d} [split [binary encode hex [encoding convertto unicode $txt]] {}] { + if {[expr 0x${c}${d}${a}${b}] <= 0x7f} { + append new [binary decode hex ${c}${d}${a}${b}] + } else { + append new \\u $c $d $a $b + } + } + return [string map {\0 {}} $new] +} + +foreach file [glob -directory languages *.xlsx] { + set lang [lindex [split $file -.] 2] + set files($lang) $file +} + +set maptable {} + +foreach lang [lsort [array names files]] { + set file $files($lang) + set mnt [vfs::zip::Mount $file xlsx] + set name [lindex [split [UnicodeCharsToHex $file] -.] 0] + + set translation [string trim [file tail $name] 1] + if {[regexp -all {\s+} $translation]} { + set translation \"$translation\" + } + puts "msgcat::mcset $lang [string trim Book1 1] $translation" + + if {![catch {open xlsx/docProps/app.xml r} fd]} { + fconfigure $fd -encoding utf-8 + if {![catch {dom parse [read $fd]} doc]} { + set root [$doc documentElement] + set idx -1 + foreach node [$root selectNodes -namespaces [list X [$root namespaceURI] vt http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes] {/X:Properties/X:HeadingPairs/vt:vector/vt:variant/vt:lpstr/text()}] { + set translation [UnicodeCharsToHex [$node nodeValue]] + if {[regexp -all {\s+} $translation]} { + set translation \"$translation\" + } + puts "msgcat::mcset $lang Worksheets $translation" + } + foreach node [$root selectNodes -namespaces [list X [$root namespaceURI] vt http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes] {/X:Properties/X:TitlesOfParts/vt:vector/vt:lpstr/text()}] { + set translation [string trim [UnicodeCharsToHex [$node nodeValue]] 1] + if {[regexp -all {\s+} $translation]} { + set translation \"$translation\" + } + puts "msgcat::mcset $lang [string trim Sheet1 1] $translation" + } + $doc delete + } + close $fd + } + + vfs::zip::Unmount $mnt xlsx +} + ADDED tools/languages/Bok1-norwegisch-no.xlsx Index: tools/languages/Bok1-norwegisch-no.xlsx ================================================================== --- tools/languages/Bok1-norwegisch-no.xlsx +++ tools/languages/Bok1-norwegisch-no.xlsx cannot compute difference between binary files ADDED tools/languages/Bok1-schwedisch-sv.xlsx Index: tools/languages/Bok1-schwedisch-sv.xlsx ================================================================== --- tools/languages/Bok1-schwedisch-sv.xlsx +++ tools/languages/Bok1-schwedisch-sv.xlsx cannot compute difference between binary files ADDED tools/languages/Book1-englisch-en.xlsx Index: tools/languages/Book1-englisch-en.xlsx ================================================================== --- tools/languages/Book1-englisch-en.xlsx +++ tools/languages/Book1-englisch-en.xlsx cannot compute difference between binary files ADDED tools/languages/Book1-japanisch-ja.xlsx Index: tools/languages/Book1-japanisch-ja.xlsx ================================================================== --- tools/languages/Book1-japanisch-ja.xlsx +++ tools/languages/Book1-japanisch-ja.xlsx cannot compute difference between binary files ADDED tools/languages/Cartel1-italienisch-it.xlsx Index: tools/languages/Cartel1-italienisch-it.xlsx ================================================================== --- tools/languages/Cartel1-italienisch-it.xlsx +++ tools/languages/Cartel1-italienisch-it.xlsx cannot compute difference between binary files ADDED tools/languages/Classeur1-französisch-fr.xlsx Index: tools/languages/Classeur1-französisch-fr.xlsx ================================================================== --- tools/languages/Classeur1-französisch-fr.xlsx +++ tools/languages/Classeur1-französisch-fr.xlsx cannot compute difference between binary files ADDED tools/languages/Kitap1-türkisch-tr.xlsx Index: tools/languages/Kitap1-türkisch-tr.xlsx ================================================================== --- tools/languages/Kitap1-türkisch-tr.xlsx +++ tools/languages/Kitap1-türkisch-tr.xlsx cannot compute difference between binary files ADDED tools/languages/Libro1-spanisch-es.xlsx Index: tools/languages/Libro1-spanisch-es.xlsx ================================================================== --- tools/languages/Libro1-spanisch-es.xlsx +++ tools/languages/Libro1-spanisch-es.xlsx cannot compute difference between binary files ADDED tools/languages/Livro1-portugiesisch-pt.xlsx Index: tools/languages/Livro1-portugiesisch-pt.xlsx ================================================================== --- tools/languages/Livro1-portugiesisch-pt.xlsx +++ tools/languages/Livro1-portugiesisch-pt.xlsx cannot compute difference between binary files ADDED tools/languages/Map1-niederländisch-nl.xlsx Index: tools/languages/Map1-niederländisch-nl.xlsx ================================================================== --- tools/languages/Map1-niederländisch-nl.xlsx +++ tools/languages/Map1-niederländisch-nl.xlsx cannot compute difference between binary files ADDED tools/languages/Mappe1-deutsch-de.xlsx Index: tools/languages/Mappe1-deutsch-de.xlsx ================================================================== --- tools/languages/Mappe1-deutsch-de.xlsx +++ tools/languages/Mappe1-deutsch-de.xlsx cannot compute difference between binary files ADDED tools/languages/Mappe1-dänisch-da.xlsx Index: tools/languages/Mappe1-dänisch-da.xlsx ================================================================== --- tools/languages/Mappe1-dänisch-da.xlsx +++ tools/languages/Mappe1-dänisch-da.xlsx cannot compute difference between binary files ADDED tools/languages/Munkafüzet1-ungarisch-hu.xlsx Index: tools/languages/Munkafüzet1-ungarisch-hu.xlsx ================================================================== --- tools/languages/Munkafüzet1-ungarisch-hu.xlsx +++ tools/languages/Munkafüzet1-ungarisch-hu.xlsx cannot compute difference between binary files ADDED tools/languages/Sešit1-tschechisch-cs.xlsx Index: tools/languages/Sešit1-tschechisch-cs.xlsx ================================================================== --- tools/languages/Sešit1-tschechisch-cs.xlsx +++ tools/languages/Sešit1-tschechisch-cs.xlsx cannot compute difference between binary files ADDED tools/languages/Skoroszyt1-polnisch-pl.xlsx Index: tools/languages/Skoroszyt1-polnisch-pl.xlsx ================================================================== --- tools/languages/Skoroszyt1-polnisch-pl.xlsx +++ tools/languages/Skoroszyt1-polnisch-pl.xlsx cannot compute difference between binary files ADDED tools/languages/Työkirja1-finnisch-fi.xlsx Index: tools/languages/Työkirja1-finnisch-fi.xlsx ================================================================== --- tools/languages/Työkirja1-finnisch-fi.xlsx +++ tools/languages/Työkirja1-finnisch-fi.xlsx cannot compute difference between binary files ADDED tools/languages/Zošit1-slowakisch-sl.xlsx Index: tools/languages/Zošit1-slowakisch-sl.xlsx ================================================================== --- tools/languages/Zošit1-slowakisch-sl.xlsx +++ tools/languages/Zošit1-slowakisch-sl.xlsx cannot compute difference between binary files ADDED tools/languages/Βιβλίο1-griechisch-el.xlsx Index: tools/languages/Βιβλίο1-griechisch-el.xlsx ================================================================== --- tools/languages/Βιβλίο1-griechisch-el.xlsx +++ tools/languages/Βιβλίο1-griechisch-el.xlsx cannot compute difference between binary files ADDED tools/languages/Книга1-russisch-ru.xlsx Index: tools/languages/Книга1-russisch-ru.xlsx ================================================================== --- tools/languages/Книга1-russisch-ru.xlsx +++ tools/languages/Книга1-russisch-ru.xlsx cannot compute difference between binary files ADDED tools/languages/חוברת1-hebräisch-he.xlsx Index: tools/languages/חוברת1-hebräisch-he.xlsx ================================================================== --- tools/languages/חוברת1-hebräisch-he.xlsx +++ tools/languages/חוברת1-hebräisch-he.xlsx cannot compute difference between binary files ADDED tools/languages/الكتاب1-arabisch-ar.xlsx Index: tools/languages/الكتاب1-arabisch-ar.xlsx ================================================================== --- tools/languages/الكتاب1-arabisch-ar.xlsx +++ tools/languages/الكتاب1-arabisch-ar.xlsx cannot compute difference between binary files ADDED tools/languages/สมุดงาน1-thailändisch-th.xlsx Index: tools/languages/สมุดงาน1-thailändisch-th.xlsx ================================================================== --- tools/languages/สมุดงาน1-thailändisch-th.xlsx +++ tools/languages/สมุดงาน1-thailändisch-th.xlsx cannot compute difference between binary files ADDED tools/languages/工作簿1-chinesisch-zh.xlsx Index: tools/languages/工作簿1-chinesisch-zh.xlsx ================================================================== --- tools/languages/工作簿1-chinesisch-zh.xlsx +++ tools/languages/工作簿1-chinesisch-zh.xlsx cannot compute difference between binary files ADDED tools/languages/통합 문서1-koreanisch-ko.xlsx Index: tools/languages/통합 문서1-koreanisch-ko.xlsx ================================================================== --- tools/languages/통합 문서1-koreanisch-ko.xlsx +++ tools/languages/통합 문서1-koreanisch-ko.xlsx cannot compute difference between binary files