Skip to content

Instantly share code, notes, and snippets.

@velosipedist
Created December 25, 2013 12:24
Show Gist options
  • Save velosipedist/8122803 to your computer and use it in GitHub Desktop.
Save velosipedist/8122803 to your computer and use it in GitHub Desktop.
TranslatorPlugin meditation for https://github.com/velosipedist/sami-translator
# 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