Commit b18c050f authored by Michal Čihař's avatar Michal Čihař

Merge remote-tracking branch 'origin/master'

parents 9f1e1473 2b870ddf
...@@ -3,53 +3,53 @@ ...@@ -3,53 +3,53 @@
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# #
#, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-03-23 07:46+0100\n" "POT-Creation-Date: 2012-03-23 07:46+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: 2012-03-23 11:03+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: Panagiotis Papazoglou <papaz_p@yahoo.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n" "Language: el\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 0.8\n"
#: media/js/loader.js:36 #: media/js/loader.js:36
msgid "Failed translation" msgid "Failed translation"
msgstr "" msgstr "Αποτυχημένη μετάφραση"
#: media/js/loader.js:36 #: media/js/loader.js:36
msgid "The request for machine translation has failed." msgid "The request for machine translation has failed."
msgstr "" msgstr "Το αίτημα για μηχανική μετάφραση απέτυχε."
#: media/js/loader.js:36 #: media/js/loader.js:36
msgid "Error details:" msgid "Error details:"
msgstr "" msgstr "Λεπτομέρειες σφάλματος:"
#: media/js/loader.js:55 #: media/js/loader.js:55
msgid "Translate using Apertium" msgid "Translate using Apertium"
msgstr "" msgstr "Μετάφραση με χρήση του Apertium"
#: media/js/loader.js:70 #: media/js/loader.js:70
msgid "Translate using Microsoft Translator" msgid "Translate using Microsoft Translator"
msgstr "" msgstr "Μετάφραση με χρήση του Microsoft Translator"
#: media/js/loader.js:84 #: media/js/loader.js:84
msgid "Translate using MyMemory" msgid "Translate using MyMemory"
msgstr "" msgstr "Μετάφραση με χρήση του MyMemory"
#: media/js/loader.js:158 #: media/js/loader.js:158
msgid "Sort this column" msgid "Sort this column"
msgstr "" msgstr "Ταξινόμηση αυτής της στήλης"
#: media/js/loader.js:188 #: media/js/loader.js:188
msgid "AJAX request to load this content has failed!" msgid "AJAX request to load this content has failed!"
msgstr "" msgstr "Το αίτημα AJAX για φόρτωση αυτού του περιεχομένου απέτυχε!"
#: media/js/loader.js:202 #: media/js/loader.js:202
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr "Φόρτωση..."
...@@ -43,6 +43,7 @@ LANGUAGES = ( ...@@ -43,6 +43,7 @@ LANGUAGES = (
('cs', u'Česky'), ('cs', u'Česky'),
('de', 'Deutsch'), ('de', 'Deutsch'),
('en', 'English'), ('en', 'English'),
('el', 'Ελληνικά'),
('es', u'Español'), ('es', u'Español'),
('fr', u'Français'), ('fr', u'Français'),
('nl', 'Nederlands'), ('nl', 'Nederlands'),
......
...@@ -68,7 +68,7 @@ IGNORE_SIMILAR = set([ ...@@ -68,7 +68,7 @@ IGNORE_SIMILAR = set([
]) | IGNORE_WORDS ]) | IGNORE_WORDS
class TranslationManager(models.Manager): class TranslationManager(models.Manager):
def update_from_blob(self, subproject, code, path, blob, force = False): def update_from_blob(self, subproject, code, path, blob_hash, force = False):
''' '''
Parses translation meta info and creates/updates translation object. Parses translation meta info and creates/updates translation object.
''' '''
...@@ -77,7 +77,7 @@ class TranslationManager(models.Manager): ...@@ -77,7 +77,7 @@ class TranslationManager(models.Manager):
language = lang, language = lang,
subproject = subproject, subproject = subproject,
filename = path) filename = path)
trans.update_from_blob(blob, force) trans.update_from_blob(blob_hash, force)
class UnitManager(models.Manager): class UnitManager(models.Manager):
def update_from_unit(self, translation, unit, pos): def update_from_unit(self, translation, unit, pos):
......
...@@ -113,49 +113,51 @@ class SubProject(models.Model): ...@@ -113,49 +113,51 @@ class SubProject(models.Model):
Ensures repository is correctly configured and points to current remote. Ensures repository is correctly configured and points to current remote.
''' '''
# Create/Open repo # Create/Open repo
repo = self.get_repo() gitrepo = self.get_repo()
# Get/Create origin remote # Get/Create origin remote
try: try:
origin = repo.remotes.origin origin = gitrepo.remotes.origin
except: except:
repo.git.remote('add', 'origin', self.repo) gitrepo.git.remote('add', 'origin', self.repo)
origin = repo.remotes.origin origin = gitrepo.remotes.origin
# Check remote source # Check remote source
if origin.url != self.repo: if origin.url != self.repo:
repo.git.remote('set-url', 'origin', self.repo) gitrepo.git.remote('set-url', 'origin', self.repo)
# Update # Update
logger.info('updating repo %s', self.__unicode__()) logger.info('updating repo %s', self.__unicode__())
try: try:
repo.git.remote('update', 'origin') gitrepo.git.remote('update', 'origin')
except Exception, e: except Exception, e:
logger.error('Failed to update Git repo: %s', str(e)) logger.error('Failed to update Git repo: %s', str(e))
del gitrepo
def configure_branch(self): def configure_branch(self):
''' '''
Ensures local tracking branch exists and is checkouted. Ensures local tracking branch exists and is checkouted.
''' '''
repo = self.get_repo() gitrepo = self.get_repo()
try: try:
head = repo.heads[self.branch] head = gitrepo.heads[self.branch]
except: except:
repo.git.branch('--track', self.branch, 'origin/%s' % self.branch) gitrepo.git.branch('--track', self.branch, 'origin/%s' % self.branch)
head = repo.heads[self.branch] head = gitrepo.heads[self.branch]
repo.git.checkout(self.branch) gitrepo.git.checkout(self.branch)
del gitrepo
def update_branch(self): def update_branch(self):
''' '''
Updates current branch to match remote (if possible). Updates current branch to match remote (if possible).
''' '''
repo = self.get_repo() gitrepo = self.get_repo()
logger.info('pulling from remote repo %s', self.__unicode__()) logger.info('pulling from remote repo %s', self.__unicode__())
repo.remotes.origin.update() gitrepo.remotes.origin.update()
try: try:
repo.git.merge('origin/%s' % self.branch) gitrepo.git.merge('origin/%s' % self.branch)
logger.info('merged remote into repo %s', self.__unicode__()) logger.info('merged remote into repo %s', self.__unicode__())
except Exception, e: except Exception, e:
status = repo.git.status() status = gitrepo.git.status()
repo.git.merge('--abort') gitrepo.git.merge('--abort')
logger.warning('failed merge on repo %s', self.__unicode__()) logger.warning('failed merge on repo %s', self.__unicode__())
msg = 'Error:\n%s' % str(e) msg = 'Error:\n%s' % str(e)
msg += '\n\nStatus:\n' + status msg += '\n\nStatus:\n' + status
...@@ -163,13 +165,14 @@ class SubProject(models.Model): ...@@ -163,13 +165,14 @@ class SubProject(models.Model):
'failed merge on repo %s' % self.__unicode__(), 'failed merge on repo %s' % self.__unicode__(),
msg msg
) )
del gitrepo
def get_translation_blobs(self): def get_translation_blobs(self):
''' '''
Scans directory for translation blobs and returns them as list. Iterator over translations in filesystem.
''' '''
repo = self.get_repo() gitrepo = self.get_repo()
tree = repo.tree() tree = gitrepo.tree()
# Glob files # Glob files
prefix = os.path.join(self.get_path(), '') prefix = os.path.join(self.get_path(), '')
...@@ -178,16 +181,17 @@ class SubProject(models.Model): ...@@ -178,16 +181,17 @@ class SubProject(models.Model):
yield ( yield (
self.get_lang_code(filename), self.get_lang_code(filename),
filename, filename,
tree[filename] tree[filename].hexsha
) )
del gitrepo
def create_translations(self, force = False): def create_translations(self, force = False):
''' '''
Loads translations from git. Loads translations from git.
''' '''
for code, path, blob in self.get_translation_blobs(): for code, path, blob_hash in self.get_translation_blobs():
logger.info('checking %s', path) logger.info('checking %s', path)
Translation.objects.update_from_blob(self, code, path, blob, force) Translation.objects.update_from_blob(self, code, path, blob_hash, force)
def get_lang_code(self, path): def get_lang_code(self, path):
''' '''
...@@ -278,15 +282,17 @@ class Translation(models.Model): ...@@ -278,15 +282,17 @@ class Translation(models.Model):
''' '''
Checks whether database is in sync with git and possibly does update. Checks whether database is in sync with git and possibly does update.
''' '''
blob = self.get_git_blob() self.update_from_blob()
self.update_from_blob(blob)
def update_from_blob(self, blob, force = False): def update_from_blob(self, blob_hash = None, force = False):
''' '''
Updates translation data from blob. Updates translation data from blob.
''' '''
if blob_hash is None:
blob_hash = self.get_git_blob_hash()
# Check if we're not already up to date # Check if we're not already up to date
if self.revision == blob.hexsha and not force: if self.revision == blob_hash and not force:
return return
logger.info('processing %s, revision has changed', self.filename) logger.info('processing %s, revision has changed', self.filename)
...@@ -308,23 +314,25 @@ class Translation(models.Model): ...@@ -308,23 +314,25 @@ class Translation(models.Model):
Unit.objects.filter(translation = self, id__in = oldunits).delete() Unit.objects.filter(translation = self, id__in = oldunits).delete()
# Update revision and stats # Update revision and stats
self.update_stats(blob) self.update_stats(blob_hash)
def get_git_blob(self): def get_git_blob_hash(self):
''' '''
Returns current Git blob for file. Returns current Git blob hash for file.
''' '''
repo = self.subproject.get_repo() gitrepo = self.subproject.get_repo()
tree = repo.tree() tree = gitrepo.tree()
return tree[self.filename] ret = tree[self.filename].hexsha
del gitrepo
return ret
def update_stats(self, blob = None): def update_stats(self, blob_hash = None):
if blob is None: if blob_hash is None:
blob = self.get_git_blob() blob_hash = self.get_git_blob_hash()
self.total = self.unit_set.count() self.total = self.unit_set.count()
self.fuzzy = self.unit_set.filter(fuzzy = True).count() self.fuzzy = self.unit_set.filter(fuzzy = True).count()
self.translated = self.unit_set.filter(translated = True).count() self.translated = self.unit_set.filter(translated = True).count()
self.revision = blob.hexsha self.revision = blob_hash
self.save() self.save()
def get_author_name(self, request): def get_author_name(self, request):
...@@ -337,17 +345,18 @@ class Translation(models.Model): ...@@ -337,17 +345,18 @@ class Translation(models.Model):
''' '''
Commits translation to git. Commits translation to git.
''' '''
repo = self.subproject.get_repo() gitrepo = self.subproject.get_repo()
status = repo.git.status('--porcelain', '--', self.filename) status = gitrepo.git.status('--porcelain', '--', self.filename)
if status == '': if status == '':
# No changes to commit # No changes to commit
return False return False
logger.info('Commiting %s as %s', self.filename, author) logger.info('Commiting %s as %s', self.filename, author)
repo.git.commit( gitrepo.git.commit(
self.filename, self.filename,
author = author, author = author,
m = settings.COMMIT_MESSAGE m = settings.COMMIT_MESSAGE
) )
del gitrepo
return True return True
def update_unit(self, unit, request): def update_unit(self, unit, request):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment