Class: IbtoolTranslation::Core

Inherits:
Object
  • Object
show all
Defined in:
lib/ibtoolTranslation.rb

Instance Method Summary collapse

Instance Method Details

#addtionData(fileName) ⇒ Object



111
112
113
# File 'lib/ibtoolTranslation.rb', line 111

def addtionData(fileName)
  self.readFile(fileName).scan(/".*" *= *"(.*)";\n/).uniq.flatten
end

#baseDataForTransText(transText) ⇒ Object



105
106
107
# 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) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# 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) ⇒ Object



122
123
124
125
126
127
128
129
130
131
# 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) ⇒ Object



72
73
74
75
76
77
78
79
80
81
# 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) ⇒ Object



40
41
42
# File 'lib/ibtoolTranslation.rb', line 40

def makeDirectory(lprojs) 
  lprojs.each {|lproj| FileUtils.mkdir_p(lproj) }
end

#readFile(fileName) ⇒ Object



119
120
121
# File 'lib/ibtoolTranslation.rb', line 119

def readFile(fileName)
  FileTest.exist?(fileName) ? File.read(fileName,  :mode => "rb", :encoding => "UTF-16LE").toutf8 : ""
end

#storyboards(sourceDir) ⇒ Object



114
115
116
117
118
# 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

#translate(translationData, translationDict) ⇒ Object



91
92
93
94
95
# 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) ⇒ Object



65
66
67
68
69
70
71
# 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) ⇒ Object



56
57
58
59
60
61
62
63
64
# 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) ⇒ Object



83
84
85
86
87
88
89
90
# 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) ⇒ Object



99
100
101
# File 'lib/ibtoolTranslation.rb', line 99

def translationData(fileName)
  self.readFile(fileName).scan(/"(.*)" *= *"(.*)";\n/).uniq
end

#translationDict(transText) ⇒ Object



96
97
98
# File 'lib/ibtoolTranslation.rb', line 96

def translationDict(transText)
  Hash[*(transText.scan(/"(.*)"\s*=\s*"(.*)";?\s*\n/).flatten)]
end

#transText(fileName) ⇒ Object



108
109
110
# File 'lib/ibtoolTranslation.rb', line 108

def transText(fileName)
  self.readFile(fileName)
end

#update(dirName, sourceDir, lps, string) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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) ⇒ Object



102
103
104
# File 'lib/ibtoolTranslation.rb', line 102

def writeTransText(fileName, transText)
  File.open(fileName, "w:UTF-16"){|f| f.write transText}
end