23.10.2013, 13:27 (Dieser Beitrag wurde zuletzt bearbeitet: 23.10.2013, 15:59 von norre.)
Hallo,
ich muss in nächster Zeit einen Katalog in eine andere Sprache übersetzen.
Jetzt bin ich über das hier gestolpert - Sysfilter.
Sysfilter exportiert allen Text als Worlddokument, dort kann man den Text ändern / Übersetzen, danach wird automatisch der Text in der CDR aktualisieert
Kennt jemand das Programm? http://www.ecm-engineering.com/shop1/pro...ucts_id=43
Werde mir mal die Demo laden
Habe mir schon gedacht, wenn man in Draw bei Text suchen und ersetzen z.B eine Exzelliste laden könnte, in einer Spalte die Originalwörter in der nächsten Spalte die Übersetzung................ wir wohl nicht kommen ;-)
24.10.2013, 03:59 (Dieser Beitrag wurde zuletzt bearbeitet: 24.10.2013, 04:04 von koter.)
norre schrieb:Habe mir schon gedacht, wenn man in Draw bei Text suchen und ersetzen z.B eine Exzelliste laden könnte, in einer Spalte die Originalwörter in der nächsten Spalte die Übersetzung................ wir wohl nicht kommen ;-)
Hallo norre,
falls Du mit Exzelliste eine Exceltabelle meinst, würde das mit einem Makro gehen.
Code:
Sub VonXlErsetzen()
Dim ap As Page, p As Page
Set ap = ActivePage
Set xl = GetObject(, "Excel.Application")
i = 1
ActiveDocument.BeginCommandGroup "Text Ersetzen"
Do
t = xl.Cells(i, 1).Value
e = xl.Cells(i, 2).Value
If t = "" Then
Exit Do
Else
For Each p In ActiveDocument.Pages
p.TextReplace t, e, True, False
Next p
End If
i = i + 1
Loop
Set xl = Nothing
ActiveDocument.EndCommandGroup
ap.Activate
End Sub
Zum Ausführen muß eine Exceltabelle geöffnet sein, bei der in Spalte A die Originalwörter und in Spalte B die übersetzten Wörter stehen. Bei der ersten leeren Zeile bricht das Makro ab. Es sollte keine andere Exceltabelle geöffnet sein.
So kann man Wörter ersetzen, aber was ist mit der Syntax?
25.10.2013, 10:01 (Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2013, 10:35 von norre.)
koter schrieb:falls Du mit Exzelliste eine Exceltabelle meinst
Hallo Koter,
upps, ja ich meine Excel.
Mensch du bist ja der Wahnsinn, wie du für jedes "Problem" ein Macro herzauberst. :daumen:
Wie kann man dir mal was gutes tun? :bierkasten:
Ich habe hier auch einen Produktkatalog da sind nur Überschriften z.B. Ösen und darunter die Bestellnummern. Aber du hast natürlich recht, wenn es mehr Text ist wird eine Übersetzung wahrscheinlich recht lustig.
Gerade gelesen, da hatten die Macrogurus im Corelforum das Vorhaben per Macro Google als Übersetzter einzubinden, sind dann anscheinend auch über die Syntax gestolpert und haben es lieber gelassen.
Ich habe jetzt die Sysfilter-Demo mal getestet, zuerst wurden die Umlaute als Fragezeichen und chinesische Schriftzeichen dargestellt, aber durch eine Einstellung im Word 2000 wurde das behoben (1). Ansonsten funktioniert es wie beschrieben. Nach den Rückschreiben des geänderten Worddokuments wird allerdings bei ausgewählten Textrahmen die verwendete Schrift nicht angezeigt (2), in der Statusleiste allerdings schon. Auf den PDF export hat dies allerdings anscheinend keinen Einfluss
Die Sysfilter-Demo lief bei mir nur halb. Erst hat der Vieren-Wächter Alarm gemacht (kann natürlich eine Falschmeldung gewesen sein) dann, nach Deaktivierung desselben, klappte das Rückschreiben von Sysfilter nach Corel nicht. Das liegt vielleicht an X4.
Beim Suchen und Ersetzen mit Excel ist mir aufgefallen, dass man danach die Übersetzungstabelle nicht mehr ändern kann, weil der Text in Corel ersetzt wurde und somit nicht mehr gefunden wird. Bei automatischer Übersetzung wird man aber wohl nicht um einige Änderungen herumkommen.
Falls Du noch über eine Excel-Lösung nachdenkst, kannst Du Dir mal folgenden Ansatz ansehen.
Dabei werden die einzelnen Texte über die StaticID identifiziert. Dadurch sind auch nachträgliche Änderungen an der Übersetzungstabelle möglich. Das Makro ist natürlich noch sehr experimentell, es bearbeitet auch nur Grafiktext, das kann man aber umstricken.
Code:
Sub NachExcel()
Dim ap As Page, p As Page
Dim s As Shape
Set ap = ActivePage
Set xl = GetObject(, "Excel.Application")
For i = 1 To 4
xl.Cells(1, i).Font.Bold = True
Next i
i = 1
xl.Cells(i, 1).Value = "Seite"
xl.Cells(i, 2).Value = "StaticID"
xl.Cells(i, 3).Value = "Text"
xl.Cells(i, 4).Value = "Übersetzung"
For Each p In ActiveDocument.Pages
For Each s In p.Shapes
If s.Type = cdrTextShape Then
If s.Text.Type = cdrArtisticText Then
i = i + 1
xl.Cells(i, 1).Value = p.Index
xl.Cells(i, 2).Value = s.StaticID
xl.Cells(i, 3).Value = s.Text.Story.Text
xl.Cells(i, 4).Value = s.Text.Story.Text
End If
End If
Next
Next
xl.Columns("A:D").EntireColumn.AutoFit
Set xl = Nothing
End Sub
Sub VonExcel()
Dim ap As Page, p As Page
Dim s As Shape
Set ap = ActivePage
Set xl = GetObject(, "Excel.Application")
ActiveDocument.BeginCommandGroup "Text Ersetzen"
i = 2
Do
Seite = xl.Cells(i, 1).Value
StatID = xl.Cells(i, 2).Value
Übersetzung = xl.Cells(i, 4).Value
If Seite = "" Then
Exit Do
Else
Set s = ActiveDocument.Pages(Seite).FindShape(StaticID:=StatID)
s.Text.Story.Text = Übersetzung
End If
i = i + 1
Loop
ActiveDocument.EndCommandGroup
Set xl = Nothing
End Sub
Über sysfilter bin ich gestolpert, da mein Spezl seinen anderen Katalog, leider mit viel mehr Text und so um die 200 Seiten jetzt doch auch in Niederländisch haben will und dann alles mir Copy/ Paste reinkopieren, Puh.
Allerdings hat das Progrämmchen auch seinen Preis und ignoriert den erzwungenen Zeilenumbruch (siehe BUg X6.4 Mengentext)
Spelzl rief grad an, er wills jetzt auch noch in zwei anderen Sprachen haben also werde ich mich wahrscheinlich doch auf Sysfilter einschießen - Spezl zahlt
norre schrieb:Nach den Rückschreiben des geänderten Worddokuments wird allerdings bei ausgewählten Textrahmen die verwendete Schrift nicht angezeigt
Hallo, habe Sysfilter getestet - funktioniert
zu1) das war ein Problem der Demo, da diese mit einer anderen Schrift markiert wurde (klar zwei verschiedene Schriften!)
Hallo,
wenns interessiert, nochmal kurz zu Sysfilter.
Beim exportierten Worddokument wird jeder Textblock aus Corel mit Tags versehen. Diese dürfen nicht verändert oder verschoben werden sonst passt es nicht mehr beim Zurückschreiben.
Ich habe dem Herren der das übersetzen soll mal ne Testdatei geschickt, leider hat er doch was gelöscht. Man muß da höllisch aufpassen.
Ich werde es doch mit einem normalen Worddokument machen und den Text mit Copy/Past kopieren.
vielleicht geht es auch wie im Excel-Beispiel oben, in Word.
Die SUB nachWord im folgenden Makro erstellt ein Word-Dokument, bei dem die Originaltexte in geschützen Abschnitten, liegen die Grau hinterlegt sind.
(Dazu muss ein leeres Word-Dokument geöffnet sein)
Diese können nicht geändert werden. In die darunterligenden weißen Abschnitte trägt man die Übersetzung ein.
Danach führt man die SUB vonWord aus, welche die Originatexte durch die Übersetzung austauscht.
Code:
Sub zuWord()
Dim p As Page, s As Shape, t As String
Set wd = GetObject(, "Word.Application")
wd.Application.Activate
With wd.Selection.ParagraphFormat
.SpaceBefore = 0
.SpaceBeforeAuto = False
.SpaceAfter = 0
.SpaceAfterAuto = False
.LineSpacingRule = 0
.WidowControl = True
.KeepWithNext = True
.KeepTogether = True
End With
For Each p In ActiveDocument.Pages
For Each s In p.Shapes
If s.Type = cdrTextShape Then
t = s.Text.Story.Text
sid = s.StaticID
With wd.Selection
.TypeText t
.Sections(1).Range.Bookmarks.Add "SID" & sid
.TypeParagraph
.InsertBreak Type:=3
.InsertBreak Type:=3
End With
End If
Next
Next
For Each Abschnitt In wd.ActiveDocument.Sections
If Abschnitt.index Mod 2 = 1 Then
Abschnitt.Range.Shading.BackgroundPatternColor = 14737632
Abschnitt.ProtectedForForms = True
Else
Abschnitt.ProtectedForForms = False
End If
Next
wd.ActiveDocument.Protect Password:="norre", NoReset:=False, Type:=2
Set wd = Nothing
End Sub
Sub vonWord()
Dim p As Page
Dim s As Shape
Set wd = GetObject(, "Word.Application")
ActiveDocument.BeginCommandGroup "Übersetzung einlesen"
For Each Abschnitt In wd.ActiveDocument.Sections
If Abschnitt.ProtectedForForms = True Then
If Abschnitt.Range.Bookmarks.Count > 0 Then
sid = Right(Abschnitt.Range.Bookmarks(1), Len(Abschnitt.Range.Bookmarks(1)) - 3)
End If
Else
t = Left(Abschnitt.Range.Text, Len(Abschnitt.Range.Text) - 1)
For Each p In ActiveDocument.Pages
Set s = p.FindShape(StaticID:=sid)
If s Is Nothing Then
Else
s.Text.Story.Text = t
End If
Next
End If
Next
ActiveDocument.EndCommandGroup
Set wd = Nothing
End Sub
Hallo Koter,
ich weiß jetzt nicht mehr was ich sagen soll, dass ist ja der Wahnsinn was du da machst. :daumen:
Ich bin heute ein bisserl im Stress, deshalb konnte ich mir dein neues Macro nur kurz anschauen, aber es funktioniert in X6.
Dass man den Originaltext nicht ändern kann, bei der Übersetzung also immer vor sich hat, ist eine Super Idee.
Und das ist jetzt bei mir auch ein kleines Problem, ich habe auch längere Texte mit Bestellnummern, Stück, Abmessungen, da wird ja nichts übersetzt, müsste man also nochmals eingeben.
Meinst du das es möglich ist, dass der Text in Word aus dem geschützten Bereich nochmals darunter bearbeitbar aufgeführt ist ?
Wenn also nichts übersetzt / geändert wird, der Text trotzdem in Corel noch vorhanden ist?
wenn ein weißer Abschnitt leer gelassen wird sollte es mit folgender, geäderter SUB gehen:
Code:
Sub vonWord()
Dim p As Page
Dim s As Shape
Set wd = GetObject(, "Word.Application")
ActiveDocument.BeginCommandGroup "Übersetzung einlesen"
For Each Abschnitt In wd.ActiveDocument.Sections
If Abschnitt.ProtectedForForms = True Then
If Abschnitt.Range.Bookmarks.Count > 0 Then
sid = Right(Abschnitt.Range.Bookmarks(1), Len(Abschnitt.Range.Bookmarks(1)) - 3)
End If
Else
t = Left(Abschnitt.Range.Text, Len(Abschnitt.Range.Text) - 1)
For Each p In ActiveDocument.Pages
Set s = p.FindShape(StaticID:=sid)
If s Is Nothing Then
Else
t2 = NDers(t)
If Len(t2) > 0 Then
s.Text.Story.Text = t
End If
End If
Next
End If
Next
ActiveDocument.EndCommandGroup
Set wd = Nothing
End Sub
Function NDers(ByVal t As String) As String
t = Trim(t)
et = Array(Chr(10), Chr(11), Chr(13), Chr(32))
For i = 0 To UBound(et)
t = Replace(t, et(i), "")
Next i
NDers = t
End Function