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