class IbtoolTranslation::Core

Public Instance Methods

addtionData(fileName) click to toggle source
# File lib/ibtoolTranslation.rb, line 111
def addtionData(fileName)
  self.readFile(fileName).scan(/".*" *= *"(.*)";\n/).uniq.flatten
end
baseDataForTransText(transText) click to toggle source
# File lib/ibtoolTranslation.rb, line 105
def baseDataForTransText(transText)
  (transText.scan(/"(.*)"\s*=\s*".*";?\s*\n/) + transText.scan(/"(.*)";?\s*\n/)).flatten
end
create(dirName, sourceDir, lps, string) click to toggle source
# File lib/ibtoolTranslation.rb, line 10
def create(dirName, sourceDir, lps, string)
  lprojs = lps.map {|lp| dirName + lp + ".lproj"}
  sourceLproj = dirName + sourceDir + ".lproj"
  storyboards = self.storyboards sourceLproj

  if (string)
    self.deleteStringsFile(sourceLproj, lprojs)
  end
  self.makeDirectory(lprojs)
  self.createTranslation(sourceLproj, lprojs, storyboards)
  unless (string)
    self.deleteStringsFile(sourceLproj, lprojs)
  end
end
createTranslation(sourceDir, lprojs, storyboards) click to toggle source
# File lib/ibtoolTranslation.rb, line 43
def createTranslation(sourceDir, lprojs, storyboards)
  lprojs.each {|lproj|
    transText = self.transText("#{lproj}/Translation.strings")
    baseData = self.baseDataForTransText(transText)
    storyboards.each { |fileName|
      `ibtool --generate-stringsfile #{lproj}/#{fileName}.strings #{sourceDir}/#{fileName}.storyboard`
      addtionData = self.addtionData("#{lproj}/#{fileName}.strings")
      aData = addtionData.select{|f| baseData.include?(f) == false}
      transText = transText + aData.map{|f| "\"#{f}\";\n"}.join("")
    }
    self.writeTransText("#{lproj}/Translation.strings", transText)
  }
end
deleteDir(dir) click to toggle source
# File lib/ibtoolTranslation.rb, line 122
def deleteDir(dir)
  Dir::glob(dir + "**/").sort {
    |a,b| b.split('/').size <=> a.split('/').size
  }.each {|d|
    Dir::foreach(d) {|f|
      File::delete(d+f) if ! (/\.+$/ =~ f)
    }
    Dir::rmdir(d)
  }
end
deleteStringsFile(sourceDir, lprojs) click to toggle source
# File lib/ibtoolTranslation.rb, line 72
def deleteStringsFile(sourceDir, lprojs)
  storyboards = self.storyboards sourceDir

  lprojs.each {|lproj|
    storyboards.each { |fileName|
      filePath = "#{lproj}/#{fileName}.strings"
      File::delete(filePath) if FileTest.exist?(filePath)
    }
  }
end
makeDirectory(lprojs) click to toggle source
# File lib/ibtoolTranslation.rb, line 40
def makeDirectory(lprojs) 
  lprojs.each {|lproj| FileUtils.mkdir_p(lproj) }
end
readFile(fileName) click to toggle source
# File lib/ibtoolTranslation.rb, line 119
def readFile(fileName)
  FileTest.exist?(fileName) ? File.read(fileName,  :mode => "rb", :encoding => "UTF-16LE").toutf8 : ""
end
storyboards(sourceDir) click to toggle source
# File lib/ibtoolTranslation.rb, line 114
def storyboards(sourceDir)
  Dir.open(sourceDir).map {|f|
    f.gsub(/(.*)\.storyboard/, '\1').gsub(/\w*\.\w*/, "")
  }.select {|f| f != "" }
end
transText(fileName) click to toggle source
# File lib/ibtoolTranslation.rb, line 108
def transText(fileName)
  self.readFile(fileName)
end
translate(translationData, translationDict) click to toggle source
# File lib/ibtoolTranslation.rb, line 91
def translate(translationData, translationDict)
  translationData.map{|arr|
    (translationDict.key? arr[1]) ? [arr[0], translationDict[arr[1]]] : arr
  }
end
translateStoryboards(sourceDir, lprojs, storyboards) click to toggle source
# File lib/ibtoolTranslation.rb, line 65
def translateStoryboards(sourceDir, lprojs, storyboards)
  lprojs.each {|lproj|      
    storyboards.each { |fileName|
      `ibtool --write #{lproj}/#{fileName}.storyboard -d #{lproj}/#{fileName}.strings  #{sourceDir}/#{fileName}.storyboard`
    }
  }
end
translateStrings(sourceDir, lprojs, storyboards) click to toggle source
# File lib/ibtoolTranslation.rb, line 56
def translateStrings(sourceDir, lprojs, storyboards)
  lprojs.each {|lproj|
    transText = self.transText("#{lproj}/Translation.strings")        
    storyboards.each { |fileName|
      self.translateStringsFile(lproj, fileName, transText)
      puts fileName unless $debug
    }
  }
end
translateStringsFile(lproj, fileName, transText) click to toggle source
# File lib/ibtoolTranslation.rb, line 83
def translateStringsFile(lproj, fileName, transText)
  translationData = self.translationData("#{lproj}/#{fileName}.strings")
  translationDict = self.translationDict(transText)

  aData = translate(translationData, translationDict)
  transText = aData.map{|f| "\"#{f[0]}\" = \"#{f[1]}\";\n"}.join("")
  File.open("#{lproj}/#{fileName}.strings", "w:UTF-16"){|f| f.write transText}
end
translationData(fileName) click to toggle source
# File lib/ibtoolTranslation.rb, line 99
def translationData(fileName)
  self.readFile(fileName).scan(/"(.*)" *= *"(.*)";\n/).uniq
end
translationDict(transText) click to toggle source
# File lib/ibtoolTranslation.rb, line 96
def translationDict(transText)
  Hash[*(transText.scan(/"(.*)"\s*=\s*"(.*)";?\s*\n/).flatten)]
end
update(dirName, sourceDir, lps, string) click to toggle source
# File lib/ibtoolTranslation.rb, line 24
def update(dirName, sourceDir, lps, string)
  lprojs = lps.map {|lp| dirName + lp + ".lproj"}
  sourceLproj = dirName + sourceDir + ".lproj"
  storyboards = self.storyboards sourceLproj

  if (string)
    self.deleteStringsFile(sourceLproj, lprojs)
  end
  self.makeDirectory(lprojs)
  self.createTranslation(sourceLproj, lprojs, storyboards)
  self.translateStrings(sourceLproj, lprojs, storyboards)
  unless (string)
    self.translateStoryboards(sourceLproj, lprojs, storyboards)
    self.deleteStringsFile(sourceLproj, lprojs)
  end
end
writeTransText(fileName, transText) click to toggle source
# File lib/ibtoolTranslation.rb, line 102
def writeTransText(fileName, transText)
  File.open(fileName, "w:UTF-16"){|f| f.write transText}
end