Created
December 25, 2013 12:24
-
-
Save velosipedist/8122803 to your computer and use it in GitHub Desktop.
TranslatorPlugin meditation for https://github.com/velosipedist/sami-translator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# PLUGIN MEDIATOR FOR DOC-BASED KEYS | |
class docStreamWrapper | |
# ... garbage | |
def getContents(filename) | |
return translator.translateFile(filename.withoutProtocol 'doc://') | |
end | |
end | |
# PLUGIN MEDIATOR FOR SIGNATURE BASED KEYS | |
class classVisitor | |
def visit(classRefl) | |
messages = self.iterateMessages classRefl | |
translator.translateClassReflection classRefl, messages | |
end | |
end | |
# TRANSLATOR PLUGIN | |
class translator | |
# make running cheaper | |
@translateOnly = true | |
def translateFile (filename) | |
src = file.read filename | |
entries = @phpdocExtractor.extract filename | |
entries = localizeMessages filename, entries | |
# or self.trigger "ClassEntriesUpdated" ? | |
replaces = entries.toArray | |
return src.replace replaces | |
end | |
def translateClassReflection (classRefl, messages) | |
entries = new Entries | |
messages.each do |msg| | |
entries.add msg[0] | |
end | |
entries = translator.localizeMessages classRefl.fileName, entries | |
messages.each do | msg | | |
transl = entries.find msg[0] | |
msg[1].setDocComment transl.getTranslation | |
end | |
end | |
# process entries for certain file | |
def localizeMessages(srcFileName, rawEntries) | |
# from Class.{$lang}.mo | |
moEntries = @moExtractor.extract(self.getMoName(srcFileName)) | |
rawEntries.each do | rawTranslation | | |
if trans = moEntries.find rawTranslation | |
rawTranslation = trans | |
end | |
end | |
if !@translateOnly | |
self.updateTranslationFiles srcFileName, entries | |
end | |
rawEntries | |
end | |
# save new translation files | |
def updateTranslationFiles (srcFileName, entries) | |
className = self.classNameFromFilename srcFileName | |
begin | |
oldTplEntries = @poExtractor.extract "{$className}.pot" | |
rescue Exception => e | |
oldTplEntries = tplEntries | |
end | |
tplEntries = self.merge oldTplEntries, tplEntries | |
# save new template | |
@poGenerator.generate "{$className}.pot", tplEntries | |
# poEntries = @poExtractor.extract self.getPoName(srcFileName) | |
# tplEntries.each do |entry| | |
# if !poEntries.has entry | |
# poEntries.insert entry | |
# end | |
# end | |
# summarize translations | |
@poGenerator.generate "{$className}.{$@lang}.po" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment