Class: IbtoolTranslation::Core

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

Instance Method Summary collapse

Instance Method Details

#addtionData(fileName) ⇒ Object



104
105
106
# File 'lib/ibtoolTranslation.rb', line 104

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

#baseDataForTransText(transText) ⇒ Object



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

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
# 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

    self.makeDirectory(lprojs)
  self.createTranslation(sourceLproj, lprojs, storyboards)
  unless (string)
    self.deleteStringsFile(sourceLproj, lprojs)
  end
end

#createTranslation(sourceDir, lprojs, storyboards) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/ibtoolTranslation.rb', line 37

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



115
116
117
118
119
120
121
122
123
124
# File 'lib/ibtoolTranslation.rb', line 115

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



66
67
68
69
70
71
72
73
74
# File 'lib/ibtoolTranslation.rb', line 66

def deleteStringsFile(sourceDir, lprojs)
  storyboards = self.storyboards sourceDir

  lprojs.each {|lproj|
    storyboards.each { |fileName|
      File::delete("#{lproj}/#{fileName}.strings")
    }
  }
end

#makeDirectory(lprojs) ⇒ Object



34
35
36
# File 'lib/ibtoolTranslation.rb', line 34

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

#readFile(fileName) ⇒ Object



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

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

#storyboards(sourceDir) ⇒ Object



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

def storyboards(sourceDir)
  Dir.open(sourceDir).map {|f|
    f.gsub(/(.*)\.storyboard/, '\1').gsub(/\w*\.\w*/, "")
  }.select {|f| f != "" }
end

#translate(translationData, translationDict) ⇒ Object



84
85
86
87
88
# File 'lib/ibtoolTranslation.rb', line 84

def translate(translationData, translationDict)
  translationData.map{|arr|
    (translationDict.key? arr[1]) ? [arr[0], translationDict[arr[1]]] : arr
  }
end

#translateStoryboards(sourceDir, lprojs, storyboards) ⇒ Object



59
60
61
62
63
64
65
# File 'lib/ibtoolTranslation.rb', line 59

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



50
51
52
53
54
55
56
57
58
# File 'lib/ibtoolTranslation.rb', line 50

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



76
77
78
79
80
81
82
83
# File 'lib/ibtoolTranslation.rb', line 76

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



92
93
94
# File 'lib/ibtoolTranslation.rb', line 92

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

#translationDict(transText) ⇒ Object



89
90
91
# File 'lib/ibtoolTranslation.rb', line 89

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

#transText(fileName) ⇒ Object



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

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

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



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/ibtoolTranslation.rb', line 21

def update(dirName, sourceDir, lps, string)
    lprojs = lps.map {|lp| dirName + lp + ".lproj"}
    sourceLproj = dirName + sourceDir + ".lproj"
  storyboards = self.storyboards sourceLproj

    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



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

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