~dholbach/help-app/1428618

« back to all changes in this revision

Viewing changes to edit-here/translations.py

  • Committer: Daniel Holbach
  • Date: 2015-02-24 14:16:44 UTC
  • mfrom: (48.1.29 help.rewrite-links)
  • Revision ID: daniel.holbach@canonical.com-20150224141644-j08d8g2gbcikyouw
mergedĀ lp:~dholbach/ubuntu-devices-help/rewrite-links

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
import copy
3
3
import glob
4
4
import os
 
5
import polib
 
6
import re
5
7
import shutil
6
8
import subprocess
7
9
import tempfile
59
61
            args = []
60
62
            for document in documents:
61
63
                args += ['-m', document]
62
 
            args += ['-p', os.path.join(self.translations_dir, lang+'.po')]
 
64
            args += ['-p', lang.file_name]
63
65
            ret = self.run('po4a-updatepo', args)
64
66
            if ret:
65
67
                return False
69
71
        args = [
70
72
            '-k', TRANSLATION_COMPLETION_PERCENTAGE,
71
73
            '-m', doc,
72
 
            '-p', 'po/%s.po' % lang,
 
74
            '-p', lang.file_name,
73
75
            '-L', 'utf-8',
74
76
            ]
75
77
        return self.run('po4a-translate', args, with_output=True,
76
78
                        working_dir=os.path.join(PATH, '..'))
77
79
 
78
80
 
 
81
class Language(object):
 
82
    def __init__(self, po_file):
 
83
        self.file_name = po_file
 
84
        self.gettext_lang_code = os.path.basename(po_file).split('.po')[0]
 
85
 
 
86
    def rewrite_links(self):
 
87
        po_file = polib.pofile(self.file_name)
 
88
        for entry_group in [po_file.untranslated_entries(),
 
89
                            po_file.translated_entries(),
 
90
                            po_file.fuzzy_entries()]:
 
91
            for entry in entry_group:
 
92
                if '{filename}' in entry.msgid:
 
93
                    if not entry.msgstr:
 
94
                        entry.msgstr = entry.msgid
 
95
                    link = re.findall(r'\[.+?\]\(\{filename\}(.+?)\)',
 
96
                                      entry.msgid)[0]
 
97
                    entry.msgstr = entry.msgstr.replace(
 
98
                        link,
 
99
                        'lang-%s-%s' % (self.gettext_lang_code, link))
 
100
        po_file.save(self.file_name)
 
101
 
 
102
 
79
103
class Translations(object):
80
104
    def __init__(self):
81
105
        self._cleanup()
82
106
        self.translations_dir = os.path.abspath(os.path.join(PATH, '../po'))
83
 
        self.available_languages = \
84
 
            [os.path.basename(a).split('.po')[0] for a
85
 
             in glob.glob(self.translations_dir+'/*.po')]
 
107
        self.available_languages = []
 
108
        for po_filename in glob.glob(self.translations_dir+'/*.po'):
 
109
            self.available_languages += [Language(po_filename)]
86
110
        self.documents = self._find_documents()
87
111
        self.temp_dir = tempfile.mkdtemp()
88
112
        self.po4a = PO4A(self.translations_dir, self.temp_dir)
163
187
            title_line = title_line.split(metadata_tag.capitalize())[0]
164
188
            title_line = title_line.split(metadata_tag.upper())[0]
165
189
        return "%s\nLang: %s\nDate:\n\n" % \
166
 
            (title_line, lang)
 
190
            (title_line, lang.gettext_lang_code)
 
191
 
 
192
    def rewrite_links(self):
 
193
        for lang in self.available_languages:
 
194
            lang.rewrite_links()
167
195
 
168
196
    def generate_translations(self):
169
197
        for lang in self.available_languages:
172
200
                    self._call_po4a_translate(doc, lang)
173
201
                new_path = os.path.join(PATH, 'pages',
174
202
                                        'lang-%s-%s' %
175
 
                                        (lang, os.path.basename(doc)))
 
203
                                        (lang.gettext_lang_code,
 
204
                                         os.path.basename(doc)))
176
205
                text = self._new_header(lang, broken_title_line)
177
206
                text += output
178
207
                if os.path.exists(new_path):