Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Purpose: Export new translations completed after the specified
- * date (line 21) either for the entire project or for the
- * selected files ("select_files" must be set to 'yes' — line 27)
- * to TMX file
- * #Files: Writes 'translated_after_<date_time>.tmx'
- * in the current project's root
- * #File format: TMX v.1.4
- * #Details: http://wp.me/p3fHEs-6z
- *
- * @author Kos Ivantsov
- * @date 2013-08-12
- * @version 0.3
- */
- /*
- * The date should be specified as "year-month-day HOURS:minutes"
- * If not specified or specified wrongly, the script will look for
- * translations that are newer than one day.
- */
- def newdate = ''
- /*
- * Set "select_files" to 'yes' if you want to use file selector
- * to specify files for export. If anything else is specified, the script
- * will work with the complete project.
- */
- select_files = ''
- import javax.swing.JFileChooser
- import org.omegat.util.StaticUtils
- import org.omegat.util.TMXReader
- import static javax.swing.JOptionPane.*
- import static org.omegat.util.Platform.*
- def prop = project.projectProperties
- if (!prop) {
- final def title = 'Export new translation'
- final def msg = 'Please try again after you open a project.'
- showMessageDialog null, msg, title, INFORMATION_MESSAGE
- return
- }
- try {
- newdate = new Date().parse("yyyy-MM-dd HH:mm", newdate)
- }
- catch (java.text.ParseException e) {
- newdate = new Date().minus(1)
- final def title = 'Wrong date format'
- final def msg = """\
- The date has been specified in a wrong format.
- The script will work with entries exactly one day old,
- i.e. changed after $newdate\
- """
- console.println msg
- showMessageDialog null, msg, title, INFORMATION_MESSAGE
- }
- namedate = new Date().parse("E MMM dd H:m:s z yyyy", newdate.toString()).format("MMM-dd-yyyy_HH.mm")
- def fileloc = prop.projectRoot+'translated_after_'+namedate+"${ (select_files == 'yes') ? "_select" : ''}"+'.tmx'
- exportfile = new File(fileloc)
- if (prop.isSentenceSegmentingEnabled())
- segmenting = TMXReader.SEG_SENTENCE
- else
- segmenting = TMXReader.SEG_PARAGRAPH
- def sourceLocale = prop.getSourceLanguage().toString()
- def targetLocale = prop.getTargetLanguage().toString()
- exportfile.write("", 'UTF-8')
- exportfile.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n", 'UTF-8')
- exportfile.append("<!DOCTYPE tmx SYSTEM \"tmx11.dtd\">\n", 'UTF-8')
- exportfile.append("<tmx version=\"1.4\">\n", 'UTF-8')
- exportfile.append(" <header\n", 'UTF-8')
- exportfile.append(" creationtool=\"OmegaTScripting\"\n", 'UTF-8')
- exportfile.append(" segtype=\"" + segmenting + "\"\n", 'UTF-8')
- exportfile.append(" o-tmf=\"OmegaT TMX\"\n", 'UTF-8')
- exportfile.append(" adminlang=\"EN-US\"\n", 'UTF-8')
- exportfile.append(" srclang=\"" + sourceLocale + "\"\n", 'UTF-8')
- exportfile.append(" datatype=\"plaintext\"\n", 'UTF-8')
- exportfile.append(" >\n", 'UTF-8')
- def hitcount = 0
- if ((select_files == 'yes')) {
- srcroot = new File(prop.getSourceRoot())
- sourceroot = prop.getSourceRoot().toString() as String
- JFileChooser fc = new JFileChooser(
- currentDirectory: srcroot,
- dialogTitle: "Choose files to export",
- fileSelectionMode: JFileChooser.FILES_ONLY,
- //the file filter must show also directories, in order to be able to look into them
- multiSelectionEnabled: true)
- if(fc.showOpenDialog() != JFileChooser.APPROVE_OPTION) {
- console.println "Canceled"
- return
- }
- if (!(fc.selectedFiles =~ sourceroot.replaceAll(/\\+/, '\\\\\\\\'))) {
- console.println "Selection outside of ${prop.getSourceRoot()} folder"
- final def title = 'Wrong file(s) selected'
- final def msg = "Files must be in ${prop.getSourceRoot()} folder."
- showMessageDialog null, msg, title, INFORMATION_MESSAGE
- return
- }
- fc.selectedFiles.each {
- fl = "${it.toString()}" - "$sourceroot"
- exportfile.append(" <prop type=\"Filename\">" + fl + "</prop>\n", 'UTF-8')
- }
- exportfile.append(" </header>\n", 'UTF-8')
- exportfile.append(" <body>\n", 'UTF-8')
- fc.selectedFiles.each{
- fl = "${it.toString()}" - "$sourceroot"
- files = project.projectFiles
- files.each{
- if ( "${it.filePath}" != "$fl" ) {
- println "Skipping to the next file"
- }else{
- it.entries.each {
- def info = project.getTranslationInfo(it)
- def changeId = info.changer
- def changeDate = info.changeDate
- def creationId = info.creator
- def creationDate = info.creationDate
- def alt = 'unknown'
- if (info.isTranslated()) {
- if (newdate.before(new Date(changeDate))){
- hitcount++
- source = StaticUtils.makeValidXML(it.srcText)
- target = StaticUtils.makeValidXML(info.translation)
- exportfile.append(" <tu>\n", 'UTF-8')
- exportfile.append(" <tuv xml:lang=\"" + sourceLocale + "\">\n", 'UTF-8')
- exportfile.append(" <seg>" + "$source" + "</seg>\n", 'UTF-8')
- exportfile.append(" </tuv>\n", 'UTF-8')
- exportfile.append(" <tuv xml:lang=\"" + targetLocale + "\"", 'UTF-8')
- exportfile.append(" changeid=\"${changeId ?: alt }\"", 'UTF-8')
- exportfile.append(" changedate=\"${ changeDate > 0 ? new Date(changeDate).format("yyyyMMdd'T'HHmmss'Z'") : alt }\"", 'UTF-8')
- exportfile.append(" creationid=\"${creationId ?: alt }\"", 'UTF-8')
- exportfile.append(" creationdate=\"${ creationDate > 0 ? new Date(creationDate).format("yyyyMMdd'T'HHmmss'Z'") : alt }\"", 'UTF-8')
- exportfile.append(">\n", 'UTF-8')
- exportfile.append(" <seg>" + "$target" + "</seg>\n", 'UTF-8')
- exportfile.append(" </tuv>\n", 'UTF-8')
- exportfile.append(" </tu>\n", 'UTF-8')
- }
- }
- }
- }
- }
- }
- } else {
- exportfile.append(" </header>\n", 'UTF-8')
- exportfile.append(" <body>\n", 'UTF-8')
- files = project.projectFiles
- files.each {
- it.entries.each {
- def info = project.getTranslationInfo(it)
- def changeId = info.changer
- def changeDate = info.changeDate
- def creationId = info.creator
- def creationDate = info.creationDate
- def alt = 'unknown'
- if (info.isTranslated()) {
- if (newdate.before(new Date(changeDate))){
- hitcount++
- source = StaticUtils.makeValidXML(it.srcText)
- target = StaticUtils.makeValidXML(info.translation)
- exportfile.append(" <tu>\n", 'UTF-8')
- exportfile.append(" <tuv xml:lang=\"" + sourceLocale + "\">\n", 'UTF-8')
- exportfile.append(" <seg>" + "$source" + "</seg>\n", 'UTF-8')
- exportfile.append(" </tuv>\n", 'UTF-8')
- exportfile.append(" <tuv xml:lang=\"" + targetLocale + "\"", 'UTF-8')
- exportfile.append(" changeid=\"${changeId ?: alt }\"", 'UTF-8')
- exportfile.append(" changedate=\"${ changeDate > 0 ? new Date(changeDate).format("yyyyMMdd'T'HHmmss'Z'") : alt }\"", 'UTF-8')
- exportfile.append(" creationid=\"${creationId ?: alt }\"", 'UTF-8')
- exportfile.append(" creationdate=\"${ creationDate > 0 ? new Date(creationDate).format("yyyyMMdd'T'HHmmss'Z'") : alt }\"", 'UTF-8')
- exportfile.append(">\n", 'UTF-8')
- exportfile.append(" <seg>" + "$target" + "</seg>\n", 'UTF-8')
- exportfile.append(" </tuv>\n", 'UTF-8')
- exportfile.append(" </tu>\n", 'UTF-8')
- }
- }
- }
- }
- }
- exportfile.append(" </body>\n", 'UTF-8')
- exportfile.append("</tmx>", 'UTF-8')
- final def title = 'TMX file written'
- final def msg = "$hitcount TU's written to " + exportfile.toString()
- console.println msg
- showMessageDialog null, msg, title, INFORMATION_MESSAGE
- return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement